您将如何实施Google搜索?[关闭]


44

假设在一次采访中被问到“您将如何实施Google搜索?” 您将如何回答这样的问题?可能有一些资源可以解释Google如何实现某些功能(BigTable,MapReduce,PageRank等),但这并不完全适合采访。

您将使用什么总体架构,以及如何在15-30分钟的时间内解释这一点?

我将首先说明如何构建一个可处理约10万个文档的搜索引擎,然后通过分片扩展到约5000万个文档,然后再扩展一次体系结构/技术。

这是20,000英尺的视图。我想要的是细节-您在面试中如何实际回答。您将使用哪种数据结构。您的架构由什么服务/机器组成。典型的查询延迟是多少?故障转移/大脑分裂问题怎么办?等等...


1
那是一个面试问题。他们正在寻找多少细节?
Paddy

1
实际上,这是我前一段时间进行一些采访时使用的一个问题。这样做的好处是,您提供的详细信息数量完全取决于您,而您的面试官想花时间在上面。
ripper234 2011年

2
“减少地图!请下一个问题。” “我们会打电话给你。”

2
这个问题很好,但是您可能要花几个小时才能回答。也许我会用闪存驱动器闯入Google

我认为这是一个好问题,尽管我会觉得很压倒。最近,我一直在思考如何构建一种算法来“加权”新闻网站上的文章(仅在理论上,有一些事情让我全神贯注:),我承认我发现即使是这个想法也相当困难/复杂。

Answers:


45

考虑一下要点:面试官在寻找什么?

像这样一个庞然大物的问题并不是要您在实施PageRank型算法或如何进行分布式索引的过程中浪费时间。相反,应将重点放在所要采取的行动的全部情况上。听起来您已经了解所有重要部分(BigTable,PageRank,Map / Reduce)。那么问题是,您实际上如何将它们连接在一起?

这是我的刺。

阶段1:建立索引基础架构(花费5分钟进行解释)

实施Google(或任何搜索引擎)的第一步是建立索引器。这是一款可抓取数据主体并以更有效地进行读取的数据结构生成结果的软件。

要实现这一点,请考虑两个部分:搜寻器和索引器。

网络搜寻器的工作是抓取网页链接并将其转储为一组。这里最重要的步骤是避免陷入无限循环或无限生成的内容中。将每个链接放置在一个大型文本文件中(目前)。

其次,索引器将作为Map / Reduce作业的一部分运行。(将函数映射到输入中的每个项目,然后将结果简化为单个“事物”。)索引器将使用单个Web链接,检索网站,并将其转换为索引文件。(接下来讨论。)减少步骤将简单地将所有这些索引文件聚合到一个单元中。(而不是数百万个散乱的文件。)由于可以并行完成索引步骤,因此您可以在任意大的数据中心中迁移此Map / Reduce作业。

阶段2:建立索引算法的细节(花费10分钟进行解释)

陈述了如何处理网页后,下一部分将说明如何计算有意义的结果。简短的答案是“更多的Map / Reduce”,但请考虑您可以做的事情:

  • 对于每个网站,计算传入链接的数量。(链接至页面的链接应更“好”。)
  • 对于每个网站,请查看链接的显示方式。(<h1>或<b>中的链接比埋在<h3>中的链接更为重要。)
  • 对于每个网站,请查看出站链接的数量。(没有人喜欢垃圾邮件发送者。)
  • 对于每个网站,请查看所用单词的类型。例如,“哈希”和“表”可能表示该网站与计算机科学有关。另一方面,“哈希”和“布朗尼”则暗示该网站的情况大不相同。

不幸的是,我对分析和处理数据的各种方式了解甚少,因此非常有用。但是一般的想法是分析数据的可扩展方式

阶段3:投放结果(花10分钟进行解释)

最后阶段实际上是为结果服务。希望您在如何分析网页数据方面分享了一些有趣的见解,但是问题是您如何实际查询它?每天有10%的Google搜索查询以前从未见过。这意味着您无法缓存以前的结果。

您无法从Web索引中进行单个“查找”,那么您会尝试哪种呢?您如何看待不同的索引?(也许结合结果-也许关键字“ stackoverflow”在多个索引中出现率很高。)

另外,您如何查找它?你可以使用什么样的方法从读取数据的海量快速大量的信息?(可以在此处随意命名您喜欢的NoSQL数据库和/或研究Google BigTable的全部内容。)即使您拥有一个非常准确的索引,您仍需要一种在其中快速查找数据的方法。(例如,在200GB文件中找到“ stackoverflow.com”的等级编号。)

随机问题(剩余时间)

覆盖了搜索引擎的“骨架”之后,请随意对您特别了解的任何单个主题进行讨论。

  • 网站前端的性能
  • 管理您的Map / Reduce作业的数据中心
  • A / B测试搜索引擎改进
  • 将先前的搜索量/趋势整合到索引中。(例如,预计前端服务器的负载将激增9-5,并在AM早期消失。)

显然,这里要讨论的材料超过15分钟,但希望足以让您入门。


1
这是一个很好的解决方案,但是我觉得它并没有开始解决构建Google的规模问题。我认为更具挑战性的部分是答案的“提供结果”部分,这也是Google的许多魅力所在。我确实对如何设计类似的东西有一些想法,但是我很高兴听到别人的声音。
ripper234

我在Quora上问了这个问题-我认为可能会有听众回答这个问题。quora.com/...
ripper234

看看我的答案。
ripper234

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.