DevSprout / System-Design-Interview

:books: 가상 면접 사례로 배우는 대규모 시스템 설계 기초 스터디
6 stars 0 forks source link

Chapter 9. 웹크롤러 설계 #9

Open minkukjo opened 2 years ago

minkukjo commented 2 years ago

느낀 점

궁금한 점

LOG-INFO commented 2 years ago

끄적끄적

MinJunKweon commented 2 years ago

Chapter 9. 웹 크롤러 설계

느낀점

정리

간단 설계

  1. URL 집합이 입력으로 주어지면, 해당 URL들의 웹 페이지를 다운로드
  2. 다운로드된 웹 페이지 콘텐츠를 저장하고, 포함된 URL들을 추출
  3. 추출된 URL을 다운로드 대상 URL 목록에 추가 후 1번부터 다시 반복

요구사항 구체화

설계 구조

image

상세 설계

DFS vs BFS

미수집 URL 저장소

image

image

미수집 URL 저장소를 위한 지속성 저장장치

HTML 다운로더

성능 최적화

  1. 분산 크롤링
    • 크롤링 서버를 여러대 두어 동시에 여러대로 크롤링을 할 수 있도록 분산 시킴
  2. 도메인 이름 변환(DNS Resolve) 결과 캐시
    • 도메인 이름을 변환하는 데에는 꽤 오랜 시간이 소요될 수 있으므로 이를 미리 IP로 변환하는 작업을 동시에 진행한다
  3. 지역성
    • 크롤링 대상 URL의 서버와 지역적으로 가까운 서버들에 배정시켜서 속도를 빠르게하는 전략을 사용함
  4. 짧은 타임아웃
    • 접속이 안되는 서버 혹은 응답시간이 너무 느린 경우에는 타임아웃을 짧게 주어서 빠르게 실패시키고 다른 URL을 처리하게끔 변경한다

확장성

문제 있는 콘텐츠 감지 및 회피

  1. 중복 콘텐츠
    • 해시 체크섬을 사용해서 중복 컨텐츠를 필터링
  2. 거미 덫 (Spider Trap)
    • 악의적으로 무한루프에 빠뜨리도록 설계한 웹 페이지가 존재할 수 있음
    • ex. 영원히 끝나지 않는 디렉토리 구조를 포함하는 링크
      • 최대 URL 길이를 제한하면 회피 가능
    • 하지만 이외에도 다양한 웹페이지가 많기 때문에 수작업으로 튜닝하는 것이 좋음
    • 웹 페이지 태그가 깨지는 등 정말 다양한 사례가 존재할 수 있음
  3. 데이터 노이즈
    • 광고, 스크립트 코드, 스팸 URL, 악성 코드 등 크롤링에 의미 없는 데이터는 가능한 제외시켜야함

추가적으로 고려할만한 사항

2rohyun commented 2 years ago

느낀점


끄적끄적