例如,google.com 的 DNS 是用户连接的公共 IP。
Google 拥有庞大的网络服务器基础设施。
这些怎么还能在同一个 IP 上运行,所以 URL 仍然是 google.com
答案1
我不确定 Google 是否使用它,但我猜是负载平衡。为了不窃取任何其他信息,这里是指向一个帖子的链接。解释得比我好。
在多台服务器之间实现负载平衡,因此您会看到 1 个 IP 地址,但连接会被路由到多台服务器中的一台(包括容错功能)。
如果您的 Web 服务器不使用相同的存储(公共存储可能比较棘手,您必须使用带有“共享”文件系统(如 GFS)或数据库的 SAN),那么您应该启用粘性会话,告诉路由器每个客户端将选择一个服务器进行第一次通信,并一直与该服务器通信。这不太容错(但在 Web 中,您只需刷新断开的连接即可重新开始),但更容易构建(并且速度更快,因为每个 Web 服务器都可以保持独立)
在真正容错的情况下,您需要解决的另一个问题是将物理服务器彼此远离,这会引发大多数共享设计的性能问题(即,如果服务器位于不同的国家/地区,则无法将所有服务器放在 SAN 上),方法是使用多服务器方法,使用单个 DNS 名称并定期在它们之间复制数据。DNS 负载平衡可能是将多个 Web 服务器用作单个网站的最简单方法。
在这些情况下,DB 通常是一个所有服务器都与之通信的单一数据库,或者可以自己共享,使用集群或更常见的日志传送来确保在主服务器发生故障时有备份随时可用。日志传送对于备份服务器来说比位于远处的服务器更常见。[1]:https://stackoverflow.com/questions/906539/how-do-multiple-servers-work-in-sync-for-web-application
答案2
Google 不只有一个 google.com 的 IP 地址。例如,如果我发出 nslookup我当前所在的 Microsoft Windows 系统上的命令,我看到以下内容:
C:\>nslookup google.com
Server: localhost
Address: ::1
Non-authoritative answer:
Name: google.com
Addresses: 2607:f8b0:4004:80d::200e
216.58.217.142
但是,当我连接到大约 20 英里外的另一个系统(该企业使用不同的 Internet 服务提供商 (ISP))并发出相同的 nslookup 命令时,我看到以下内容:
Name: google.com
Addresses: 173.194.121.1, 173.194.121.7, 173.194.121.9, 173.194.121.0
173.194.121.2, 173.194.121.8, 173.194.121.4, 173.194.121.3, 173.194.121.14
173.194.121.6, 173.194.121.5
当域名系统 (DNS)针对 google.com 提交的查询可能会因地理位置而异。因此,如果你在加拿大而我在美国,你可能会获得加拿大 Google 服务器的 IP 地址,而我获得的是位于美国的服务器的 IP 地址。许多大公司也使用轮询 DNS当系统查询 DNS 服务器以转换完全限定域名(FQDN)(例如 www.google.com)的 IP 地址与从此类 nslookup 看到的列表中的许多 IP 地址不同。Google 似乎就是这样做的,因为在上面的第二个例子中,返回的 IP 地址不只是一个,而是许多。该技术用于负载均衡在许多服务器之间工作。因此,如果我现在从该网站访问 google.com,我可能会连接到其中一个 IP 地址,但如果我在两小时后再次从同一网站访问 google.com,则会连接到另一个 IP 地址。Google 平台DavidPostill 在评论中发表的维基百科文章指出,Google 使用循环方法在多台服务器之间平衡负载。
即使你总是获得同一个公司的 IP 地址,也并不意味着你总是从同一个 Web 服务器获取网页。一家公司可能有一个使用反向代理将您对公司网站网页的请求传递到负载均衡器后面的多个 Web 服务器之一的技术。
答案3
他们使用 Anycast。即,同一个公共 IP 托管在多个位置。路由堆栈将确保最近的 IP 解析到客户端。此外,这使得防火墙更容易将一个 IP 列入白名单,而不是多个。