学架构笔记5:高可用复杂

Published by 煎鱼 on

维基百科:

系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。

关键点:无中断

软件和硬件本质上都无法做到无中断。现在的方法本质上都是通过冗余实现高可用。

尽管都是加机器,高性能复杂和高可用复杂依然有区别:高性能增加机器目的在于扩展处理性能,高可用增加机器目的在于冗余处理单元。

为了高可用引入了冗余,同时也给程序带来了复杂。

计算高可用

计算指业务的逻辑处理,特点是在不同的机器上输入相同的数据、相同的逻辑处理,产出结果肯定是一样的。

计算高可用的复杂在于:

  1. 引入任务分配器,需要维护
  2. 任务分配器和业务服务器间连接的管理
  3. 分配算法(不存在某一算法一定优于另外的算法)

存储高可用

存储与计算相比区别是:将数据从一台机器搬到另一台机器,需要经过线路进行传输,而传输时间不稳定。

延迟意味着整个系统在某个时间点上数据可能不一致,这个时候就算是相同的业务逻辑,也无法得出相同的产出结果。

除了延迟了,网络传输线路也存在可用性问题,如错包、丢包甚至断线。如果线路断线,意味着一段时间内存储数据无法同步。

高存储可用的难点不在于备份数据,而在于如何减少或规避数据不一致对业务造成的影响。

高可用状态决策

计算高可用和存储高可用的基础都是状态决策,即系统能够判断当前的状态是正常还是异常的,为了保证高可用需要立刻处理异常状态。

而决策却总是有多种的,可能对一个异常多种的决策都适用,也有可能只有一种较优决策。

独裁式

存在一个独立的决策主体,负责收集所有的信息,然后进行整体操作的把控。

独裁者的问题在于决策者只有一个,在决策者出故障后整个系统会进入严重的瘫痪。

协商式

两个独立的个体沟通最后进行决策,如最常见的主备决策。

举个例子,主备决策:

  1. 启动时两台都是备机
  2. 两台服务器建立连接
  3. 两台服务器交换状态信息
  4. 其中一台做出决策,成为主机,另一台成为备机。

当主备连接中断时,无论是备机升级为主机还是备机不升级(无法得知主机是否真的宕机),都是不适当的。因此可以增加更多的链接降低网络带来的影响。

民主式

多个独立的个体通过投票的方式进行状态决策,如Zookeeper选主。

民主式与协商式很类似,但是是按照多数取胜的方式来的。

民主式存在的问题是脑裂,即一个集群里面出现了两个主机,解决方案可以采用“投票节点数必须超过系统总结点数的一半”。

总结

学习了软件中高可用带来的复杂度以及几种决策方式。

先这样吧

若有错误之处请指出,更多地关注煎鱼

Categories: ArchitectProgramming

发表评论

电子邮件地址不会被公开。 必填项已用*标注