算机系统高可用技术的基本概念。
在分析高可用的技术前,我们需要先对一些概念进行说明,先从相关的词语开始。
系统,即若干部分相互联系、相互作用,形成的具有某些功能的整体。分布式系统是其中一个部分。
系统并不是计算机科学独有的名词,它是非常宽泛的概念,生态,机械等,都是系统。
这里用生态系统来类比。因为生态系统是天然的,可以用做参考。
对比项\系统 | 生态系统 | 计算机系统 |
---|---|---|
能量 | 太阳能 | 电力 |
成员 | 无机环境,生物 | 硬件,数据,程序 |
循环 | 物质循环 | 信息/资源循环 |
稳定性 | 生态平衡 | 可用性 |
恢复 | 生态自我调节 | 故障恢复 |
可以看出,计算机系统和生态系统相似。
如果生态系统受到过于大的破坏,会崩溃。计算机系统也是如此,我们做的就是提升抗风险的能力,避免系统崩溃。高可用HA(High Availability)就是对抗风险能力的描述,它是一个形容词。
提高可用性,就是减少系统不能提供服务的时间。
风险是故障的根源,我们所做的就是提高系统抗风险的能力。
内部风险主要是程序Bug和人为操作的因素,这更多是软件工程,质量管理(QA)和流程管理的范畴。
事实上,大部分的故障是由变更引起的。
服务器宕机,硬盘损坏,机房断电,光缆被挖断等等,都是外部风险。这类风险大多不可抗拒,或难以预测。高可用技术就是为了对抗这些风险。
本文只讨论应对外部风险的高可用技术,不考虑内部风险。内部风险是另一个话题。
提高可用性的本质是冗余,具体的实现方案会有不同,但目的都是降低不可用的时长。
从对不可用时长的影响来分类,有两种策略:
我们总是从最坏的情况去考虑,但并非要做到尽善尽美,可用性需在成本和故障影响程度之间权衡。
灾备,指的是灾难发生后的处理。它的流程是,前期准备,发现故障,故障转移。从发现灾难到故障转移,多少会有一段时间被计入不可用时长。但随着技术发展,故障时长已经被降低到秒级。
更多分析请看自动灾备技术分析。
容错指的是系统可以容忍局部的错误存在。是使系统在部分组件发生故障时仍能正常运作的能力。
更多的在信息技术中用于对抗干扰,比如极化码。在硬件中,ECC内存,SSD硬盘会在出现错误的情况下修复数据,这个动作上层无感。
这个方案本质上是信息冗余,但在计算机架构设计中很少。分布式存储系统有这种方案,比如阿里的分布式存储系统盘古,客户端直链3个ChunkServer,一个ChunkServer异常,上游完全无感知。也就不会产生不可用时间。
虽然上游无感知,但依然要做故障转移,下线故障机器,新增副本,只是不需要立刻操作。可异步处理。
二者的差异在于故障转移是否是恢复业务的关键。打个比方,有人攻城,守城将军要人送信求援。有两种办法。
分布式共识算法解决的是数据一致性问题,并不是一种容灾方案。但它是容灾方案中不可缺少的一部分。
分片指的是将业务水平拆分,使其分片可以分散在不同服务器上,常见的是数据库的分库分表。更复杂的是业务层面的分片,比如淘宝单元化。
分片可以降低系统故障引起的影响范围,但分片的主要目的是提高系统吞吐能力,它并未消除单点。如果一个分片瘫痪了,对于这个分片的用户来说,系统不可用。所以分片不属于高可用技术。