我知道 DNS 会将 URL 名称解析为 IP 地址,但我不明白当某些网站(如 Google)拥有一些包含超过 200,000 台服务器的数据中心时,DNS 如何得出一个特定服务器的 IP 地址?
答案1
您所描述的内容称为负载平衡 DNS。负载平衡器有多种类型,最简单的是循环负载平衡。此链接很好地解释了轮询 DNS. 当负载和/或流量很大,而一台服务器和/或网络无法自行处理时,通常使用此方法。
循环赛负载平衡是将客户端请求分发到一组服务器的最简单方法之一。循环负载平衡器会依次将客户端请求转发到组中的服务器列表。到达列表末尾后,负载平衡器会返回并再次遍历列表(将下一个请求发送到列出的第一个服务器,将下一个请求发送到第二个服务器,依此类推)。
循环负载平衡的主要优点是它非常容易实现。但是,它并不总是能够实现最准确或最高效的流量分配,因为许多循环负载平衡器假设所有服务器都是相同的:当前处于运行状态、当前处理相同的负载,并且具有相同的存储和计算能力。循环算法的以下变体考虑了其他因素,可以实现更好的负载平衡:
加权循环赛— 根据站点管理员选择的标准为每台服务器分配权重;最常用的标准是服务器的流量处理能力。权重越高,服务器接收的客户端请求比例就越大。例如,如果为服务器 A 分配的权重为 3,为服务器 B 分配的权重为 1,则负载平衡器每向服务器 B 发送 1 个请求,就会向服务器 A 转发 3 个请求。
动态循环赛— 根据服务器当前负载和空闲容量的实时数据,动态地为每个服务器分配权重。
还有其他方法,但我认为这应该可以让您很好地了解幕后发生的事情。
答案2
但事实并非如此。
虽然我们的网络浏览器可能会向一个 IP 地址发送多个请求,但不能保证您每次连接时都在与同一台服务器通信。实际上,您很可能不是。单个 IP 地址可以根据您在网络拓扑中的位置路由到不同的主机。 任播是一种流行的方式,用于通告一个 IP 地址,该 IP 地址根据网络上哪个服务器“更近”而路由到多个服务器。更简单的是,分散在网络上的边界路由器会通告它们可以到达 IP 地址 ABCD,然后您的 ISP 会将您的请求路由到最近的路由器,然后该路由器会将请求转发给主机。该 IP 地址背后的主机可能是负载平衡器,它将传入的请求分发给一组服务器。通过网络地址转换,服务器返回的答案看起来就像来自同一个 IP 地址一样。