可伸缩架构(第2版):云环境下的高可用与风险管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

级联式的服务故障

假设你有一个服务,它依赖于多个服务,并且有一些服务也依赖于它。图5-1展示了这个“Our Service”与它的多个依赖(Service A、Service B和Service C),以及依赖于它的多个服务(Consumer 1和Consumer 2)。该服务依赖于3个服务,并且被另外2个服务依赖。

图5-1:某服务以及它的依赖服务和消费者们

如果其中一个依赖服务出现了故障会怎样呢?图5-2展示了服务A出现故障时的情形。

除非你非常小心,否则服务A的故障会导致“Our Service”也出现故障,因为它依赖于服务A。

图5-2:某服务和一个发生故障的依赖服务

如果“Our Service”发生故障,会导致Consumer 1和Consumer 2出现故障。这个错误是可以级联发生的,从而导致更多的服务故障,如图5-3所示。

图5-3:级联故障

如果没有经过仔细检查,系统中的一个服务可能会导致整个系统发生严重的问题。

如何防止级联故障的发生呢?有些时候你什么也做不了—某个依赖服务中的一个错误就会导致你的服务(以及其他依赖服务)出现故障,因为这是从依赖的角度所决定的。有些时候,如果依赖服务发生故障,你的服务就无法完成应有的工作。但也不是全部如此。事实上,当某个依赖服务出现故障时,你还是有很多措施能够挽救自己的服务的。