架构复杂度2-高可用

复杂度来源:高可用

  • 维基百科高可用的定义

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

关键在于“无中断
无论单个硬件还是单个软件,都不可能做到无中断,硬件会出故障,软件会有 bug;硬件会逐渐老化,软件会越来越复杂和庞大……外部环境导致的不可用更加不可避免、不受控制。例如,断电、水灾、地震

方案

系统的高可用方案五花八门,但万变不离其宗,本质上都是 通过“冗余”来实现高可用 。通俗点来讲,就是一台机器不够就两台,两台不够就四台;一个机房可能断电,那就部署两个机房

高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机器来达到目的,但其实本质上是有根本区别的:高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。


应用场景

1.计算高可用

“计算”指的是业务的逻辑处理。计算的特点就是 无论在哪台机器上进行计算,同样的算法和输入数据,产出的结果都是一样的
在这里插入图片描述

这个架构图和“高性能”讲到的架构图是一样的,因此复杂度也是类似的

  1. 需要增加一个任务分配器,选择合适的任务分配器也是一件复杂的事情,需要综合考虑性能、成本、可维护性、可用性等各方面因素。
  2. 任务分配器和真正的业务服务器之间有连接和交互,需要选择合适的连接方式,并且对连接进行管理。例如,连接建立、连接检测、连接中断后如何处理等。
  3. 任务分配器需要增加分配算法。
    例如,常见的双机算法有主备、主主,主备方案又可以细分为冷备、温备、热备。
    高可用集群相比双机来说,分配算法更加复杂,可以是 1 主 多 备、多主 多 备、多 主 1 备、全 主 0 备,ZooKeeper 采用的就是 1 主 多 备,Memcached 采用的就是 全 主 0 备。

2.存储高可用

对于需要存储数据的系统来说,整个系统的高可用设计关键点和难点就在于“存储高可用”
存储与计算相比,有一个本质上的区别:将数据从一台机器搬到到另一台机器,需要经过线路进行传输。

传输问题

线路传输的速度 短的是毫秒级别,但不稳定情况下可能达到 1s 甚至更多
传输线路本身也存在可用性问题,传输线路可能中断、可能拥塞、可能异常(错包、丢包),并且传输线路的故障时间一般都特别长,短的十几分钟,长的几个小时都是可能的。2015 年支付宝因为光缆被挖断,业务影响超过 4 个小时;

按照“数据 + 逻辑 = 业务”这个公式来套的话,数据不一致,即使逻辑一致,最后的业务表现就不一样了。
在这里插入图片描述

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

分布式领域里面有一个著名的 CAP 定理,从理论上论证了存储高可用的复杂度。也就是说,存储高可用不可能同时满足“一致性、可用性、分区容错性”,最多满足其中两个

3.高可用状态决策

无论是计算高可用还是存储高可用,其基础都是**“状态决策”,即系统需要能够判断当前的状态是正常还是异常**

存在一个本质的矛盾通过冗余来实现的高可用系统,状态决策本质上就不可能做到完全正确。
但无论采取什么样的方案,状态决策都不可能做到任何场景下都没有问题,但完全不做高可用方案又会产生更大的问题,如何选取适合系统的高可用方案,也是一个复杂的分析、判断和选择的过程。

常见的决策方式
1. 独裁式

上报者”,都将状态信息发送给决策者。
决策者”,负责收集信息然后进行决策;

在这里插入图片描述

  • 问题
    问题在于只有一个决策者。当决策者本身故障时,整个系统就无法实现准确的状态决策。
2. 协商式

两个独立的个体通过交流信息,然后根据规则进行决策
最常用的协商式决策就是主备决策 :在这里插入图片描述

  • 主备决策的协商规则
    1. 2 台服务器启动时都是备机
    2. 2 台服务器建立连接,交换状态信息
    3. 某 1 台服务器做出决策,成为主机;另一台服务器继续保持备机身份。
  • 问题
    其难点在于,如果两者的信息交换出现问题(比如主备连接中断),此时状态决策应该怎么做。
3. 民主式

民主式决策指的是多个独立的个体通过投票的方式来进行状态决策。
例如,ZooKeeper 集群在选举 leader 时就是采用这种方式。ZooKeeper 的 ZAB选举算法

民主式决策和协商式决策比较类似,

  1. 其基础都是独立的个体之间交换信息,
  2. 每个个体做出自己的决策,
  3. 然后按照“多数取胜”的规则来确定最终的状态。
  • 问题
    选举算法复杂,
    还有一个固有的缺陷:脑裂( 指人体左右大脑半球的连接被切断后,左右脑因为无法交换信息,导致各自做出决策)
    原来统一的集群因为连接中断,造成了两个独立分隔的子集群,每个子集群单独进行选举,于是选出了 2 个主机

为了解决脑裂问题,民主式决策的系统一般都采用“投票节点数必须超过系统总节点数一半”规则来处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值