Google이 어떻게 그렇게 빠를 수 있습니까?


89

Google이 쿼리를 빠르게 처리 할 수있게하는 기술 및 프로그래밍 결정은 무엇입니까?

내가 무언가를 검색 할 때마다 (하루에 여러 번 중 하나) 1 초에 가깝거나 짧은 시간 내에 결과를 제공하는 방식은 항상 나를 놀라게합니다. 이를 수행하기 위해 어떤 종류의 구성 및 알고리즘을 사용할 수 있습니까?

참고 : 데스크톱 응용 프로그램을 설치하여 내 컴퓨터에서 사용하더라도 Google만큼 빠르지 않을 것이라고 생각하는 것은 다소 압도적입니다. 내가 말하는 것을 계속 배우십시오.


다음은 몇 가지 훌륭한 답변과 조언입니다.

답변:


47

지연 시간은 디스크 액세스로 인해 중단됩니다. 따라서 쿼리에 응답하는 데 사용되는 모든 데이터가 메모리에 보관된다고 믿는 것이 합리적입니다. 이는 수천 대의 서버를 의미하며 각 서버는 여러 샤드 중 하나를 복제합니다. 따라서 검색의 핵심 경로는 자사의 주력 분산 시스템 기술인 GFS, MapReduce 또는 BigTable에 도달하지 않을 것입니다. 크롤러 결과를 대략적으로 처리하는 데 사용됩니다.

검색의 편리한 점은 강력하게 일관된 결과 나 완전히 최신 데이터를 가질 필요가 없기 때문에 더 최신 검색 결과를 사용할 수있게 되었기 때문에 Google이 쿼리에 응답 할 수 없다는 것입니다.

따라서 가능한 아키텍처는 매우 간단합니다. 프런트 엔드 서버가 쿼리를 처리하고이를 정규화 (불용어 등을 제거하여 가능) 한 다음 쿼리 공간의 해당 부분을 소유하는 복제본의 하위 집합에 배포합니다 (대체 아키텍처는 모든 복제 세트 중 하나가 모든 쿼리에 연결되어야 함). 많은 복제본이 쿼리되고 가장 빠른 응답이 이깁니다. 각 복제본에는 메모리에서 결과를 매우 빠르게 조회하는 데 사용할 수있는 문서에 대한 인덱스 매핑 쿼리 (또는 개별 쿼리 용어)가 있습니다. 다른 소스에서 다른 결과가 반환되는 경우 프런트 엔드 서버는 html을 뱉어 내면서 순위를 매길 수 있습니다.

이것은 아마도 구글이 실제로하는 것과는 먼 차이가있을 것입니다. 그들은 다른 가능한 차이점들 사이에서 이상한 영역, 이상한 색인 및 일종의 펑키 한 부하 분산 체계에 더 많은 캐시가있을 수 있도록이 시스템의 수명을 설계했을 것입니다. .



22

내가 웃긴 사실을 발견 한 한 가지 사실은 Google이 실제로 생물 정보학에 의해 운영된다는 것입니다 ( '좋아요, 내가 생물 인 자라서 재미 있다고 생각합니다. 설명하겠습니다.

생물 정보학은 초기에 거대한 문자열의 작은 텍스트를 매우 빠르게 검색하는 데 어려움을 겪었습니다. 우리에게“거대한 끈”은 당연히 DNA입니다. 종종 단일 DNA가 아니라 다른 종 / 개체의 여러 DNA 데이터베이스입니다. 작은 텍스트는 단백질이거나 그에 상응하는 유전자 인 유전자입니다. 컴퓨터 생물학 자의 첫 번째 작업의 대부분은 유전자 간의 상 동성을 찾는 것으로 제한되었습니다. 이것은 이미 알려진 유전자와의 유사점을 주목하여 새로 발견 된 유전자의 기능을 확립하기 위해 수행됩니다.

이제 이러한 DNA 문자열은 실제로 매우 커지고 (손실이 있습니다!) 검색을 매우 효율적으로 수행해야합니다. 따라서 현대의 문자열 조회 이론의 대부분은 컴퓨터 생물학의 맥락에서 개발되었습니다.

그러나 꽤 오래 전부터 기존의 텍스트 검색이 소진되었습니다. 즉, 각각의 단일 문자를 보지 않고도 부 선형 시간에 큰 문자열을 검색 할 수있는 새로운 접근 방식이 필요했습니다. 이것은 큰 문자열을 사전 처리하고 그 위에 특별한 인덱스 데이터 구조를 구축함으로써 해결할 수 있음을 발견했습니다. 많은 다른 데이터 구조가 제안되었습니다. 각각 장단점이 있지만 일정한 시간에 조회가 가능하기 때문에 특히 주목할만한 것이 있습니다. 이제 Google이 운영하는 규모에 따라 서버 간의 부하 분산, 전처리 및 기타 정교한 작업을 고려해야하기 때문에 더 이상 엄격하게 사실이 아닙니다.

그러나 본질적으로 소위 q-gram 인덱스 는 일정한 시간에 조회를 허용합니다. 유일한 단점은 데이터 구조가 엄청나게 커진다는 것입니다. 기본적으로 최대 q 자 (따라서 이름) 의 문자열 조회를 허용 하려면 가능한 q 문자 조합 (즉, q S , 여기서 S 는 알파벳 크기)에 대해 하나의 필드가있는 테이블이 필요합니다. , 36 (= 26 + 10)). 또한 인덱싱 된 문자열의 각 문자 위치에 대해 하나의 필드가 있어야합니다 (또는 Google의 경우 각 웹 사이트에 대해).

