高可用技术概述

  • A+
所属分类:分布式系统

算机系统高可用技术的基本概念。

前言

在分析高可用的技术前,我们需要先对一些概念进行说明,先从相关的词语开始。

系统

系统,即若干部分相互联系、相互作用,形成的具有某些功能的整体。分布式系统是其中一个部分。
系统并不是计算机科学独有的名词,它是非常宽泛的概念,生态,机械等,都是系统。

类比

这里用生态系统来类比。因为生态系统是天然的,可以用做参考。

对比项\系统生态系统计算机系统
能量太阳能电力
成员无机环境,生物硬件,数据,程序
循环物质循环信息/资源循环
稳定性生态平衡可用性
恢复生态自我调节故障恢复

可以看出,计算机系统和生态系统相似。

高可用

如果生态系统受到过于大的破坏,会崩溃。计算机系统也是如此,我们做的就是提升抗风险的能力,避免系统崩溃。高可用HA(High Availability)就是对抗风险能力的描述,它是一个形容词
提高可用性,就是减少系统不能提供服务的时间

风险

风险是故障的根源,我们所做的就是提高系统抗风险的能力。

内部风险

内部风险主要是程序Bug和人为操作的因素,这更多是软件工程,质量管理(QA)和流程管理的范畴。
事实上,大部分的故障是由变更引起的。

外部风险

服务器宕机,硬盘损坏,机房断电,光缆被挖断等等,都是外部风险。这类风险大多不可抗拒,或难以预测。高可用技术就是为了对抗这些风险。

本文只讨论应对外部风险的高可用技术,不考虑内部风险。内部风险是另一个话题。

容灾

提高可用性的本质是冗余,具体的实现方案会有不同,但目的都是降低不可用的时长。

从对不可用时长的影响来分类,有两种策略:
1. 灾备:成本较低,易于实现,需要立刻故障转移,会产生不可用时间。
2. 容错:成本较高,实现难度大,不需要立刻故障转移,不会产生不可用时间。

我们总是从最坏的情况去考虑,但并非要做到尽善尽美,可用性需在成本和故障影响程度之间权衡。

灾备(快速恢复)

灾备,指的是灾难发生后的处理。它的流程是,前期准备,发现故障,故障转移。从发现灾难到故障转移,多少会有一段时间被计入不可用时长。但随着技术发展,故障时长已经被降低到秒级。
更多分析请看自动灾备技术分析

容错

容错指的是系统可以容忍局部的错误存在。是使系统在部分组件发生故障时仍能正常运作的能力。
更多的在信息技术中用于对抗干扰,比如极化码。在硬件中,ECC内存,SSD硬盘会在出现错误的情况下修复数据,这个动作上层无感。
这个方案本质上是信息冗余,但在计算机架构设计中很少。分布式存储系统有这种方案,比如阿里的分布式存储系统盘古,客户端直链3个ChunkServer,一个ChunkServer异常,上游完全无感知。也就不会产生不可用时间。
虽然上游无感知,但依然要做故障转移,下线故障机器,新增副本,只是不需要立刻操作。可异步处理。

其它

灾备和容错的区别

二者的差异在于故障转移是否是恢复业务的关键。打个比方,有人攻城,守城将军要人送信求援。有两种办法。
1. 灾备:派出一个人送信,如果发现送信人没成功突围,或一段时间没回来,再派一个人。
2. 容错:一开始就派出多个人送信。
在灾备的流程中,将军发现没有突围会再派一个人,这就是故障转移的动作,不再派人信肯定送不出去。一次性排除多个人,通常情况下总会有人把信送到。
我们会觉得一开始派多个人是最好的选择,一个一个派像是添油战术。但派出送信人是需要人力的,如果将军手下只剩下几个人了呢。
在计算机系统中,我们还得考虑数据一致性等问题,需要更复杂的处理。

分布式共识算法

分布式共识算法解决的是数据一致性问题,并不是一种容灾方案。但它是容灾方案中不可缺少的一部分。

分片技术

分片指的是将业务水平拆分,使其分片可以分散在不同服务器上,常见的是数据库的分库分表。更复杂的是业务层面的分片,比如淘宝单元化。
分片可以降低系统故障引起的影响范围,但分片的主要目的是提高系统吞吐能力,它并未消除单点。如果一个分片瘫痪了,对于这个分片的用户来说,系统不可用。所以分片不属于高可用技术

总结

  1. 高可用的本质是减少系统不能提供服务的时间。
  2. 灾备和容错,主要区别是是否需要立刻故障转移。
  3. 在业务较为复杂度情况下,通常使用的是灾备的办法。一些简单,频繁,且重要的场景则会用容错处理。无论哪种,最终都需要做故障转移。避免故障叠加,产生更大的故障。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: