架构基础:从需求到架构
上QQ阅读APP看书,第一时间看更新

2.1.2 冗余设计

系统中某个单节点故障可能会引起级联故障。如图 2-2所示,当D服务因故障宕机时,就会造成B和C服务出现大量的交易失败和请求积压,问题会很快传遍所有依赖节点,造成大量业务功能无法使用甚至全面宕机。

图2-2 单节点级联调用故障

如图2-3所示,服务A使用了MQ、Redis、MongoDB、MySQL多种中间件,都是单节点部署,当MongoDB节点因故障宕机后,就可能会导致服务A无法正常启动、核心功能丧失、失去服务能力。

图2-3 单节点中间件故障

由此可见,如果每个服务节点都只有一台服务器,那么任意节点发生故障,都会导致整个系统不可用,这就是所谓的单节点故障,对系统的可用性具有极高的威胁。

冗余是高可用的核心思想,坚决避免服务出现单节点故障,做法就是增加备用节点,方案主要有两种:主备高可用和多活高可用。

(1)主备高可用方案:例如,某系统只有一台服务器A,如果宕机了就会引起服务不可用,那么就再准备一台服务器B,硬件配置、环境信息、应用部署都完全与服务器A保持一致。如果服务器A发生了故障,就立即把服务器B启动起来,顶替服务器A对外提供服务;看似简单,然而这也是一种高可用方案,同样是缩短了服务的不可用时长。

(2)多活高可用方案:为了避免单节点故障,可以部署多个同样的服务节点,同时提供服务。例如,使用的双卡双待的手机,一个电话卡欠费了,另一个还可用,两张卡是同时工作的。

做任何架构设计都不要拘泥于理论和技术,达到目标才最重要。