마지막으로 규칙 준수를 다룹니다. 요구사항에서 반드시 지킨다고 적었으므로 이것은 선택이 아닙니다.
규칙 확인이 예산을 먹는다
규칙 파일을 페이지마다 받으면 요청이 두 배가 됩니다. 그리고 예의 규칙이 초당 한 번이므로 실제 수집량이 절반이 됩니다.
그래서 호스트 단위로 캐시합니다. 한 번 받아 그 호스트의 모든 주소에 적용합니다. 규칙이 바뀔 수 있으므로 하루 정도 지나면 다시 받습니다.
모르면 멈춘다
규칙 파일을 받지 못하면 어떻게 할지 정해야 합니다. 상대 서버가 응답하지 않을 때입니다.
| 선택 | 결과 |
|---|---|
| 규칙이 없는 것으로 보고 가져온다 | 금지된 곳을 긁을 수 있다 |
| 가져오지 않는다 | 그 호스트를 잠시 놓친다 |
가져오지 않는 쪽을 고릅니다. 놓친 페이지는 나중에 가져올 수 있지만, 금지된 곳을 긁으면 차단되고 그 사이트를 영구히 잃습니다.
이 판단은 앞의 아키타입들에서 반복된 기준과 같습니다. 회복 가능한 실패를 고릅니다.
우리가 누구인지 밝힌다
요청에 크롤러 이름과 안내 주소를 담습니다. 그러면 사이트 운영자가 우리를 식별하고 규칙으로 조절할 수 있습니다.
이름을 밝히면 규칙 파일에서 우리만 따로 다룰 수 있다
안내 주소가 있으면 문제가 생겼을 때 연락이 온다
밝히지 않는 것이 더 위험합니다. 정체를 모르는 트래픽은 차단부터 당하고, 우리는 왜 차단됐는지도 모릅니다.
상대가 요청하면 멈춘다
사이트 운영자가 우리 크롤을 원하지 않는다고 알리면 그 시점에 멈춥니다. 대응이 느리면 신뢰를 잃고, 신뢰는 접근 가능한 사이트 목록이라는 자산과 같습니다.
그래서 신고에서 반영까지의 시간을 지표로 관리합니다. URL 단축기에서 도메인 평판을 관리한 것과 같은 구조입니다.
이 설계가 하지 않기로 한 것
| 후보 | 결정과 근거 |
|---|---|
| 자바스크립트 실행 | 하지 않는다. 페이지당 비용이 수십 배가 된다 |
| 전수 월 1회 재방문 | 하지 않는다. 계산하면 예산의 세 배다 |
| 우선순위를 위해 예의 어기기 | 하지 않는다. 차단되면 자산을 잃는다 |
| 함정 경로 완전 차단 | 하지 않는다. 판정이 확실하지 않다. 뒤로 미룬다 |
| 규칙 파일을 못 받았을 때 진행 | 하지 않는다. 회복 불가능한 실패다 |
| 중복 페이지 버리기 | 하지 않는다. 링크는 여전히 쓸모가 있다 |
여섯 개가 모두 "하지 않는다" 입니다. 크롤러는 남의 서버를 쓰는 시스템이라, 할 수 있는 것보다 하지 않을 것을 정하는 일이 설계의 대부분입니다.