🤖
9장 웹 크롤러 설계
크롤러는 검색 엔진 인덱싱, 웹 아카이빙, 웹 마이닝, 웹 모니터링 에 사용 한다.
🍀 1단계 : 문제 이해 및 설계 범위 확정
감당해야 하는 데이터의 규모와 기능들을 알아내기
개략적 규모 추정
- 매달 10억 개의 웹 페이지를 다운로드
- 초 당 400 페이지 , 최대 800
- 웹 페이지 크기 평균 500K
- 매달 500TB 저장 용량
🍀 2단계 : 개략적 설계안 제시 및 동의 구하기
설계안 & 작업 흐름

- 시작 URL들을 미수집 URL 저장소 저장
- 미수집 URL 저장소에서 URL 목록을 가져옴
- 도메인 이름 변환기 사용해서 URL로 부터 IP 주소 알아내고 웹 페이지 다운로드
- HTML 페이지 파싱 ,검증 : 콘텐츠 파서
- 중복 컨텐츠 확인
- 이미 컨텐츠 저장소에 있는지 확인.
- HTML 페이지에서 링크 고름 : URL 추출기
- 골라낸 링크를 URL 필터 전달
- 필터링 후 남은 URL만 중복 URL 판별 단계 전달
- 이미 처리 한지 확인 후 저장소에 있음 버림
- 저장소에 없으면 URL 저장소에 저장, 미수집 URL 저장소에도 전달
🍀 3단계 : 상세 설계
컴포넌트와 구현 기술
- DFS vs BFS
- 미수집 URL 저장소
- HTML 다운로더
- 안정성 확보 전략
- 확장성 확보 전략
- 문제 있는 콘텐츠 감지 및 회피 전략
DFS vs BFS
- BFS (DFS는 깊이 가능 어려움)
BFS 문제점
- 링크(wikipedia.com)를 병렬로 처리


⇒ 페이지 순위, 사용자 트래픽의 양, 업데이트 빈도등의 척도로 우선순위 구별
미수집 URL 저장소
이 저장소를 잘 구현하면 “예의를 갖춘 크롤러”, URL 사이의 우선선위와 선선도를 구별하는 크롤러 구현 가능 [5][9]
crawling_survey.pdf.crdownload446.2KB
예의
짧은 시간 안에 너무 많은 요청을 보내는 것은 ‘무례한 일’
→ 원칙 : 동일 웹페이지는 한 번에 한번만 요청
- Queue Router : 같은 호스트에 속한 URL은 언제나 같은 큐로 가도록 보장
- FIFO 큐 : 같은 호스트는 같은 큐에 보관
- Mapping Table : 호스트 이름과 큐 사이의 관계를 보관하는 테이블
호스트
|
큐
|
wikipedia
|
a
|
apple
|
b
|
…
|
…
|
naver
|
z
|
- Queue Selecter : 큐 선택기는 큐들을 순회하며 큐에서 URL을 꺼내 큐에서 나온 URL을 다운로드하도록 지정 스레드에 전달한다.
- Worker Thread : 작업 스레드는 전달된 URL을 다운로드하는 작업을 수행한다. 전달된 URL은 순차처리 될 것이며 지연시간(Latency)를 둘 수 있다.
⇒ 호스트명과 다운로드를 수행하는 작업 스레드 사이의 관계를 유지

우선순위
- 유용성에 따라 페이지 랭크, 트래픽 양, 갱신 빈도 등 다양한 척도 사용해 URL 을 나눌 필요가 있다.
- 우선순위 결정 장치[5][10]

- 전면 큐 (Front Queue) : 우선순위 결정 과정을 처리한다.
- 후면 큐 (Back Queue) : 크롤러가 예의 바르게 동작하도록 보장한다.
신선도
신선도를 위해 재수집할 필요가 있다.
- 웹 페이지 변경 이력 활용, 우선순위 활용
미수집 URL 저장소를 위한 지속성 저장장치
처리해야 하는 수억 개의 URL을 메모리에 보관하는 것은 안전성, 규모 확장성 측면에서 안좋다. (디스크 또한)
→ 본 설계안에서는 절충안으로 디스트 & 메모리 버퍼에 큐 사용(IO 비용 절감)
HTML 다운로더
Robots.txt : 다운로드 가능한지

- Robots.txt는 웹 사이트가 크롤러와 소통하는 표준적 방법
성능 최적화
- 분산 크롤링 :
- 도메인 이름 변환 결과 캐시
- 지역성
- 짧은 타임아웃
안정성 확보 전략
- 안정 해시
- 크롤링 상태 및 수집 데이터 저장
- 예외 처리
- 데이터 검증
확장성 확보 전략
새로운 유형의 콘텐츠 지원 가능하게 확장성을 신경 써야 한다.

문제 있는 콘텐츠 감지 및 회피 전략
- 중복 콘텐츠
- 거미덪
🍀 4단계 : 마무리
좋은 크롤러
- 규모 확장성
- 예의
- 확장성
추가 논의하면 좋은 것
- 서버 측 렌더링
- 스팸 방지
- 데이터베이스 다중화, 샤딩
- 수평적 규모 확장성
- 가용성, 일관성, 안정성
- 데이터 분석 솔루션
'책 > 가상면접사례로 배우는 대규모 시스템 설계' 카테고리의 다른 글
[가상면접사례로 배우는 대규모 시스템 설계] URL 단축키 설계 (0) | 2025.03.18 |
---|