깎아 지른듯한 크기를 완화하기 위해, 구글은 아마 여러 인덱스를 사용합니다 (사실, 그들이 어떻게 , 맞춤법 교정 등의 제공 서비스). 맨 위에있는 것은 문자 수준에서 작동하지 않고 대신 단어 수준에서 작동합니다. 이것은 q를 줄이지 만 S를 무한히 커지게하여 무한한 수의 다른 단어에 대처하기 위해 해싱 및 충돌 테이블을 사용해야합니다.

다음 수준에서 이러한 해시 된 단어는 다른 인덱스 데이터 구조를 가리키고 차례로 웹 사이트를 가리키는 문자를 해시합니다.

간단히 말해서, 이러한 q- gram 인덱스 데이터 구조는 틀림없이 Google 검색 알고리즘의 가장 핵심적인 부분입니다. 불행히도, q -gram 인덱스의 작동 방식을 설명하는 비 기술적 인 논문은 없습니다 . 그러한 색인이 어떻게 작동하는지에 대한 설명을 포함하는 내가 아는 유일한 출판물은… 아아, 나의 학사 논문 입니다.


4
저는 5 년 동안 생물 정보학에 있었고 그 후 검색 엔진에있었습니다. q-gram은 당신이 생각하는 것만 큼 중요하지 않습니다. Google이 수행하는 조회 유형에 대한 기본 데이터 구조 (매우 매우 기본적인 수준에서)는 반전 된 인덱스입니다.
SquareCog

잘못된 것 같습니다. Google이 실행 중이거나 반전 된 색인에서 실행 중입니다. q-gram은 구문에 유용하지만 일반적으로는 사용되지 않습니다
Stefan Savev

@Stefan : SquareCog에 의해 이미 동일한 의견이 작성되었습니다. 역 지수가 큰 (그리고 아마도 n-gram 지수보다 훨씬 더 큰) 역할을한다는 사실을 부인하지 않습니다. 저는 n-gram이 제 애완 동물 데이터 구조이기 때문에이 하나의 기술을 선택했습니다. 핵심 통찰력은 Google이 실제로 "검색"할 필요가 없기 때문에 빠르며 다소 직접적인 조회를 할 수 있습니다. 이러한 인덱스에 의존합니다 (nb : 이것은 아마도 해싱을 통해 수행되지만 여전히 n-gram 인덱스입니다). 이 색인도 역전된다는 것은 내 요점에 부수적입니다 (아마도 Google은 아닙니다 ;-)).
Konrad Rudolph


4

그들은 방대한 양의 하드웨어에서 실행되는 좋은 분산 알고리즘을 구현했습니다.


4

가장 중요한 지연 중 하나는 웹 서버가 쿼리를 웹 서버로 가져오고 응답을 다시받는 것입니다. 이 지연 시간은 Google도 준수해야하는 빛의 속도에 의해 결정됩니다. 그러나 전 세계에 데이터 센터가 있습니다. 결과적으로 그들 중 하나와의 평균 거리가 더 짧습니다. 이렇게하면 대기 시간이 줄어 듭니다. 물론 차이는 밀리 초 단위로 측정되지만 응답이 1000 밀리 초 이내에 도착해야하는지 여부는 중요합니다.


4

물론 비둘기를 사용 하기 때문에 누구나 알고 있습니다 !

네, 그리고 Mapreduce.


