根据百度百科词条定义,高可用性(HA,High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。可用性(也称有效性)的量化参数为可用度, 表示系统在规定的条件下使用时,在某时刻具有或维持其功能的概率。可用度(也称有效度) 通常记作A,可用平均无故障时间(MTBF)和平均修复时间(MTTR)来计算:A = MTBF/(MTBF + MTTR)。
- MTBF(Mean Time Between Failure):指系统在两次故障之间的平均时间。
- MTTR(Mean Time To Repair):指系统从故障发生到故障修复完成所需的平均时间。
在实际业务中,一般采用SLA(Service Level Agreement)来描述系统的高可用等级,也就是常说的“几个9”的可用性,通常用周期内系统不可用的时间来衡量:
系统可用性 |
宕机时间/年 |
宕机时间/月 |
宕机时间/周 |
宕机时间/天 |
90% (1个9) |
36.5 天 |
72 小时 |
16.8 小时 |
2.4 小时 |
99% (2个9) |
3.65 天 |
7.20 小时 |
1.68 小时 |
14.4 分 |
99.9% (3个9) |
8.76 小时 |
43.8 分 |
10.1 分钟 |
1.44 分 |
99.99% (4个9) |
52.56 分 |
4.38 分 |
1.01 分钟 |
8.66 秒 |
99.999% (5个9) |
5.26 分 |
25.9 秒 |
6.05 秒 |
0.87 秒 |
从前面的概念可以看到,描述高可用性不是空泛地指系统永远在线,而是可量化的处置时长,包含故障发现、故障处理和故障恢复,一般需要做如下几点设计:
- 冗余:系统需要一个或多个冗余以消除单点故障,包括数据冗余、软件冗余和硬件冗余。
- 检测:需要能发现系统出现问题,以进行故障处置。
- 接管:冗余节点需要能接管故障节点,以恢复系统功能。
冗余最大的难点是对节点数据复制和数据一致性的保障,在系统性能(吞吐量、响应时长)和数据完整(RPO)间取得平衡:
- 如果数据镜像到冗余节点是同步的,那么冗余节点数量和物理环境将影响性能表现。
- 如果数据镜像到冗余节点是异步的,那么故障接管就会出现数据差异的情况。
可以用数据一致性模型来描述冗余的效果,主要有三种类型:
- 弱一致性:写入一个新值后,在冗余节点可能读得出来,也可能读不出来。
- 最终一致性:写入一个新值后,在冗余节点可能读不出来,但在某个时间窗口后,最终保证可以读出来。
- 强一致性:写入一个新值后,在任意冗余节点都能读取出来。
从实现上看,弱一致性和最终一致性是异步冗余的,强一致性一般是同步冗余的。异步通常代表更好的性能,但数据接管需要更复杂的状态控制;同步的接管相对简单,但冗余的流程协调却更复杂。
[图片来源:Transaction Across DataCenter]
数据冗余在技术上表现为跨数据中心事务的处理,常见的解决方案如上图所示,包括数据迁移(Backups)、数据复制(M/S、M/M)和分布式事务(2PC、Paxos)三种类型。其中数据迁移中的Backups(备份)是离线方案,不具备高可用恢复(Failover)的特性,简单介绍其他方案:
- M/S:主备(Master-Slave)结构,Master单点写入,Slave可以承担一定读请求。通常由Slave周期性地拉取Master数据在本地重放,因此是最终一致性,较难实现为强一致性,除非向分布式事务方案进化。
- M/M:多主(Master-Master/Multi-Master)结构,系统中存在两个或多个Master,每个Master都提供读写服务。通常是Master之间互为M/S进行数据异步同步,与M/S方案一样是最终一致性模式。难点在于处理多点写入的数据冲突,通常有数据分片冲突避免和数据版本冲突合并的解决方式。
- 2PC:分布式事务中的两阶段提交(Two Phase Commit)协议,引入协调者组件实现跨多节点事务的ACID特性,在数据冗余方面表现为同步复制过程和数据强一致性。强调所有节点同时成功或失败,网络稳定性(如Timeout)和节点数量会增加阻塞和失败回退概率,可以通过增加更轻量的问询阶段进行优化,如3PC和TCC,但也增加更多网络交互和业务侵入,各有优劣,不是完全替换关系。
- Paxos:一种民主选举模式的一致性算法,分为Prepare和Accept两个阶段,通过递增的提案号(Sequence Number)在大多数成员间达成有序的共识,并传播给整个集群,因此节点数量要求是单数,吞吐量比2PC协议高。
分布式领域有著名的CAP理论:在一个分布式系统中,Consistency(一致性)、Availability(可用性)和Partition Tolerance(分区容错性)三者不能同时成立。这种基于权衡的设计指导思想,从图中没有一种各项全绿的方案,也足以管中窥豹。