9장 : 웹 크롤러 설계
Last updated
Last updated
웹 클롤러는 검색 엔진에서 널리 쓰는 기술로, 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 것이 주된 목적이다. 여기서 콭텍츠는 웹 페이지일 수도 있고, 이미지나 비디오, 또는 PDF 파일일 수도 있다. 웹 크롤러는 몇 개 웹 페이지에서 시작하여 그 링크를 따라 나가면서 새로운 콘텐츠를 수집한다.
크롤러 이용 사례
검색 엔진 인덱싱
웹 아카이빙
웹 마이닝
웹 모니터링
웹 크롤러의 기본 알고리즘
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의 저장용량이 필요할 것이다.
웹 크롤러 작업 흐름
중요 컴포넌트 및 구현 기술
웹 크롤러는 보통 BFS를 사용한다. BFS는 FIFO 큐를 사용하는 알고리즘이다. 이 큐의 한쪽으로는 탐색한 URL을 집어넣고, 다른 한쪽으로는 꺼내기만 한다.
문제점
한 페이지에서 나오는 링크의 상당수는 같은 서버로 돌아가기 때문에 이런 크롤러는 보통 ‘예의 없는’ 크롤러가 될 수 있다.
표준적 BFS 알고리즘은 URL 간에 우선순위를 두지 않는다. 그러나 페이지 순위, 사용자 트래팩의 양, 업데이트 빈도 등 여러 가지 척도에 비추어 처리 우선순위를 구별하는 것이 온당할 것이다.
URL 저장소는 다운로드할 URL을 보관하는 장소로, 잘 구현하면 '예의'를 갖춘 크롤러, URL 사이의 우선순위와 신선도를 구별하는 크롤러를 구현할 수 있다.
예의
우선순위
신선도
미수집 URL 저장소를 위한 지속성 저장장치
HTML 다운로더는 HTTP 프로토콜을 통해 웹 페이지를 내려 받는다.
Robots.txt
로봇 제외 프로토콜이라고 부르기도 하는 Robots.txt는 웹사이트가 크롤러와 소통하는 표준적 방법이다.
성능 최적화
분산 크롤링
도메인 이름 변환 결과 캐시
지역성
짧은 타임아웃
안정 해시(consistent hashing) : 다운로더 서버들에 부하를 분산할 때 적용하는 기술이다.
크롤링 상태 및 수집 데이터 저장 : 장애가 발생한 경우에도 쉽게 복구할 수 있도록 크롤링 상태와 수집된 데이터를 지속적으로 저장장치에 기록해 두는 것이 바람직하다.
예외 처리(exception handling) : 대규모 시스템에서 에러(error)는 불가피할 뿐 아니라 흔하게 벌어지는 일이다. 예외가 발생해도 전체 시스템이 중단되는 일 없이 그 작업을 우아하게 이어나갈 수 있어야 한다.
데이터 검증(data validation) : 시스템 오류를 방지하기 위한 중요 수단 가운데 하나다.
본 예제의 경우 새로운 모듈을 끼워 넣음으로써 새로운 형태의 콘텐츠를 지원할 수 있도록 설계하였다.
중복 콘텐츠
거미 덫
데이터 노이즈