Google 검색을 어떻게 구현 하시겠습니까? [닫은]


44

인터뷰에서 "Google 검색을 어떻게 구현 하시겠습니까?" 그런 질문에 어떻게 대답 하시겠습니까? Google의 일부 부분 (BigTable, MapReduce, PageRank 등)을 구현하는 방법을 설명하는 리소스가있을 수 있지만 인터뷰에는 맞지 않습니다.

어떤 전체 아키텍처를 사용하고 15-30 분 동안이를 설명 할 수 있습니까?

~ 100k 문서를 처리하는 검색 엔진을 구축하는 방법을 설명하고 샤딩을 통해 약 50M 문서로 확장 한 다음 다른 건축 / 기술 도약으로 설명합니다.

20,000 피트 뷰입니다. 내가 원하는 것은 세부 사항입니다. 인터뷰에서 실제로 대답하는 방법. 어떤 데이터 구조를 사용 하시겠습니까? 아키텍처가 어떤 서비스 / 기계로 구성되어 있습니까? 일반적인 쿼리 대기 시간은 얼마입니까? 장애 조치 / 스플릿 브레인 문제는 어떻습니까? 기타...


1
인터뷰 질문입니다. 그들은 얼마나 상세하게 찾고 있었습니까?
Paddy

1
사실, 그것은 얼마 전에 인터뷰를 할 때 사용한 질문입니다. 아름다움은 당신이 제공하는 세부 사항의 양이 당신에게 달려 있고, 면접관이 이것에 쓰고 싶어하는 시간입니다.
ripper234

2
"지도 축소! 다음 질문주세요." "전화하겠습니다."

2
좋은 질문이지만 대답하는 데 몇 시간을 소비 할 수있는 유형입니다. 어쩌면 나는 플래시 드라이브로 구글에 침입했을 것이다

나는 그것이 압도적이라고 생각하지만 이것은 좋은 질문이라고 생각합니다. 나는 최근에 뉴스 사이트에서 기사를 "무게"알고리즘을 구축하는 방법에 대해 생각하고있다 (이론적으로는 샤워에 계속 머물러야하는 것). 나는이 아이디어조차 상당히 어렵다는 것을 인정한다. /복잡한.

답변:


45

메타 포인트를 고려하십시오 : 면접관은 무엇을 찾고 있습니까?

이와 같은 거대한 질문은 PageRank 유형 알고리즘을 구현하는 데 어려움을 겪거나 분산 인덱싱을 수행하는 방법에 시간을 낭비하지 않습니다. 대신, 그것이 취할 것의 완전한 그림 에 초점을 맞추 십시오. 이미 큰 조각 (BigTable, PageRank, Map / Reduce)을 모두 알고있는 것 같습니다. 그렇다면 문제는 실제로 어떻게 서로 연결합니까?

여기 내 찌르다.

1 단계 : 인덱싱 인프라 (설명 5 분 소요)

Google (또는 모든 검색 엔진)을 구현하는 첫 번째 단계는 인덱서를 작성하는 것입니다. 이것은 데이터 모음을 크롤링하고 결과를 읽기에보다 효율적인 데이터 구조로 생성하는 소프트웨어입니다.

이를 구현하려면 크롤러와 인덱서의 두 부분을 고려하십시오.

웹 크롤러의 작업은 웹 페이지 링크를 스파이더 링하여 세트로 덤프하는 것입니다. 여기서 가장 중요한 단계는 무한 루프 나 무한 생성 컨텐츠에 걸리지 않도록하는 것입니다. 이러한 각 링크를 하나의 대규모 텍스트 파일 (현재)에 배치하십시오.

둘째, 인덱서는 맵 / 리 듀스 작업의 일부로 실행됩니다. 함수를 입력의 모든 항목에 매핑 한 다음 결과를 단일 '물건'으로 줄입니다. 인덱서는 단일 웹 링크를 가져 와서 웹 사이트를 검색하여 색인 파일로 변환합니다. (다음에 설명합니다.) 축소 단계는 이러한 모든 색인 파일을 단일 단위로 집계하는 것입니다. (수백만 개의 느슨한 파일이 아니라) 인덱싱 단계를 병렬로 수행 할 수 있으므로 임의로 큰 데이터 센터에서이 맵 / 축소 작업을 팜화할 수 있습니다.

