9장 : 웹 크롤러 설계
웹 클롤러는 검색 엔진에서 널리 쓰는 기술로, 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 것이 주된 목적이다. 여기서 콭텍츠는 웹 페이지일 수도 있고, 이미지나 비디오, 또는 PDF 파일일 수도 있다. 웹 크롤러는 몇 개 웹 페이지에서 시작하여 그 링크를 따라 나가면서 새로운 콘텐츠를 수집한다.
크롤러 이용 사례
검색 엔진 인덱싱
웹 아카이빙
웹 마이닝
웹 모니터링
1단계 : 문제 이해 및 설계 범위 확정
웹 크롤러의 기본 알고리즘
URL 집합이 입력으로 주어지면, 해당 URL들이 가리키는 모든 웹 페이지를 다운로드한다.
다운받은 웹 페이지에서 URL들을 추출한다.
추출된 URL들을 다운로드할 URL 목록에 추가하고 위의 과정을 처음부터 반복한다.
요구사항 범위 정리
규모 확장성 : 병행성(parallelism)을 활용하면 보다 효과적으로 웹 크롤링을 할 수 있다.
안정성 : 잘못 작성된 HTML, 반응 없는 서버, 장애, 악성 코드가 붙어 있는 링크같이 비정상적 입력이나 환경에 잘 대응할 수 있어야 한다.
예절 : 크롤러는 수집 대상 웹 사이트에 짧은 시간 너무 많은 요청을 보내서는 안 된다.
확장성 : 새로운 형태의 콘텐츠를 지원하기가 쉬워야 한다.
개략적 규모 추정
매달 10억 개의 웹 페이지를 다운로드한다.
QPS = 10억(1billion, 1,000,000,000)/30일/24시간/3600초 = 대략 400페이지/초
최대(Peak) QPS = 2 x QPS = 800
웹 페이지의 크기 평균은 500k라고 가정
10억 페이지 x 500k = 500TB/월
1개월치 데이터를 보관하는 데는 500TB, 5년간 보관한다고 가정하면 결국 500TB x 12개월 x 5년 = 30PB의 저장용량이 필요할 것이다.
2단계 : 개략적 설계안 제시 및 동의 구하기
웹 크롤러 작업 흐름
3단계 : 상세 설계
중요 컴포넌트 및 구현 기술
DFS vs BFS
웹 크롤러는 보통 BFS를 사용한다. BFS는 FIFO 큐를 사용하는 알고리즘이다. 이 큐의 한쪽으로는 탐색한 URL을 집어넣고, 다른 한쪽으로는 꺼내기만 한다.
문제점
한 페이지에서 나오는 링크의 상당수는 같은 서버로 돌아가기 때문에 이런 크롤러는 보통 ‘예의 없는’ 크롤러가 될 수 있다.
표준적 BFS 알고리즘은 URL 간에 우선순위를 두지 않는다. 그러나 페이지 순위, 사용자 트래팩의 양, 업데이트 빈도 등 여러 가지 척도에 비추어 처리 우선순위를 구별하는 것이 온당할 것이다.
미수집 URL 저장소
URL 저장소는 다운로드할 URL을 보관하는 장소로, 잘 구현하면 '예의'를 갖춘 크롤러, URL 사이의 우선순위와 신선도를 구별하는 크롤러를 구현할 수 있다.
예의
우선순위
신선도
미수집 URL 저장소를 위한 지속성 저장장치
HTML 다운로더
HTML 다운로더는 HTTP 프로토콜을 통해 웹 페이지를 내려 받는다.
Robots.txt
로봇 제외 프로토콜이라고 부르기도 하는 Robots.txt는 웹사이트가 크롤러와 소통하는 표준적 방법이다.
성능 최적화
분산 크롤링
도메인 이름 변환 결과 캐시
지역성
짧은 타임아웃
안정성 확보 전략
안정 해시(consistent hashing) : 다운로더 서버들에 부하를 분산할 때 적용하는 기술이다.
크롤링 상태 및 수집 데이터 저장 : 장애가 발생한 경우에도 쉽게 복구할 수 있도록 크롤링 상태와 수집된 데이터를 지속적으로 저장장치에 기록해 두는 것이 바람직하다.
예외 처리(exception handling) : 대규모 시스템에서 에러(error)는 불가피할 뿐 아니라 흔하게 벌어지는 일이다. 예외가 발생해도 전체 시스템이 중단되는 일 없이 그 작업을 우아하게 이어나갈 수 있어야 한다.
데이터 검증(data validation) : 시스템 오류를 방지하기 위한 중요 수단 가운데 하나다.
확장성 확보 전략
본 예제의 경우 새로운 모듈을 끼워 넣음으로써 새로운 형태의 콘텐츠를 지원할 수 있도록 설계하였다.
문제 있는 콘텐츠 감지 및 회피
중복 콘텐츠
거미 덫
데이터 노이즈
Last updated