说实话,这三个概念,恐怕大部分人都搞不太清楚差异,也包括自己。今天读了阮一峰的文章,清楚了许多。下面是从阮大侠的笔记中摘抄的一些内容。
首先,三者的英文名称如下:
- 容错:Fault Tolerance
- 高可用:High Availability
- 灾备:Disaster Recovery
容错
容错,当系统发生故障时,系统的业务水平可能下降,但仍然坚持运行,不会完全失败(注意,不完全失败就不算业务中断,这是两个概念)。飞机有四个引擎,一个引擎坏了,剩下三个引擎还能继续飞,这就是"容错"。
高可用
高可用,目的是为了让系统比正常时间能更长久的保持一定的运行水平。高可用不是指系统业务不中断(那是容错能力),而是指一旦中断能够快速恢复,如果需要很长时间才能恢复可用性,就不叫高可用了。汽车的备胎就是一个高可用的例子。如果没有备胎,轮胎坏了,车就开不久了。备胎延长了汽车行驶的可用时间。
容灾
容灾,系统发生灾难是恢复业务的能力。灾备的目的是保存系统的核心部分。一个好的灾备方案,就是从失败的基础设施中获取企业最宝贵的数据,然后在新的基础设施上恢复它们。注意,灾备不是为了挽救基础设置,而是为了挽救数据和业务。如下图所示,飞机是基础设施,飞行员是业务,而飞行员弹射装置就是灾备措施。一旦飞机即将坠毁,代表基础设施就要没了,但灾备可以让业务幸存下来。
总结
其实,对字面意义抠来抠去并没有意义。我们在搭建系统时,最重要的就是考虑业务在各种异常或故障中能否保持连续性。异常或故障的程度是可变的,应对措施也是多样的:一条判空语句、一段 FMEA 代码,Master/Slave,M+N,同城灾备,两地三中心……这些都是系统设计中应该考虑的东西。
如果一定要对这三个名词做个关联,“容错和容灾一起构成了高可用”,我想这句话是比较合适的。