您如何像 Google 一样扩展 HTTP 服务器?

Posted

技术标签:

【中文标题】您如何像 Google 一样扩展 HTTP 服务器?【英文标题】:How do you scale HTTP server like Google? 【发布时间】:2010-09-17 16:13:23 【问题描述】:

我常常惊叹于我如何能够随时随地从世界任何地方访问 www.google.com,并如此快速地获得返回页面。

当然,他们会压缩输出并保持最小设计 - 这很有帮助。

但他们必须有 数百万 次同时点击位于 DNS 列为“www.google.com”的网络上的框。

所有设置 Apache 或其他 Web 服务器的人都知道,在您开始同时获得几千个连接之前,一切都很棒而且超级快,更不用说 数百万了!

那么,他们是怎么做到的呢?我猜他们有一整套服务器机器,但你永远不会知道。刚才我去 Verizon 时,网址是 www22.verizon.com。你永远不会看到“www22.google.com”,永远不会

知道他们使用了哪些特定技术,或者我们非 Google 凡人可以使用哪些技术来做同样的事情?

【问题讨论】:

基本上一个IP地址不代表只能指一个盒子。 【参考方案1】:

Moishe 是对的:虽然简单地以 Google 的规模交付静态 Web 内容已经足够具有挑战性,但它很容易理解,很多其他人也这样做。

然而,它确实是动态内容的交付,而 Google 是这方面的开拓者,因为他们的论文开创了这一切:The Anatomy of a Search Engine。有许多巧妙的技术,其中一些已在此处提到,但仍然......在 Google 上进行 any 查询,查询词不属于一起 - 它们不会被缓存 -并且您仍然会在几百毫秒内将结果集返回给您:这绝对令人难以置信。

为了使其更加复杂,还有新的 SearchWiki 功能,它可以在每个搜索结果中添加动态内容,并且在您登录时限制个性化的结果。

Google 一直擅长(在某种程度上)开放使这一切发生的聪明才智。最后,这一切都归结为构建所有东西以实现水平扩展。这就是 Google 如何跟上 Internet 指数级增长的方式:只需将更多硬件添加到您的 BigTable、Map/Reduce 和 Google 文件系统场。通过使用大量商品硬件,以及良好的基础设施和管理,Google 可以将整个索引保存在内存中,并且从一台机器到另一台机器的查询比访问磁盘要快。

与此同时,雅虎!购买越来越大的单片机,​​直到 Sun 无法将它们变得足够大,他们不得不切换到 Hadoop!,为时已晚。

在 Google 扩展 HTTP 服务器很容易!

【讨论】:

【参考方案2】:

他们还有自定义 Web 服务器、TCP/IP 堆栈 [连同基础设施],我几年前在某处读过...我怀疑 Apache 或 IIS 或任何其他商业/流行的 Web 服务器是否可以匹配...

【讨论】:

【参考方案3】:

昨晚在奥斯汀的谷歌开放日上,艾伦·尤斯塔斯展示了谷歌在俄勒冈州达尔斯市的数据中心的照片,并说它大约有 3 个足球场那么大。

它是较新的数据中心之一,但 Google 有多个数据中心。并不是每个查询都发送到同一台计算机。

即便如此,如果您猜测 Google 拥有多少台计算机,以及每秒针对 Google 执行的查询次数,那么每个单独的服务器必须处理大量请求。

这里有一些关于如何促进这一点的阅读:

http://research.google.com/archive/bigtable.htmlhttp://labs.google.com/papers/gfs.html

一般来说只有http://research.google.com/,那里有很多很酷的信息。

【讨论】:

【参考方案4】:

google.com、update.microsoft.com 和其他处理惊人高聚合带宽的服务通过 DNS 发挥了很大作用。

BGP Anycast 路由用于从世界各地的多个点公布其 DNS 服务器的 IP 地址。每个 DNS 服务器都配置为将 google.com 解析为地理位置相近的数据中心内的 IP 地址。所以这是基于地理位置的第一级负载平衡。

接下来,虽然对 google.com 的 DNS 查询只会返回少量 IP 地址,但 DNS 服务器会在其响应中快速循环通过大量地址。每个请求 google.com 的客户端都将获得一个特定的答案,并允许将该答案缓存一段时间,但下一个客户端将获得不同的 IP 地址。所以这是第二层负载均衡。

第三,他们使用传统的服务器负载平衡器将会话映射到单个 IP 地址到多个后端服务器。所以这是第三层负载均衡。

【讨论】:

很好的解释。您能否指出一些技术可以为我完成上述所有三个级别的前端负载平衡,同时让我以接近金属的技术(如 C)实现服务器端?【参考方案5】:

除了大型网络农场之外,毫无疑问,它们还进行了大量缓存。他们可以缓存从页面内容到常用搜索词的任何内容。并且缓存是非 Google 凡人也可以做到的。

【讨论】:

我似乎记得在某处读过 Google 在任何给定时间点将几乎所有页面列表都保存在内存中。 缓存是不够的 - 同时要求静态网页的数百万次点击仍然会使大多数设置陷入困境。更多的是与 DNS 相关【参考方案6】:

这篇文章可能会让你感兴趣:

Google Platform: The technological infrastructure behind Google's websites

【讨论】:

【参考方案7】:

http://www.akamai.com

或者,翻译成英文(也许会详细说明 Chris 的回答),使用包含世界各地节点的内容交付网络 (CDN) - 请注意,这些不仅是数据中心,而且是实际的 Web 服务器(尽管我很确定大多数人不会在区别上做出巨大的努力)。 Akamai 只是一个例子;在谷歌上搜索“内容交付网络”,你一定会找到其他人。

您还可以实施缓存策略,尽管这可能不会让您走得那么远。 ;)

【讨论】:

【参考方案8】:

这是正常的互联网流量处理。谷歌实际上在全球拥有响应 www.google.com 的整个数据中心

【讨论】:

以上是关于您如何像 Google 一样扩展 HTTP 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何像 google 一样设置 html <option> 标签的样式? [关闭]

如何制作像 Google 一样的 TextFormField?

Google Play 服务 - Unity - 只能在 iOS 上邀请“最近的玩家”

在 Google+ 上分享链接

如何验证您在Google地图上的任务纬度和经度上的位置

如何像优步一样在 Google 地图上添加 3d 对象作为标记