在Facebook或Wikipedia的IP地址上侦听的硬件是什么?


32

我出于好奇心的目的,试图了解像Facebook或Wikipedia这样的大型网站是如何工作的。我阅读了有关构建可伸缩网站的各种技术的信息,但是我仍然对一个特定的细节感到困惑。

使我感到困惑的部分是,最终,DNS将整个域映射到单个IP地址,或者在循环DNS的情况下将少数IP地址映射到单个IP地址。

例如,wikipedia.org仅具有一个A型DNS记录。因此,来自世界各地的访问Wikipedia的人们都必须向DNS中指定的一个IP地址发送请求。

在大型站点的IP地址上侦听的硬件是什么,它如何处理来自全世界用户的请求的所有负载?

编辑1:感谢您的所有答复!Anycast似乎是一个可行的答案...是否有人知道一种检查特定IP地址是否为Anycast-routed的方法,以便我可以验证这确实是大型站点在实践中使用的技巧?

编辑2:在对该主题进行了更多的阅读之后,似乎播种通常不用于动态Web内容。Anycast通常用于UDP(例如DNS查找),有时也用于静态内容。

需要注意的一件有趣的事是,Facebook使用profile.ak.fbcdn.net来托管静态内容,例如样式表和javascript库。每次ping此名称时,都会收到来自其他IP地址的响应。但是,我无法确定这是实际行动还是完全不同的技术。

回到我最初的问题:据我所知,即使是一个大型站点,也将有一个昂贵的负载平衡硬件,可以监听其少量的公共IP地址。


好问题,太糟糕了,大多数人不理解。我希望有人能提供一些细节的答案。也许大约有5000万美元的思科量子计算支持的负载均衡器。
OliverS 2010年

Answers:


9

这样做不一定需要硬件,而是可以按比例缩放的完整系统。这不仅包括硬件,而且更重要的是应用程序设计,数据库设计(关系式或其他方式),网络,存储以及它们如何组合在一起。

好奇心强的一个很好的起点,是了解一些大型网站的规模是“ 高可扩展性-从这里开始”以及Wikimedia体系结构FacebookTwitter上的“ 高可扩展性”作为示例。

关于DNS和单个IP地址以及循环轮询的问题,这些类型的站点通常会使用负载平衡作为表示单个IP地址的方法。这可以通过专门的硬件负载平衡器来完成,也可以通过在通用服务器上运行的软件来完成。然后,将由负载均衡器管理的IP的传入请求跨一系列服务器透明地分发给最终用户。

要对该主题进行很好的解释,包括比较硬件和软件负载均衡器/代理以及它们与DNS轮循机制的比较,请阅读Load Balancing Web Applications


谢谢,辛。在提出问题之前,我已通读了大多数此类文章,但没有找到具体的答案。因此,确实有一个硬件负载平衡器(或一台运行负载平衡软件的机器)在某人查看Wikipedia页面时受到攻击吗?或者,是否还有其他技巧可以避免瓶颈?
伊戈尔·奥斯特洛夫斯基

我不确定维基百科现在正在做什么,但是2008年的这篇文章使用一系列Squid反向代理服务器谈论了它们,blogs.sun.com/WebScale/entry/scaling_wikipedia_with_lamp_7
Sim 2010年

2
也有任播地址,您可以在其中ping一个ip地址,但是它们是(随机,任意,有意地)分布到一系列“真实”端点中的。我不确定Wikipedia \ Google是否使用此功能,但是我很确定某些根DNS服务器会使用。我对Wikipedia的ping与您的匹配(并且我在爱尔兰),因此我怀疑他们可能正在使用它。
赫尔维克

1
DNS查询中使用Anycast来获取离您最近的IP地址-负载平衡器侦听该IP地址并将请求分发到后备服务器。
安迪·谢拉姆

2
Wikipedia也恰好使用pdns的geoip后端进行许多负载平衡。此处的更多信息:wikitech.wikimedia.org/view/PowerDNS以及此处:wikitech.wikimedia.org/view/DNS
faultyserver 2010年

3

假设连接是短暂的,因此Anycast也可以用于TCP连接,因此路由在连接生存期内不会更改。这是使用HTTP连接的一个很好的假设(尤其是如果Connection:Keep-Alive保持较短的超时时间或被禁用)。

实际上,许多CDN(CacheFly,MaxCDN以及可能还有许多其他CDN)都将任播用于TCP连接(HTTP),而不仅仅是DNS。当您在CacheFly上解析主机名时,您在全球范围内获得了相同的IP地址,它被简单地路由到“最近”的CacheFly群集。这里的“最接近”是指BGP路径长度和度量标准,与简单的地理距离相比,这通常是衡量网络延迟的更好方法。

特别是对于Wikipedia: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地址。



2

伊戈尔(Igor),您的问题很棒,就像许多无辜的问题一样,有很多很多的答案,都在不同的细节级别上。

硬件是Web服务器。显然;-)

该硬件实际上是一组负载平衡器,所有这些负载平衡器均配置为从共享存储中拉出,因此它们均使用相同的材​​料进行相同的配置。

该硬件实际上是负载均衡器的几个群集中的一个,地理位置分散,并且您被定向到离您最近的负载均衡器,这是DNS服务器做出的决定。



1

单个IP地址不一定表示单个服务器:http//en.wikipedia.org/wiki/Anycast


1
如果您确实有一些中央同步(例如Facebook),则Anycast很难维护。对于DNS服务器(实例不需要太多通信)或具有静态内容的Web服务器,它确实非常有效。

1
您说对了,一个IP并不意味着一台服务器,但是只要您不打扰谁答复,只要DNS查询中使用任播,只要它得到一个,就对UDP协议有用。 DNS使用。使用TCP(用于HTTP)时,您需要确保响应的服务器是您特别要求的服务器。
安迪·谢拉姆


1

较大的站点一起使用几种不同的技术。您提到的那些网站在几乎每个国家/地区都拥有几台服务器。DNS服务器根据网站访问者的IP地址回馈群集中与访问者最近的IP地址。Akamai正在提供这样的服务(单击此网站上的图片以获取更多信息。)

现在,该数据中心中的“集群”由几台不同的机器(DB服务器,Web服务器,负载均衡器等)组成。根据网站所提供的内容,您可能会拥有一些用于静态内容的服务器等。


1

诸如Facebook或Wikipedia之类的大型网站都依靠几种不同的技术来实现可伸缩性。

这些技术之一是dns。Dns配置为通过轮询进行负载平衡。dns配置足够聪明,可以找出您的请求来自何处,并返回离您最近的站点的地址。因此,如果您进行挖掘,将看到多个记录,但是如果执行ping操作,则始终会返回相同的地址。

在站点上,您遇到的第一个硬件是反向代理或负载平衡器池。设置了池,以便所有计算机都回答相同的IP,但在会话标头中返回新的IP。所有其他请求将通过同一节点。

用于大型站点的负载均衡器不是昂贵的大型设备,而是运行LVS的商用服务器。http://www.linuxvirtualserver.org/


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.