예산이 월 10억 페이지 이고 보관이 누적 30억 페이지 입니다. 이 두 숫자를 곱해 보면 요구사항이 스스로 모순임을 알 수 있습니다.
전수 재방문은 불가능하다
보관한 30억 페이지를 월 1회씩 다시 보려면 월 30억 번의 가져오기가 필요합니다. 예산의 세 배입니다. 신규 페이지를 하나도 안 가져와도 부족합니다.
그래서 "모든 페이지를 주기적으로 갱신한다" 는 요구는 성립할 수 없습니다. 계산해서 그것을 밝히는 것이 이 단계의 일입니다.
예산을 나눈다
예산을 신규와 재방문으로 나누고, 재방문 안에서도 차등을 둡니다.
| 구분 | 배정 | 근거 |
|---|---|---|
| 신규 발견 | 절반 | 범위를 넓히는 것이 이 크롤러의 목적 |
| 자주 바뀌는 페이지 | 상당 부분 | 뉴스와 목록 페이지 |
| 나머지 | 남는 만큼 | 아주 드물게 본다 |
배정 비율은 목적에서 나옵니다. 검색용이면 새 페이지를 찾는 것과 최신 상태를 유지하는 것이 모두 필요하고, 둘의 균형이 검색 품질을 정합니다.
얼마나 자주 바뀌는지는 관찰로 안다
미리 알 수 없으므로 다시 가져와서 비교합니다. 내용이 바뀌지 않았으면 다음 간격을 늘리고, 바뀌었으면 줄입니다.
바뀌지 않았다: 다음에는 더 늦게 본다
바뀌었다: 다음에는 더 일찍 본다
이렇게 하면 자주 바뀌는 페이지가 저절로 자주 방문되고, 죽은 페이지는 저절로 잊힙니다. 관찰이 정책을 만드는 구조입니다.
그리고 상대가 알려 주는 신호를 씁니다. 바뀌지 않았다는 응답을 받으면 내용을 받지 않으므로 예산을 거의 쓰지 않고 확인할 수 있습니다. 이 확인이 값싸다는 것이 재방문 설계의 핵심입니다.
무엇을 먼저 가져올지
새 주소가 늘 예산보다 많으므로 순서를 정해야 합니다.
| 신호 | 뜻 |
|---|---|
| 그 페이지를 가리키는 링크 수 | 중요하다고 판단할 근거 |
| 호스트의 과거 품질 | 쓸모 있는 내용을 내놓는 사이트인가 |
| 깊이 | 사이트 첫 화면에서 얼마나 멀리 있나 |
이 신호들은 완벽하지 않습니다. 그래서 한 신호에만 의존하지 않고 섞습니다. 링크 수만 보면 서로 링크를 걸어 순위를 올리는 방식에 속습니다.
우선순위와 예의는 충돌한다
중요한 페이지가 한 호스트에 몰려 있으면, 우선순위대로 가져오려 해도 예의 규칙 때문에 초당 한 번씩만 가능합니다.
그래서 실제 순서는 두 규칙의 타협입니다. 우선순위는 어느 큐를 먼저 채울지를 정하고, 예의는 그 큐에서 꺼내는 속도를 정합니다. 두 층으로 나누면 서로를 방해하지 않습니다.