그들에 대한 작업에 쥐를 얻는 경우도 가장 usesless 성가신 생물의 두 ... 일을 할 것이다
Xn0vv3r

나는이 일 하하와 함께 많은 웃음
victrnava

3

그들은 사용자 정의 파일 시스템의 수천 대의 PC에 캐시 된 인터넷의 로컬 사본을 거의 가지고 있습니다.


디스크 기반 파일 시스템을 사용하려면 지연 시간 측면에서 많은 비용이들 것입니다 (Amazon은 Dynamo에서이를 발견하고 일부 복원력을 희생했습니다.) 중요한 경로의 모든 것이 기억에 남아 있다고 생각합니다.
HenryR

3

Google은 최고 중 최고를 고용합니다. IT 분야에서 가장 똑똑한 사람들이 Google에서 일합니다. 그들은 하드웨어와 엔지니어에게 거의 무한한 돈을 투자합니다.

수행중인 작업에 대해 고도로 최적화 된 저장소 메커니즘을 사용합니다.

지리적으로 위치한 서버 팜이 있습니다.


3

일반화 된 목록에 대한 시도 (Google의 내부 도구에 대한 액세스 권한에 의존하지 않음) :

  1. 요청 병렬화 (예 : 단일 요청을 더 작은 집합으로 분할)
  2. 비동기 (가능한 한 많은 비 동기화, 예를 들어 사용자의 요청을 차단하지 않음)
  3. 메모리 / 캐시 (디스크 I / O가 느리고 가능한 한 많이 메모리에 보관)
  4. 사전 계산 (가능한 많은 작업을 미리 수행하고 사용자가 데이터 / 처리를 요청할 때까지 기다리지 마십시오)
  5. 당신의 신경 프런트 엔드 HTML (YSlow에 친구 참조)



1

하드웨어.

많은 하드웨어. 그들은 서버 팜으로 대량의 상용 PC 클러스터를 사용합니다.


'대량'을 명확히하기 위해 수십만 개의 서버가 있습니다. Google 외부의 누구도 실수를 알지 못하며 항상 변경되어야한다고 생각합니다.
Sergio Acosta

1

TraumaPony가 맞습니다. 로드 밸런싱 / 캐싱 및 짜잔을위한 수많은 서버와 스마트 아키텍처를 통해 1 초 이내에 쿼리를 실행할 수 있습니다. Google 서비스 아키텍처를 설명하는 많은 기사가 인터넷에 게시되었습니다. Google을 통해 찾을 수 있습니다. :)




0

그리고 그 하드웨어 성능을 활용할 수있는 알고리즘 . 예를 들어 mapreduce 와 같습니다 .


MapReduce는 쿼리에 응답하는 데 사용되지 않습니다.
MSalters

MapReduce는 대규모 머신 클러스터에서 실행되며 확장 성이 뛰어납니다. 일반적인 MapReduce 계산은 수천 대의 머신에서 수 테라 바이트의 데이터를 처리합니다. 수백 개의 MapReduce 프로그램이 구현되었으며 1,000 개 이상의 MapReduce 작업이 매일 Google 클러스터에서 실행됩니다
Vinko Vrsalovic

MapReduce는 거의 확실하게 크롤러 데이터를 비동기 적으로 색인화하는 데 사용됩니다. 검색의 핵심 경로에 있다면 매우 놀라 울 것입니다. MapReduce 작업을 실행하면 실제로 지연 시간이 없어집니다.
HenryR

Henry-길 찾기 /지도에서 라우팅하는 데 사용할 수 있습니다. 그러나 예, 일반적인 경우입니다. 일반 사용자 쿼리에 응답하기 위해 하드 코어 계산이 발생하는 것을 원하지 않습니다.
SquareCog

0

Google 클러스터의 작동 방식에 대한 자세한 내용에 관심이 있으시면 HDFS 의 오픈 소스 구현을 제안하겠습니다 .

Google의 Mapreduce 를 기반으로 합니다.


HDFS는 분산 파일 시스템입니다. mapreduce 클론은 Hadoop이라고하며 HDFS 또는 로컬 파일 시스템에서 실행할 수 있습니다.
SquareCog

0
  1. 다단계 데이터 저장, 처리 및 검색

  2. 위 작업의 효율적인 배포 (1000 대 중 100 대)

  3. 원시 데이터 및 처리 된 결과를 저장하는 좋은 프레임 워크

  4. 결과를 검색하는 좋은 프레임 워크

이 모든 것이 정확히 어떻게 수행되는지는 질문 요약에있는 모든 링크로 요약됩니다.

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