Làm thế nào mà Google có thể nhanh như vậy?


89

Những công nghệ và quyết định lập trình nào khiến Google có thể phân phát một truy vấn nhanh như vậy?

Mỗi khi tôi tìm kiếm thứ gì đó (một trong vài lần mỗi ngày), điều đó luôn khiến tôi kinh ngạc về cách chúng cung cấp kết quả trong thời gian gần hoặc chưa đầy 1 giây. Họ có thể có loại cấu hình và thuật toán nào để thực hiện điều này?

Lưu ý bên lề: Có một suy nghĩ áp đảo rằng ngay cả khi tôi đặt một ứng dụng dành cho máy tính để bàn và sử dụng nó trên máy tính của mình có lẽ sẽ không nhanh bằng một nửa của Google. Tôi nói tiếp tục học hỏi.


Dưới đây là một số câu trả lời và gợi ý tuyệt vời được cung cấp:

Câu trả lời:


47

Độ trễ bị giết bởi truy cập đĩa. Do đó, thật hợp lý khi tin rằng tất cả dữ liệu được sử dụng để trả lời các truy vấn đều được lưu trong bộ nhớ. Điều này ngụ ý hàng ngàn máy chủ, mỗi máy chủ sao chép một trong nhiều phân đoạn. Do đó, con đường quan trọng để tìm kiếm không có khả năng đạt được bất kỳ công nghệ hệ thống phân tán hàng đầu nào của họ là GFS, MapReduce hoặc BigTable. Chúng sẽ được sử dụng để xử lý kết quả thu thập thông tin, một cách thô thiển.

Điều hữu ích về tìm kiếm là không cần phải có kết quả nhất quán mạnh mẽ hoặc dữ liệu hoàn toàn cập nhật, vì vậy Google không bị ngăn phản hồi cho một truy vấn vì đã có kết quả tìm kiếm cập nhật hơn.

Vì vậy, một kiến ​​trúc khả thi là khá đơn giản: máy chủ front end xử lý truy vấn, chuẩn hóa nó (có thể bằng cách loại bỏ các từ dừng, v.v.) sau đó phân phối nó cho bất kỳ tập hợp con bản sao nào sở hữu phần đó của không gian truy vấn (một kiến ​​trúc thay thế là chia nhỏ dữ liệu của các trang web, do đó cần phải liên hệ với một trong mọi tập hợp bản sao cho mọi truy vấn). Nhiều, rất nhiều bản sao có thể được truy vấn và phản hồi nhanh nhất sẽ giành chiến thắng. Mỗi bản sao có một truy vấn ánh xạ chỉ mục (hoặc các thuật ngữ truy vấn riêng lẻ) tới các tài liệu mà chúng có thể sử dụng để tra cứu kết quả trong bộ nhớ rất nhanh chóng. Nếu các kết quả khác nhau đến từ các nguồn khác nhau, máy chủ front-end có thể xếp hạng chúng khi nó xuất ra html.

Lưu ý rằng điều này có lẽ là một chặng đường dài khác với những gì Google thực sự làm - họ sẽ thiết kế cuộc sống của hệ thống này để có thể có nhiều bộ nhớ cache hơn ở các khu vực lạ, các chỉ mục kỳ lạ và một số loại sơ đồ cân bằng tải thú vị trong số các khác biệt có thể có khác .



22

