谷歌怎么这么快?

时间:2008-09-25 09:42:55

标签: performance algorithm

使Google能够如此快速地提供查询的技术和编程决策是什么?

每当我搜索某些东西(每天几次中的一次)时,我总是惊讶于他们如何在接近或不到1秒的时间内提供结果。他们可以采用哪种配置和算法来实现这一目标?

旁注:这是一种压倒性的想法,即使我要放置桌面应用程序并在我的机器上使用它可能也不会像谷歌快一半。继续学习我说。


以下是一些很棒的答案和指示:

19 个答案:

答案 0 :(得分:47)

磁盘访问会终止延迟。因此,有理由相信用于回答查询的所有数据都保存在内存中。这意味着成千上万的服务器,每个服务器复制许多分片中的一个。因此,搜索的关键路径不太可能击中他们的任何旗舰分布式系统技术GFS,MapReduce或BigTable。这些将用于粗略地处理爬虫结果。

关于搜索的一个方便的事情是,不需要具有强烈一致的结果或完全最新的数据,因此不会阻止Google响应查询,因为更新的搜索结果已成为可用。

所以一个可能的架构很简单:前端服务器处理查询,规范化它(可能通过删除停用词等)然后将它分发给拥有该部分查询空间的任何副本子集(另一种架构是通过网页分割数据,以便每个查询都需要联系每个副本集中的一个。可能会查询许多复制品,并且最快的响应会获胜。每个副本都有一个索引映射查询(或单个查询术语)到文档,它们可以用来非常快速地在内存中查找结果。如果从不同的来源返回不同的结果,前端服务器可以在它吐出html时对它们进行排名。

请注意,这可能与谷歌的实际做法有很大的不同 - 他们将设计出这个系统的生命,因此在奇怪的区域可能有更多的缓存,奇怪的索引和某种时髦的负载平衡方案其他可能的差异。

答案 1 :(得分:26)

将它放在一个答案中有点太多了。 http://en.wikipedia.org/wiki/Google_platform

答案 2 :(得分:22)

我离开的一个事实发现有趣的是,谷歌实际上是由生物信息学运行的('凯,我觉得这很有趣,因为我是生物信息......)。让我解释一下。

早期的生物信息学面临着以极快的速度搜索巨大字符串中的小文本的挑战。对我们来说,“巨大的弦”当然是DNA。通常不是单个DNA,而是来自不同物种/个体的几个DNA的数据库。小文本是蛋白质或它们的遗传对应物,基因。计算生物学家的大部分首要工作仅限于发现基因之间的同源性。这样做是为了通过注意与已知基因的相似性来确定新发现基因的功能。

现在,这些DNA字符串确实非常大,并且(有损!)搜索必须非常有效地完成。因此,大多数现代字符串查找理论都是在计算生物学的背景下发展起来的。

然而,很久以前,传统的文本搜索已经筋疲力尽。需要一种新方法,允许在次线性时间内搜索大字符串,即不查看每个单个字符。发现这可以通过预处理大字符串并在其上构建特殊的索引数据结构来解决。已经提出了许多不同的这种数据结构。每个都有自己的优点和缺点,但有一个特别值得注意的是因为它允许在恒定时间内查找。现在,在谷歌运营的数量级上,这已不再严格,因为必须考虑服务器之间的负载平衡,预处理和其他一些复杂的东西。

但实质上,所谓的 q-gram索引允许在恒定时间内进行查找。唯一的缺点:数据结构变得非常大。基本上,为了允许查找最多 q 字符的字符串(因此名称),它需要一个表,其中每个可能的 q 字母组合都有一个字段(也就是说, q S ,其中 S 是字母表的大小,比如36(= 26 + 10) ))。此外,索引字符串中的每个字母位置必须有一个字段(对于每个网站,在谷歌的情况下)。

为了减轻庞大的规模,谷歌可能会使用多个索引(实际上,他们,以提供拼写纠正等服务)。最顶层的不会在字符级别上工作,而是在字级上工作。这减少了 q ,但它使 S 无限大,因此他们必须使用散列和碰撞表来处理无数个不同的单词。

在下一个级别,这些散列词将指向其他索引数据结构,而这些结构又会散列指向网站的字符。

长话短说,这些 q -gram索引数据结构可以说是Google搜索算法中最重要的部分。不幸的是,没有好的非技术性论文解释 q -gram索引是如何工作的。我所知道的唯一一个包含对这样一个索引如何工作的描述的出版物是......唉,我的bachelor thesis

答案 3 :(得分:5)

以下是一些很棒的答案和指示:

答案 4 :(得分:4)

最重要的延迟之一是网络服务器将您的查询提交给网络服务器,然后回复。这种延迟受到光速的限制,即使谷歌也必须服从。但是,他们在世界各地都有数据中心。结果,与它们中的任何一个的平均距离较低。这样可以减少延迟。当然,差异是以毫秒为单位测量的,但是如果响应必须在1000毫秒内到达则很重要。

答案 5 :(得分:4)

每个人都知道这是因为they use pigeons,当然!

哦,是的,那和Mapreduce。

答案 6 :(得分:4)

他们已经在大量硬件上运行了良好的分布式算法。

答案 7 :(得分:3)

Google聘请了最好的人选。一些最聪明的人在谷歌工作。他们几乎有无限的资金投入硬件和工程师。

他们使用高度优化的存储机制来执行他们正在执行的任务。

他们位于地理位置的服务器场。

答案 8 :(得分:3)

他们几乎拥有在自定义文件系统上数千台PC上缓存的本地互联网副本。

答案 9 :(得分:3)

尝试使用通用列表(不依赖于您可以访问Google的内部工具):

  1. Parellelize 请求(例如将单个请求拆分为较小的设置)
  2. 异步(尽可能多地制作异步,例如不会阻止用户的请求)
  3. 内存 /缓存(磁盘I / O速度慢,尽可能保留在内存中)
  4. 预计算(尽可能多的工作,不要等待用户请求数据/处理)
  5. 关注前端HTML (请参阅Yslow和朋友)

答案 10 :(得分:2)

你可以在the google research homepage中找到一些谷歌人写的研究论文的一些指示。您应该从google file systemmap/reduce algorithm的解释开始,尝试了解Google网页背后的情况。

答案 11 :(得分:2)

此链接也非常翔实 Behind the scenes of a google query

答案 12 :(得分:1)

硬件

很多硬件。他们使用大量商品PC作为服务器场。

答案 13 :(得分:1)

HenryR可能是对的。

Map Reduce不会对搜索本身起作用,但仅用于索引。 检查this video interview with the Map Reduce inventors

答案 14 :(得分:1)

TraumaPony是对的。用于负载平衡/缓存的大量服务器和智能体系结构,您可以在1秒内运行查询。网上有很多文章描述了谷歌服务架构。我相信你可以通过谷歌找到它们:)

答案 15 :(得分:1)

另一个原因似乎是他们欺骗了TCP慢启动算法。

http://blog.benstrong.com/2010/11/google-and-microsoft-cheat-on-slow.html

答案 16 :(得分:0)

如果您对有关Google群集如何运作的详细信息感兴趣,我会建议他们HDFS的这个开源实现。

它基于谷歌的Mapreduce

答案 17 :(得分:0)

  1. 多阶段数据存储,处理和检索

  2. 上述任务的高效分配(1000台机器中的100台)

  3. 存储原始数据和处理结果的良好框架

  4. 检索结果的良好框架

  5. 问题摘要中的所有链接

    总结了如何完成所有这些工作

答案 18 :(得分:0)

可以利用硬件能力的algorithms。例如,像mapreduce