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