인터넷 파충류를 설계하다

무엇이 인터넷 파충류입니까?


구글과 같은 검색엔진은 사용자가 최신 정보를 신속하게 얻을 수 있도록 자주 새로운 페이지를 검색하고 인덱스해야 한다.음반 회사는 판권과 상표 침해 사건을 감시해야 한다.이것들은 단지 인터넷 파충류의 일부 용례일 뿐이다.

정경


이 용례에서 우리는 매달 10억 개의 웹 페이지를 처리하고 5년 동안 웹 내용을 저장해야 한다는 용례를 고려해 보자.

스토리지 요구 사항 예측


초당 웹 페이지 조회 횟수(QPS):

1 x 109 pages / 30 days / 24 hours / 3600 seconds = 400 QPS


QPS가 이 추정치보다 높은 이유는 몇 가지가 있을 수 있습니다.따라서 최대 QPS를 계산합니다.

Peak QPS = 2 * QPS = 800 QPS


우리가 사용할 평균 웹 페이지 크기는 다음과 같습니다.

500 kb


매달 페이지를 저장하는 데 필요한 저장 공간:

1 x 109 pages X 500 kb = 500 tb


5년 스토리지 페이지에 필요한 스토리지 공간:

500 tb X 12 months X 5 years = 30 pb (petabytes)


고급 디자인


다음은 논리가 고차원적으로 흐르는 모습이다.그리고 우리는 매 단계를 상세하게 소개할 것이다.

피드 URL


피드 URL은 전체 네트워킹 프로세스의 시작점이 되는 간단한 텍스트 파일입니다.네트워크 파충류는 같은 영역의 모든 페이지를 방문할 것이다.예를 들어 만약에 www.homedepot.com을 피드 URL으로 제공한다면 인터넷 파충류는 상점의 모든 부서를 검색할 것이다. 예를 들어 www.homedepot.com/gardeningwww.homedepot.com/lighting 등이다.
선택한 피드 URL은 용례에 따라 다릅니다.만약 141560개의 저작권 침해 URL을 만들었다면 141560개의 저작권 침해 URL을 발견할 수 있을 것이다.

URL 경계


