假设一个网站基础设施非常复杂并且完全分布(可能像大多数大型网络公司一样)。
我这样想对吗?尽管有这么多额外的 Web 服务器来处理多个客户端请求,但仍然有一台用户必须输入的“机器”?我猜这台机器是与 IP 地址物理关联的机器?
我之所以问这个问题,是因为我需要知道在分布式系统存在的地方,是否仍然存在单点故障——通常是控制节点,或者在这个例子中,是连接到公共互联网的机器?当然不可能有两台机器连接到互联网,因为它们必须有不同的 IP 地址?
这个“机器”可能不是服务器本身,但可能是思科设备的一部分。我只想知道,在现实世界中,这些分布式系统是否仍然有一个特定的部分依赖于一个电子设备的完整性?
答案1
可以有但不需要有一台机器来处理所有的请求,通常这台机器被称为负载均衡器。但是,如果客户端发出的每个请求都是独立的,或者分布式前端可以与同步的分布式后端通信,则客户端可以针对其发出的每个请求与不同的机器通信。
需要发生的就是,要么客户端在请求中向独立机器提供其自行完成请求所需的所有信息,要么服务器根据令牌(通常是网站的 cookie)向后端分布式数据库进行查询,然后服务器可以从另一台机器停止的地方继续操作。
答案2
回答你的问题,不,您可以构建一个没有单点故障的网站基础设施。
DNS 循环允许多个 IP 与单个域名相关联;每个前端都可以依次与聚集后端系统,其中有多个独立的数据库副本,这些副本持续同步。
杰夫阿特伍德实际上已发表于博客关于 Netflix 为使其系统不受单点故障影响所做的工作,包括一个随机关闭用于测试的服务 / 实例的守护进程。
答案3
一些例子:
在 Ubuntu 9.10(Karmic)上使用 IP 故障转移、心跳和 Pacemaker 实现高可用性网站
Microsoft 群集服务器 (MSCS) 提供了在群集内定义 IP 地址资源的能力,并使其能够从一个节点故障转移到另一个节点。
相同的原则可以应用于任何前端系统,例如负载平衡器,其工作是将传入的 HTTP 请求分发到服务器场中的 Web 服务器节点。
答案4
一个域名可以(而且通常会)关联多个不同的 IP 地址。例如,google.com 目前(对我而言)解析为:
Name: google.com
Address: 173.194.34.129
Name: google.com
Address: 173.194.34.130
Name: google.com
Address: 173.194.34.131
Name: google.com
Address: 173.194.34.132
Name: google.com
Address: 173.194.34.133
Name: google.com
Address: 173.194.34.134
Name: google.com
Address: 173.194.34.135
Name: google.com
Address: 173.194.34.136
Name: google.com
Address: 173.194.34.137
Name: google.com
Address: 173.194.34.142
Name: google.com
Address: 173.194.34.128
Web 浏览器的行为各不相同,但一般会随机尝试一个 IP 地址,如果第一个 IP 地址没有回复,则转到另一个 IP 地址。因此这里不存在单点故障。