it-swarm.cn

您将如何实施Google搜索?

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

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

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

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

47
ripper234

Quora上的帖子 产生了Sergey Brin和Larry Page的 已发表的原始文章 。对于此类问题,它似乎是一个很好的参考。

Google Architecture

19
ripper234

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

像这样一个庞然大物的问题并不是要您在实施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分钟,但希望足以让您入门。

46
Chris Smith