요구사항과 예산 계산
크롤러는 처리량 문제로 보이기 쉽습니다. 그런데 계산해 보면 처리량은 남고 대상을 고르게 펴는 것이 어렵습니다.
| 항목 | 값 |
|---|---|
| 대상 | 검색용 웹 크롤러 |
| 가져오기 예산 | 월 10억 페이지 (신규와 재방문 합계) |
| 보관 | 누적 30억 페이지 |
| 페이지 크기 | 평균 500KB |
| 예의 | 같은 호스트에 초당 1회 이하 |
| 크롤러 노드 | 100대 |
| 로봇 배제 규칙 | 반드시 지킨다 |
| 같은 내용 | 한 벌만 저장한다 |
기능 요구사항과 범위 밖
| 구분 | 내용 |
|---|---|
| 이번에 만든다 | 주소 발견과 관리, 페이지 가져오기, 중복 걸러내기, 재방문 |
| 범위 밖 | 자바스크립트 실행, 로그인이 필요한 페이지, 이미지와 영상, 본문 분석 |
자바스크립트 실행을 뺀 것이 규모를 정합니다. 브라우저를 띄워 실행하면 페이지 하나당 비용이 수십 배가 되고, 월 10억 페이지 을 감당할 수 없습니다. 그 대신 자바스크립트로만 만들어지는 내용은 못 봅니다.
예산을 초로 바꾼다
월 10억 페이지 은 초당 약 386페이지입니다. 노드 100대 이면 노드당 초당 4페이지라 처리량은 전혀 부담이 아닙니다.
문제는 예의 규칙입니다. 한 호스트에서는 초당 한 번만 가져올 수 있으므로, 초당 386페이지를 내려면 최소 386개 호스트를 동시에 다뤄야 합니다.
이것이 이 설계의 성격을 정합니다. 빠르게 가져오는 문제가 아니라 다룰 호스트를 늘 충분히 확보하는 문제입니다.
저장 규모
페이지가 평균 500KB 이므로 월 500TB 입니다. 보관 누적 30억 페이지 이면 그보다 훨씬 큽니다.
여기서 중복 제거가 저장 비용과 직결됩니다. 같은 내용이 여러 주소로 오는 일이 흔하고, 그것을 걸러내지 못하면 저장량이 몇 배가 됩니다.
예의를 요구사항으로 적는 이유
예의 규칙은 우리가 선택하는 것이 아니라 지켜야 하는 것입니다. 지키지 않으면 상대 사이트에 부담을 주고, 결국 우리 크롤러가 차단됩니다.
| 지키지 않으면 | 결과 |
|---|---|
| 한 호스트에 몰아서 요청 | 그 사이트가 우리를 막는다 |
| 로봇 배제 규칙 무시 | 신뢰를 잃고 법적 문제가 될 수 있다 |
차단되면 그 사이트를 영구히 못 보게 됩니다. 크롤러의 자산은 접근 가능한 사이트 목록이고, 예의가 그 자산을 지킵니다.
무엇이 병목인지 먼저 말한다
이 요구사항에서 병목은 셋입니다.
다룰 수 있는 호스트 수
방문할 주소 목록의 크기
저장 비용
처리량과 대역폭은 병목이 아닙니다. 무엇이 병목이 아닌지 말하는 것도 요구사항 정리의 일부입니다. 아니라고 말하지 않으면 뒤에서 그쪽을 최적화하게 됩니다.
- Q.크롤러 요구사항을 어떻게 정리하시겠습니까
- Q.자바스크립트 실행을 범위 밖으로 둔 이유가 무엇인가요
- Q.예의 규칙을 요구사항에 적는 이유가 무엇인가요