出于好奇,我试图了解 Facebook 或 Wikipedia 等大型网站的运作方式。我阅读了各种构建可扩展网站的技术,但我仍然对一个特定细节感到困惑。
令我感到困惑的是,最终 DNS 会将整个域映射到单个 IP 地址,或者在循环 DNS 的情况下映射到少数几个 IP 地址。
例如,wikipedia.org 只有一个 A 类 DNS 记录。因此,来自世界各地的人访问维基百科时都必须向 DNS 中指定的一个 IP 地址发送请求。
监听大型网站 IP 地址的硬件是什么?它如何处理来自世界各地用户的请求的所有负载?
编辑1:感谢大家的回复!任播似乎是一个可行的答案... 有谁知道检查特定 IP 地址是否是任播路由的方法,以便我可以验证这确实是大型网站在实践中使用的技巧?
编辑2:在对该主题进行更多阅读后,我发现任播通常不用于动态 Web 内容。任播通常用于 UDP(例如 DNS 查找),有时也用于静态内容。
值得一提的是,Facebook 使用 profile.ak.fbcdn.net 来托管静态内容,如样式表和 JavaScript 库。每次我 ping 这个名称时,都会收到来自不同 IP 地址的响应。但是,我无法判断这是任播操作还是一种完全不同的技术。
回到我最初的问题:据我所知,即使是大型站点也会有一块昂贵的负载平衡硬件来监听其少数公共 IP 地址。
答案1
实现这一点的不一定是硬件,而是一个经过精心设计的完整系统。这不仅包括硬件,更重要的是应用程序设计、数据库设计(关系型或其他)、网络、存储以及它们如何组合在一起。
如果你好奇一些大型网站是如何扩展的,那么一个很好的起点是高可扩展性 - 从这里开始和维基媒体架构的高可扩展性, Facebook和推特作为例子。
关于你关于 DNS 和单个 IP 地址以及循环的问题,这些类型的网站通常会使用负载均衡作为呈现单个 IP 地址的方法。这可以通过专用硬件负载平衡器或通过在通用服务器上运行的软件来实现。然后,对负载平衡器管理的 IP 的传入请求将透明地分布在一系列服务器上,对最终用户而言。
有关此主题的详细解释,包括硬件和软件负载平衡器/代理的比较以及它们与 DNS 循环的比较,请阅读负载平衡 Web 应用程序。
答案2
任播也可用于 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/
答案3
验证 IP 地址是否使用 Anycast 的最简单方法是从不同位置执行跟踪路由。您可以尝试以下操作:转到 traceroute.org,选择一个位置并尝试对 IP 地址 8.8.8.8(使用 Anycast 的 Google 公共 DNS)执行跟踪路由。您应该能够看到从澳大利亚服务器到 8.8.8.8 的跟踪路由停留在澳大利亚。
不要 ping,而是尝试执行主机名查找:例如:http://network-tools.com/default.asp?prog=dnsrec&host=profile.ak.fbcdn.net
您将看到该名称后面的 IP 地址列表。当您 ping 服务器时,这些 IP 地址将以循环方式使用。
答案4
谷歌去年发布了一些他们自主研发的硬件架构,这使得好读。