Một sự thật mà tôi luôn cảm thấy buồn cười là Google trên thực tế được điều hành bởi tin sinh học ('kay, tôi thấy điều đó thật buồn cười vì tôi là một ... đồ vật sinh học). Hãy để tôi giải thích.

Tin sinh học từ rất sớm đã gặp khó khăn trong việc tìm kiếm các văn bản nhỏ trong các chuỗi khổng lồ rất nhanh. Đối với chúng tôi, “chuỗi khổng lồ” tất nhiên là DNA. Thường không phải là một DNA đơn lẻ mà là một cơ sở dữ liệu của một số DNA từ các loài / cá thể khác nhau. Các văn bản nhỏ là protein hoặc bản sao di truyền của chúng, một gen. Hầu hết công việc đầu tiên của các nhà sinh học tính toán bị hạn chế để tìm ra sự tương đồng giữa các gen. Điều này được thực hiện để thiết lập chức năng của các gen mới tìm thấy bằng cách ghi nhận các điểm tương đồng với các gen đã được biết đến.

Giờ đây, những chuỗi DNA này thực sự rất lớn và việc tìm kiếm (mất mát!) Phải được thực hiện cực kỳ hiệu quả. Do đó, hầu hết lý thuyết hiện đại về tra cứu chuỗi đã được phát triển trong bối cảnh sinh học tính toán.

Tuy nhiên, cách đây khá lâu, tính năng tìm kiếm văn bản thông thường đã cạn kiệt. Một cách tiếp cận mới là cần thiết cho phép tìm kiếm các chuỗi lớn trong thời gian tuyến tính, nghĩa là, mà không cần xem xét từng ký tự. Người ta phát hiện ra rằng điều này có thể được giải quyết bằng cách xử lý trước chuỗi lớn và xây dựng cấu trúc dữ liệu chỉ mục đặc biệt trên đó. Nhiều cấu trúc dữ liệu khác nhau đã được đề xuất. Mỗi cái đều có điểm mạnh và điểm yếu nhưng có một điểm đặc biệt đáng chú ý vì nó cho phép tra cứu trong thời gian liên tục. Giờ đây, theo thứ tự quy mô mà Google vận hành, điều này không còn đúng nữa vì cân bằng tải trên các máy chủ, xử lý trước và một số nội dung phức tạp khác phải được tính đến.

Nhưng về bản chất, cái gọi là chỉ số q-gram cho phép tra cứu trong thời gian không đổi. Điểm bất lợi duy nhất: Cấu trúc dữ liệu quá lớn. Về cơ bản, để cho phép tra cứu các chuỗi có tối đa q ký tự (do đó có tên), nó yêu cầu một bảng có một trường cho mỗi kết hợp có thể có của q chữ cái (nghĩa là q S , trong đó S là kích thước của bảng chữ cái , giả sử 36 (= 26 + 10)). Ngoài ra, phải có một trường cho mỗi vị trí chữ cái trong chuỗi đã được lập chỉ mục (hoặc trong trường hợp của google, cho mỗi trang web).

Để giảm thiểu kích thước tuyệt đối, Google có thể sẽ sử dụng nhiều chỉ số (trên thực tế, họ , để cung cấp các dịch vụ như sửa lỗi chính tả). Những cái trên cùng sẽ không hoạt động ở cấp độ ký tự mà ở cấp độ từ. Điều này làm giảm q nhưng nó làm cho S lớn hơn vô hạn, vì vậy họ sẽ phải sử dụng bảng băm và va chạm để đối phó với vô số các từ khác nhau.

Ở cấp độ tiếp theo, các từ được băm này sẽ trỏ đến các cấu trúc dữ liệu chỉ mục khác, đến lượt nó, các ký tự băm sẽ trỏ đến các trang web.

Tóm lại, các cấu trúc dữ liệu chỉ mục q -gram này được cho là phần trung tâm nhất trong thuật toán tìm kiếm của Google. Thật không may, không có tài liệu phi kỹ thuật tốt nào giải thích cách hoạt động của chỉ số q -gram. Ấn phẩm duy nhất mà tôi biết có mô tả về cách hoạt động của một chỉ mục như vậy ... than ôi, luận án cử nhân của tôi .


4
Tôi đã theo học ngành tin học sinh học trong 5 năm và các công cụ tìm kiếm sau đó - và q-gram không quan trọng như bạn nghĩ. Cấu trúc dữ liệu cơ bản cho loại tra cứu mà Google thực hiện (ở mức độ rất, rất cơ bản) là chỉ mục đảo ngược.
SquareCog

Điều đó có vẻ sai. Google đang chạy hoặc đang chạy trên một chỉ mục đảo ngược. q-gram sẽ hữu ích cho các cụm từ nhưng không nói chung
Stefan Savev

@Stefan: SquareCog cũng đã đưa ra nhận xét tương tự - và tôi không phủ nhận rằng các chỉ số đảo ngược đóng một vai trò lớn (và có thể lớn hơn nhiều so với chỉ số n-gram). Tôi chọn một công nghệ này vì n-gram là cấu trúc dữ liệu thú cưng của tôi và tôi nghĩ thông tin chi tiết chính - Google nhanh vì nó không thực sự phải “tìm kiếm”, nó có thể thực hiện tra cứu trực tiếp ít nhiều - phụ thuộc vào chỉ mục như vậy (nb: điều này có thể được thực hiện thông qua băm nhưng đây vẫn là chỉ mục n-gram). Việc chỉ mục này cũng xảy ra đảo ngược là ngẫu nhiên theo quan điểm của tôi (mặc dù có lẽ không phải đối với Google ;-)).
Konrad Rudolph


4

Họ đã triển khai các thuật toán tốt, phân tán, chạy trên một lượng lớn phần cứng.


4

Một trong những sự chậm trễ quan trọng nhất là máy chủ web là đưa truy vấn của bạn đến máy chủ web và phản hồi lại. Độ trễ của nó bị ràng buộc bởi tốc độ ánh sáng, điều mà ngay cả Google cũng phải tuân theo. Tuy nhiên, họ có các trung tâm dữ liệu trên toàn thế giới. Kết quả là, khoảng cách trung bình đến bất kỳ một trong số chúng thấp hơn. Điều này giúp giảm độ trễ. Chắc chắn, sự khác biệt được đo bằng mili giây, nhưng điều quan trọng là nếu phản hồi phải đến trong vòng 1000 mili giây.


4

Tất nhiên mọi người đều biết đó là vì họ sử dụng chim bồ câu !

Ồ đúng rồi, đó và Mapreduce.