2 단계 : 인덱싱 알고리즘의 특성 (설명 10 분 소요)

웹 페이지 처리 방법을 설명했으면 다음 부분에서 의미있는 결과를 계산하는 방법에 대해 설명합니다. 여기에 짧은 대답은 '많은 맵 / 리 듀스'이지만 할 수있는 일을 고려하십시오.

  • 각 웹 사이트에 대해 들어오는 링크 수를 세십시오. 더 많이 링크 된 페이지는 '더 나은'것이어야합니다.
  • 각 웹 사이트에 대해 링크가 어떻게 표시되었는지 살펴보십시오. (<h1> 또는 <b>의 링크는 <h3>에 묻힌 링크보다 중요해야합니다.)
  • 각 웹 사이트에 대해 아웃 바운드 링크 수를보십시오. (스패머를 좋아하는 사람은 없습니다.)
  • 각 웹 사이트에 대해 사용 된 단어 유형을보십시오. 예를 들어, '해시'및 '표'는 웹 사이트가 컴퓨터 과학과 관련되어 있음을 의미합니다. 반면에 '해시'와 '브라우니'는 사이트가 다른 것과 관련이 있다는 것을 암시합니다.

불행히도 나는 데이터를 분석하고 처리하는 데 도움이되는 종류의 방법에 대해 충분히 알지 못합니다. 그러나 일반적인 아이디어는 데이터를 분석 할 수있는 확장 가능한 방법 입니다.

3 단계 : 결과 제공 (설명 10 분 소요)

마지막 단계는 실제로 결과를 제공하는 것입니다. 웹 페이지 데이터를 분석하는 방법에 대한 흥미로운 통찰력을 공유했으면하지만 실제로 어떻게 쿼리합니까? 일화 적으로 매일 10 %의 Google 검색어가 조회 된 적이 없습니다. 이는 이전 결과를 캐시 할 수 없음을 의미합니다.

웹 색인에서 단일 '조회'를 가질 수 없으므로 어느 것을 시도 하시겠습니까? 다른 인덱스를 어떻게 보시겠습니까? (아마도 결과를 결합하면 키워드 'stackoverflow'가 여러 인덱스에서 높게 나타났습니다.)

또한 어쨌든 어떻게 보시겠습니까? 방대한 양의 정보 에서 데이터를 빠르게 읽는 데 어떤 종류의 접근 방식을 사용할 수 있습니까? (여기서 선호하는 NoSQL 데이터베이스를 무료로 이름을 지정하거나 Google의 BigTable이 무엇인지 살펴보십시오.) 매우 정확한 인덱스가 있어도 데이터를 빠르게 찾을 수있는 방법이 필요합니다. 예를 들어 200GB 파일 내에서 'stackoverflow.com'의 순위 번호를 찾으십시오.

무작위 문제 (남은 시간)

검색 엔진의 '본'을 다룬 후에는 특별히 알고있는 개별 주제에 대해 자유롭게 정보를 제공하십시오.

  • 웹 사이트 프론트 엔드의 성능
  • 맵 / 축소 작업을위한 데이터 센터 관리
  • A / B 테스트 검색 엔진 개선
  • 이전 검색 량 / 추세를 인덱싱에 통합 (예 : 프론트 엔드 서버로드가 9-5 일로 급증 할 것으로 예상하고 오전 초에 사망합니다.)

여기서 논의 할 자료는 15 분 이상이지만 분명히 시작하기에 충분합니다.


1
이것은 놀라운 일이지만 Google 구축과 관련된 규모 문제를 해결하기 시작하지 않는다고 생각합니다. 더 어려운 부분은 답변의 결과 제공 부분과 많은 Google의 마술이있는 부분에 있다고 생각합니다. 그런 식으로 설계하는 방법에 대한 아이디어가 있지만 다른 사람들의 말을 듣는 데 흥미 롭습니다.
ripper234

나는 Quora에 이것을 물었다-나는 관객이이 질문에 대답 할 것이라고 생각한다. quora.com/…
ripper234

내 대답을 확인하십시오.
ripper234

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.