为了我的求知欲,我试图了解像 Facebook 或 Wikipedia 这样的大型网站是如何运作的。我阅读了有关构建可扩展站点的各种技术,但我仍然对一个特定的细节感到困惑。
让我感到困惑的部分是,DNS 最终会将整个域映射到一个 IP 地址,或者在循环 DNS 的情况下映射到少数 IP 地址。
例如,wikipedia.org 只有一个 A 类 DNS 记录。因此,来自世界各地的访问维基百科的人必须向 DNS 中指定的一个 IP 地址发送请求。
侦听大型站点 IP 地址的硬件是什么,它如何处理来自全球用户请求的所有负载?
编辑1:感谢所有回复!任播似乎是一个可行的答案......有谁知道检查特定IP地址是否是任播路由的方法,以便我可以验证这真的是大型网站在实践中使用的技巧吗?
编辑 2:在对该主题进行了更多阅读之后,看来任播通常不用于动态 Web 内容。Anycast 通常用于 UDP(例如,DNS 查找),或者有时用于静态内容。
需要注意的一件有趣的事情是 Facebook 使用 profile.ak.fbcdn.net 来托管静态内容,例如样式表和 javascript 库。每次我 ping 此名称时,我都会收到来自不同 IP 地址的响应。但是,我不知道这是实际中的任播,还是完全不同的技术。
回到我最初的问题:据我所知,即使是大型站点也会有一个昂贵的负载平衡硬件来监听其少数公共 IP 地址。
执行此操作的不一定是硬件,而是设计为可扩展的完整系统。这不仅包括硬件,更重要的是应用程序设计、数据库设计(关系或其他)、网络、存储以及它们如何组合在一起。
高可扩展性 - 从这里开始和Wikimedia 架构、 Facebook和Twitter 上的高可扩展性作为示例,如果您想了解一些大型网站如何扩展,这是一个很好的起点。
关于您关于 DNS 和单个 IP 地址以及轮询的问题,这些类型的站点通常会使用负载平衡作为呈现单个 IP 地址的方法。这可以通过专门的硬件负载平衡器或通过在通用服务器上运行的软件来完成。然后,由负载平衡器管理的对 IP 的传入请求将透明地分布在一系列服务器上,以对最终用户透明。
有关此主题的良好解释,包括硬件和软件负载平衡器/代理的比较以及它们与 DNS 循环的比较,请阅读负载平衡 Web 应用程序。
Anycast 也可用于 TCP 连接,假设连接是短暂的,因此路由在连接生命周期内不会改变。这是 HTTP 连接的一个很好的假设(特别是如果 Connection: Keep-Alive 保持较短的超时或禁用)。
许多 CDN(CacheFly、MaxCDN 和可能的许多其他 CDN)实际上将任播用于 TCP 连接 (HTTP),而不仅仅是 DNS。当您在 CacheFly 上解析主机名时,您会在全球范围内获得相同的 IP 地址,它只是被路由到“最近的”CacheFly 集群。这里的“最近”指的是 BGP 路径长度和指标,这通常是衡量网络延迟的更好方法,而不是简单的地理距离。
就维基百科而言: http ://www.datacenterknowledge.com/archives/2008/06/24/a-look-inside-wikipedias-infrastructure/
验证 IP 地址是否使用 Anycast 的最简单方法是从不同位置进行跟踪路由。您可以尝试以下操作:转到 traceroute.org,选择一个位置并尝试对 IP 地址 8.8.8.8(使用任播的 Google 公共 DNS)进行跟踪路由。您应该能够看到从澳大利亚服务器到 8.8.8.8 的跟踪路由留在澳大利亚。
而不是 ping,尝试进行主机名查找:例如:http ://network-tools.com/default.asp?prog=dnsrec&host=profile.ak.fbcdn.net
您将看到该名称后面的 IP 地址列表。当您 ping 服务器时,这些 IP 地址将以循环方式使用。
伊戈尔,你的问题很好,就像许多无辜的问题一样,有很多很多的答案,都在不同的细节层次上。
硬件是一个网络服务器。明显地 ;-)
这块硬件实际上是一个负载平衡器集群,所有这些都配置为从共享存储中提取,因此它们都以相同的材料进行了相同的配置。
这块硬件实际上是几个负载平衡器集群之一,地理位置分散,您被定向到离您最近的一个,这是由 DNS 服务器做出的决定。
谷歌去年发布了一些关于他们自己开发的硬件架构的文章,读起来很不错。
单个 IP 地址并不一定意味着单个服务器:http ://en.wikipedia.org/wiki/Anycast
较大的站点同时使用几种不同的技术。你提到的那些网站几乎在每个国家都有几台服务器。根据网站访问者的 IP 地址,DNS 服务器会返回离访问者最近的集群的 IP 地址。Akamai正在提供此类服务(单击本网站上的图片了解更多信息。)
该数据中心中的那些“集群”现在由几台不同的机器(数据库服务器、Web 服务器、负载平衡器等)组成。根据您为网站提供的内容,您可能有一些服务器用于静态内容等。
像 Facebook 或 Wikipedia 这样的大型网站依赖于几种不同的技术来实现可扩展性。
其中一项技术是 dns。Dns 配置为使用轮询进行负载平衡。dns 配置足够聪明,可以确定您的请求来自哪里,并返回离您最近的站点的地址。因此,如果您进行挖掘,您将看到多条记录,但如果您执行 ping,您将始终返回相同的地址。
在该站点,您遇到的第一个硬件是反向代理或负载平衡器池。池已设置,因此所有机器都回答相同的 IP,但在会话标头中返回一个新 IP。所有进一步的请求都将通过同一个节点。
用于大型站点的负载平衡器不是大型昂贵的设备,它们是运行 LVS 的商品服务器。http://www.linuxvirtualserver.org/
像谷歌这样的大型网站几乎肯定会设计自己的硬件。大型站点可能会使用多层交换机来负载平衡与多个实际服务器的连接。 http://en.wikipedia.org/wiki/Multilayer_switch