可靠性

概念示意图

容错、高可用与灾备

容错、高可用与灾备这三个术语,很容易混淆,专业人员有时也会用错。

  • 容错:发生故障时,如何让系统继续运行。

  • 高可用:系统中断时,如何尽快恢复。

  • 灾备:系统毁灭时,如何抢救数据。

容错

容错(fault tolerance)指的是,发生故障时,系统还能继续运行。

飞机图片

飞机有四个引擎,如果一个引擎坏了,剩下三个引擎,还能继续飞,这就是"容错"。同样的,汽车的一个轮子扎破了,剩下三个轮子,也还是勉强能行驶。容错的目的是,发生故障时,系统的运行水平可能有所下降,但是依然可用,不会完全失败。

值得一提的是,容错并不意味着能够容忍全部的错误,譬如假设全球服务器都坏了,那么系统必然是不可用的。在讨论容错时,只有谈论特定类型的错误才有意义。

高可用

高可用(high availability)指的是,系统能够比正常时间更久地保持一定的运行水平。

汽车备胎

汽车的备胎就是一个高可用的例子。如果没有备胎,轮胎坏了,车就开不久了。备胎延长了汽车行驶的可用时间。注意,高可用不是指系统不中断(那是容错能力),而是指一旦中断能够快速恢复,即中断必须是短暂的。如果需要很长时间才能恢复可用性,就不叫高可用了。上面例子中,更换备胎就必须停车,但只要装上去,就能回到行驶状态。

灾备

灾备(又称灾难恢复,disaster recovery)指的是,发生灾难时恢复业务的能力。

飞机灾难图片

上图中,飞机是你的 IT 基础设施,飞行员是你的业务,飞行员弹射装置就是灾备措施。一旦飞机即将坠毁,你的基础设施就要没了,灾备可以让你的业务幸存下来。

灾备的目的就是,保存系统的核心部分。一个好的灾备方案,就是从失败的基础设施中获取企业最宝贵的数据,然后在新的基础设施上恢复它们。注意,灾备不是为了挽救基础设置,而是为了挽救业务。

小结

高可用 IT 系统,我们希望它具有良好的韧性,通俗讲就是具有鲁棒性,而非一碰就倒的花瓶、需要精心维护。设计一个韧性的系统,通常遵循以下两方面的设计原则:

  • 面向失败设计:充分考虑分布式微服务架构下会存在的各类故障,针对故障进行针对性的设计;进行故障测试,系统是否具备应对故障的能力。这样,当故障真正发生时,才能从容应对,避免造成严重影响;

  • 面向恢复设计:充分考虑系统中应用节点出现宕机等不可用情况时,能够及时发现并自动恢复。这里讲的恢复既包括集群中应用节点宕机之后的重新启动,也包括对宕机应用处理中的业务的自动恢复。