Frontier
- 대기중인 URI들을 가지고 있는 여러 queue 사용을 기반으로 한다. 하나의 database에 모든 queue들을 맵핑하는 memory map 방식을 사용하며, 모든 queue는 round-robin 방식으로 관리된다.
frontier는 budgeting 방식을 사용하여 queue의 life cycle을 관리한다. https://webarchive.jira.com/wiki/display/Heritrix/Frontier+queue+budgets 참조
기존 설정 값
<bean id="frontier" class="org.archive.crawler.frontier.BdbFrontier">
<property name="queueTotalBudget" value="-1" />
<property name="balanceReplenishAmount" value="3000" />
<property name="errorPenaltyAmount" value="100" />
<property name="precedenceFloor" value="255" />
<property name="queuePrecedencePolicy">
<bean class="org.archive.crawler.frontier.precedence.BaseQueuePrecedencePolicy" />
</property>
<property name="snoozeLongMs" value="300000" />
<property name="retryDelaySeconds" value="900" />
<property name="maxRetries" value="30" />
<property name="recoveryLogEnabled" value="true" />
<property name="maxOutlinks" value="6000" />
<property name="extractIndependently" value="false" />
<property name="outbound">
<bean class="java.util.concurrent.ArrayBlockingQueue">
<constructor-arg value="200"/>
<constructor-arg value="true"/>
</bean>
</property>
<property name="inbound">
<bean class="java.util.concurrent.ArrayBlockingQueue">
<constructor-arg value="40000"/>
<constructor-arg value="true"/>
</bean>
</property>
<property name="dumpPendingAtClose" value="false" />
</bean>
- [property에 대한 설명]
- queueTotalBudget : queue가 active 상태일 때 소비한 balance의 총합이 이 설정 값을 초과하면 retired 상태로 변환된다.
- balanceReplenishAmount : queue가 in-active 상태에서 active 상태로 변환될 때 새로 balance를 충전 받는 값이다.
- errorPenaltyAmount : error fetch가 발생할 경우 이 설정 값 만큼 총 expenditure에 포함한다. budget penalty.
- precedenceFloor : 이 설정값 아래의 우선순위를 가진 queue는 크롤링 되지 않는다.
- queuePrecedencePolicy : queue의 우선순위를 결정할 정책 설정
- BaseQueuePrecedencePolicy : 모든 queue에 일정한 상수 값의 우선순위를 적용한다.
- snoozeLongMs : queue가 이 설정값보다 snooze 기간이 길어지면 short snooze상태가 아닌 long snooze 상태로 교체된다. long snooze 상태의 queue는 memory에서 disk로 swap 될 수 있다.
- retryDelaySeconds : 특정 URI에 대한 크롤링을 retry 할 때, retry 시 발생할 수 있는 문제들을 피하기 위해 retry 전에 delay를 둔다.
- maxRetries : 최대 retry 횟수.
- recoveryLogEnabled : 크롤링 도중 crash가 발생하였을 경우, crash 된 대략적인 상황을 재구성 할 수 있도록 하는 logs 디렉토리 안에 frontier.recovery.gz 파일을 남길 것인지에 대한 여부.
- maxOutlinks : 한 페이지에서 추출할 link 최대 개수
- extractIndependently : 이 값이 true이면 다른페이지에서 이미 추출한 URI는 추출하지 않는다.
- outbound : outbound queue의 종류를 설정하고 세팅.
- ArrayBlockingQueue : (http://egloos.zum.com/oniondev/v/558949 [Java] BlockingQueue의 종류와 용법 참고)
- 고정배열에 일반적인 Queue를 구현한 클래스, 생성 후 크기변경 불가
- 꽉찼을때 추가 시 block, 비었을때 추출 시 block
- 선택적으로 공평성 정책을 두어 block한 thread들의 순차적 대기열(FIFO) 생성
(대기열 처리에 대해 정확한 순서 보장 X, 공평성 따짐 - throughput 감소되나 variability를 줄이고 starvation을 해소한다.)
- 첫번째 argument는 queue의 capacity를 설정하고, 두번째 argument는 block 되었던 thread가 FIFO 순서로 access 할 지에 대한 여부.
- ArrayBlockingQueue : (http://egloos.zum.com/oniondev/v/558949 [Java] BlockingQueue의 종류와 용법 참고)
- inbound : inbound queue의 종류를 설정하고 세팅.
- ArrayBlockingQueue : outbound 참조
- dumpPendingAtClose : 크롤링이 끝날 때 대기 상태의(pending) URI들을 crawl.log에 덤프를 남긴다.
'212.Heritrix_설정파일 > 07. FRONTIER' 카테고리의 다른 글
[Heritrix/crawler-beans.cxml]uriUniqFilter (0) | 2016.08.03 |
---|