이 단계를 액세스할 URL의 FIFO(Fedi-Fout) 큐로 볼 수 있습니다.이 큐에는 액세스한 적이 없는 URL만 표시됩니다.다음은 URL 경계에 대한 두 가지 중요한 고려 사항에 대해 살펴보겠습니다.
  • 예의: 저희 인터넷 파충류 프로그램은 같은 서버에 너무 많은 연속 또는 병행 요청을 보내는 것을 피해야 합니다. 그렇지 않으면 서비스 거부(DOS) 공격을 초래할 수 있습니다.요청이 호스트 서버에 잠기지 않도록 하기 위해서, 우리는 특정 호스트에 대한 모든 요청을 한 번에 한 프로세스로만 처리하는 정책을 실시할 수 있다.이것은 같은 서버에 대한 병렬 요청을 피했다.

  • 위의 디자인은 관리 예의의 구성 요소를 보여 준다.매핑 테이블 스토리지 호스트 도메인(예: www.soundcloud.com)을 특정 대기열로 매핑합니다.대기열 라우터는 매핑을 사용하여 URL을 해당 대기열로 보냅니다.그런 다음 각 대기열(1, 2... N)에는 같은 호스트의 URL이 포함됩니다.각 다운로드 프로세스는 큐에 매핑되고 한 번에 하나의 URL을 받습니다.다운로드 작업마다 지연을 추가할 수 있습니다.
  • 우선 순위: 모든 웹 페이지의 중요성이 같은 것은 아닙니다.예를 들어 레드디트 그룹의 새 게시물의 우선순위는 미 연합사의 새 게시물보다 낮다.따라서 우선 순위를 관리하기 위해 워크플로우에서 구성 요소를 사용해야 합니다.우리는 예의 구성 요소와 같은 디자인을 사용할 것입니다. 이런 경우를 제외하고는 서로 다른 대기열이 서로 다른 우선순위를 나타냅니다.대기열 선택기는 우선 순위가 높은 대기열에서 URL을 더 자주 선택하는 역할을 합니다.그리고 우리는 이 두 대열을 순서대로 배열할 것이다.먼저 URL은 우선 순위 대기열에 배치되고 예의 대기열에 배치됩니다.아래 디자인 보세요.

  • HTML 다운로드 프로그램


    URL을 지정하고 DNS에 요청을 보내고 IP 주소를 받습니다.그런 다음 HTML 페이지를 검색하기 위해 IP 주소로 다른 요청을 보냅니다.
    대부분의 사이트에는 www.youtube.com이라는 파일이 있는데 파충류는 이 파일을 마법사로 사용해 어떤 페이지를 해석할 수 있도록 한다.다음은 www.homedepot.com 파일의 한 토막입니다.웹 사이트에 대한 접속을 시도하기 전에, 우리는 이 문서를 검사하고 규칙을 준수해야 한다.이 로봇스 파일도 중복 다운로드를 피하기 위해 캐시에 적합하다.
    Disallow: /*retail/availability*
    Disallow: /*retail/availabilitySearch*
    Disallow: /*retail/pickupEligibility*
    Disallow: /*shop/sign_in*
    Disallow: /*shop/sign_out*
    Disallow: /*/shop/1-800-MY-APPLE/*
    
    다음은 HTML 다운로드 프로그램의 성능 최적화를 소개할 것이다
  • 분포식 기어오르기: 대부분의 고성능 전략과 마찬가지로 한 서버가 아닌 여러 서버에서 임무를 분배하는 것이 이상적이다.HTML 다운로드 프로그램에서 여러 서버가 URL 서브셋을 지정한 상태에서 HTTP 요청을 실행합니다.다음은 URL frontier 및 분산 HTML 다운로드 프로그램의 업데이트된 그림입니다.
  • 캐시 DNS 해상도: DNS 요청의 평균 응답 시간은 10ms에서 200ms 사이입니다.thread이 DNS에 요청을 하면 첫 번째 요청이 완료될 때까지 다른 요청이 차단됩니다.따라서 우리 자신의 DNS 캐시(메모리나 단독 데이터베이스에서)를 유지하는 것은 효과적인 속도 최적화 기술이다.간단한 cron 작업으로 캐시를 정기적으로 업데이트할 수 있습니다.
  • 위치: 서버를 지리적으로 배치하도록 선택합니다.HTML 다운로드 서버가 사이트 호스트에 더 가까운 위치에 있을 때 다운로드 시간을 현저히 줄일 수 있다.이것은 작업 흐름의 모든 다른 구성 요소: 네트워크 서버, 캐시, 대기열, 저장 등에도 적용된다.
  • 짧은 시간 초과: 일부 웹 서버의 응답 속도는 다른 서버보다 느릴 수 있습니다. 우리는 기어가는 속도가 이로 인해 느려지는 것을 원하지 않습니다.따라서 HTML 다운로드 프로그램에서 최대 대기 시간을 설정하는 것이 좋습니다.호스트가 미리 정의된 시간 내에 응답하지 않으면 다운로드 프로그램은 건너뛰고 다른 페이지로 이동합니다.
  • 도메인 이름 확인 모듈


    HTML 페이지를 검색하기 전에 DNS 해결사는 URL을 IP 주소로 변환해야 합니다.

    컨텐트 파서


    인터넷상의 어떤 HTML 페이지도 오류나 오류 데이터가 없다는 것을 보장할 수 없다.컨텐트 파서는 HTML 페이지를 검증하고 잘못된 형식의 데이터를 필터링합니다.

    내용 보셨어요?


    파충류는 수십억 개의 페이지를 검색해야 하기 때문에, 우리는 과거에 처리된 페이지를 삭제함으로써 우리의 작업을 반복하지 않기를 희망한다.이 단계에서는 HTML 컨텐트가 이미 저장되어 있는지 확인하고 저장되어 있으면 무시합니다.그것은 조회 내용을 데이터베이스에 저장함으로써 이 점을 실현할 것이다.

    컨텐트 저장소


    HTML의 스토리지 시스템입니다.이것은 전통적인 관계 데이터베이스일 수 있다.HTML 페이지의 해시만 저장하거나 체크섬 기능을 통해 전체 HTML 페이지를 분석하고 저장할 필요 없이 중복된 내용을 검사하는 속도를 높일 수 있습니다.

    주소 추출


    이 단계는 HTML을 사용하여 새 URL을 구문 분석하고 추출합니다.예를 들어, 다음은 애플 웹 사이트의 HTML입니다.URL 추출기는 href 값을 찾아 전체 URL을 만듭니다.

    url 필터


    이 단계에서는 PDF나 JPG 등 일부 컨텐츠 유형과 우리가 소유할 수 있는 블랙리스트의 URL을 제외합니다.URL에서 파일 확장자를 찾아 이러한 컨텐트 유형을 찾습니다.

    인터넷 주소 보셨어요?


    이 단계에서는 이전에 액세스한 URL 또는 URL 경계에 이미 존재하는 URL을 추적합니다.URL이 URL 저장소 데이터베이스에 저장되어 있는지 확인합니다.이것은 중복 작업과 가능한 무한 순환 조건을 줄이는 데 도움이 된다.
    이 글은 알렉스 서 (Alex Xu) 의 《 시스템 설계 인터뷰 - 내막자 안내서 》 에서 발췌한 것이다.

    좋은 웹페이지 즐겨찾기