Nếu họ nhận được chuột để làm việc cho họ, cũng vậy, hai trong số những usesless nhất và các sinh vật gây phiền nhiễu sẽ có một công việc ...
Xn0vv3r

Tôi cười rất nhiều với cái này haha
victrnava

3

Họ có khá nhiều bản sao cục bộ của internet được lưu trữ trên hàng nghìn PC trên hệ thống tệp tùy chỉnh.


Việc sử dụng hệ thống tệp dựa trên đĩa sẽ tốn kém rất nhiều về độ trễ (Amazon đã tìm thấy điều này với Dynamo và hy sinh một số khả năng phục hồi cho nó); Tôi nghi ngờ rằng mọi thứ trên con đường quan trọng được lưu giữ trong bộ nhớ.
HenryR

3

Google thuê những người giỏi nhất trong số những người giỏi nhất. Một số người thông minh nhất trong lĩnh vực CNTT làm việc tại google. Họ có hầu như vô hạn tiền để ném vào phần cứng và kỹ sư.

Họ sử dụng các cơ chế lưu trữ được tối ưu hóa cao cho các tác vụ mà họ đang thực hiện.

Họ có các trang trại máy chủ được định vị địa lý.


3

Cố gắng tạo một danh sách tổng quát (điều đó không phụ thuộc vào việc bạn có quyền truy cập vào các công cụ nội bộ của Google):

  1. Song song hóa các yêu cầu (ví dụ: chia nhỏ một yêu cầu thành các nhóm nhỏ hơn)
  2. Không đồng bộ (tạo càng nhiều không đồng bộ càng tốt, ví dụ: sẽ không chặn yêu cầu của người dùng)
  3. Bộ nhớ / bộ đệm (I / O của đĩa chậm, hãy giữ càng nhiều càng tốt trong bộ nhớ)
  4. Tính toán trước (Thực hiện càng nhiều công việc càng tốt trước khi thực hiện, không đợi người dùng yêu cầu dữ liệu / xử lý)
  5. Quan tâm đến HTML giao diện người dùng của bạn (xem Yslow và bạn bè)



1

Phần cứng.

Rất nhiều và rất nhiều phần cứng. Họ sử dụng các cụm máy tính hàng hóa khổng lồ làm trang trại máy chủ của mình.


Chỉ để làm rõ 'khổng lồ': hàng trăm nghìn máy chủ. Tôi đoán không ai ngoài Google biết con số thực và nó phải luôn thay đổi.
Sergio Acosta

1

TraumaPony đã đúng. Hàng tấn máy chủ và kiến ​​trúc thông minh để cân bằng tải / bộ nhớ đệm và thì bạn có thể chạy truy vấn trong vòng chưa đầy 1 giây. Đã có rất nhiều bài báo trên mạng mô tả kiến ​​trúc các dịch vụ của Google. Tôi chắc rằng bạn có thể tìm thấy chúng qua Google :)




0

Và các thuật toán có thể khai thác sức mạnh phần cứng đó. Như mapreduce chẳng hạn.


MapReduce không được sử dụng để trả lời các truy vấn.
MSalters

MapReduce chạy trên một cụm máy lớn và có khả năng mở rộng cao: một phép tính MapReduce điển hình xử lý nhiều terabyte dữ liệu trên hàng nghìn máy. Hàng trăm chương trình MapReduce đã được triển khai và lên tới một nghìn công việc MapReduce được thực hiện trên các cụm của Google hàng ngày
Vinko Vrsalovic

MapReduce gần như chắc chắn được sử dụng để lập chỉ mục dữ liệu trình thu thập thông tin một cách không đồng bộ. Tôi sẽ rất ngạc nhiên nếu nó nằm trên con đường quan trọng để tìm kiếm. Thực hiện một công việc MapReduce sẽ thực sự giết chết độ trễ.
HenryR

Henry - họ có thể sử dụng nó để định tuyến theo chỉ đường / bản đồ. Nhưng có, đối với trường hợp chung. Bạn không muốn bất kỳ tính toán khó nào xảy ra để trả lời một truy vấn của người dùng thông thường.
SquareCog

0

Nếu bạn quan tâm đến chi tiết hơn về cách Google cluster hoạt động, tôi sẽ đề xuất triển khai mã nguồn mở HDFS của chúng .

Nó dựa trên Mapreduce của google.


HDFS là một hệ thống tệp phân tán. Bản sao mapreduce được gọi là Hadoop và có thể chạy trên HDFS hoặc trên hệ thống tệp cục bộ của bạn.
SquareCog

0
  1. Nhiều giai đoạn lưu trữ, xử lý và truy xuất dữ liệu

  2. Phân phối HIỆU QUẢ (100 trong số 1000 máy) của các nhiệm vụ trên

  3. Khung tốt để lưu trữ dữ liệu thô và kết quả đã xử lý

  4. Khung tốt để lấy kết quả

Tất cả những điều này được thực hiện chính xác như thế nào được tóm tắt bởi tất cả các liên kết mà bạn có trong phần tóm tắt câu hỏi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.