减少停机时间的最简单方法 — 避免单点故障
![减少停机时间的最简单方法 — 避免单点故障](https://static001.geekbang.org/infoq/cf/cf3a1f9363e212e2a4dc39bd9d09cbda.webp)
在应用交付的世界里,我们可以把“单点故障”假设成一家餐厅里的收银机。如果这家餐厅只有一台收银机,那么一旦这台机器出了问题,比如突然坏了或者断网了,整个餐厅的结账系统就会受到影响,顾客可能无法付款,餐厅也就无法正常营业。
![](https://static001.geekbang.org/infoq/4c/4cde7fd3cda81d82c5d862f8a84a9b69.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
同样的道理,在网络应用交付中,如果所有的流量和请求都依赖于一个中心节点(比如一个服务器或一个应用交付控制器),这个中心节点就成为了一个“单点”。如果这个“点”出现了问题,比如服务器宕机或者软件故障,那么所有通过这个点的网络流量和用户请求都会受到影响,导致服务中断,用户可能就无法访问网站或使用在线服务了。
![](https://static001.geekbang.org/infoq/db/dba1b5a1efc3fb6be481c91497b6dd39.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
为了避免这种情况,通常会采用多种方法来消除单点故障,比如设置备用服务器、使用多个应用交付控制器、实施故障转移策略等,这样即使某个部分出现问题,其他的部分还能继续工作,保证服务不会中断。就像餐厅里如果有多台收银机,即使一台出了问题,其他的还能继续使用,餐厅的营业不会受到影响。
单点故障
通过使用单个应用交付控制器横向扩展后端服务器,可以轻松避免这种情况。事实上,这正是构建应用交付控制器的目的 — 横向扩展应用程序服务器。这提供了冗余,并允许更多用户连接到您的应用程序,而不会导致单个服务器因连接过多而崩溃,从而防止停机。
![](https://static001.geekbang.org/infoq/f0/f0421cf0d3be6cea91073c5382df9f49.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
虽然通过增加服务器来分担压力,从而减少了单个服务器成为单点故障的风险,但现在,如果应用交付控制器因为任何原因(比如失去网络连接、电源中断或设备故障)停止工作,那么所有的后端服务器就会立刻失去与外界的联系,导致用户无法访问任何服务。
尽管通过使用应用交付控制器和横向扩展服务器可以提高系统的弹性和性能,但我们仍然需要关注整个系统中可能成为单点故障的任何组件,确保它们也同样可靠和强健。这样,无论系统扩展到多大,我们都能保持服务的连续性和稳定性。
主备镜像
为了解决上述问题,可以在餐厅里设置两台收银机,并把它们配置成“主备镜像”。这样,一台收银机在正常工作的时候,另一台就作为备用。如果主收银机因为任何原因出现故障,备用收银机可以立即接管工作,保证顾客可以继续付款,餐厅的营业也不会中断。
在这个“主备镜像”的设置中,还需要考虑收银机的位置。就像在网络世界里,你也不会希望两台负载均衡器都放在同一台物理主机上。如果你的虚拟应用交付控制器都托管在同一台虚拟机主机上,那么如果这台主机出现故障,整个系统仍然会面临单点故障的风险。
![](https://static001.geekbang.org/infoq/25/25a5605228f8960cd60cebcee95c9c5e.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
当主设备(主收银机)出现故障时,辅助设备(备用收银机)会通过故障转移机制立即接管工作,变成活跃状态,确保新的顾客(客户端连接)不会遇到长时间的等待或服务中断。
如果想要无限的扩展性,甚至可以对应用交付控制器本身进行负载均衡。购买单个应用交付控制器可能看起来经济,但实际上可能隐藏着单点故障的风险。
![](https://static001.geekbang.org/infoq/cf/cf3a1f9363e212e2a4dc39bd9d09cbda.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
版权声明: 本文为 InfoQ 作者【通明湖】的原创文章。
原文链接:【http://xie.infoq.cn/article/9beb37874cc9914128390c070】。文章转载请联系作者。
评论