从 0 开始学架构
李运华
网名“华仔”,前阿里资深技术专家(P9)
152571 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 66 讲
结束语 (1讲)
结课测试 (1讲)
从 0 开始学架构
15
15
1.0x
00:00/00:00
登录|注册

05 | 复杂度来源:高可用

选择适合系统的高可用方案是一个复杂的过程
状态决策不可能在所有场景下都没有问题
计算高可用和存储高可用都有各自的复杂性
高可用是系统复杂度的来源之一
民主式决策:多个个体投票决策,可能出现脑裂问题
协商式决策:主备决策,连接中断时决策问题
独裁式决策:只有一个决策者,故障时无法决策
状态决策是实现高可用的基础
难点在于减少或规避数据不一致对业务的影响
传输延迟和中断导致数据不一致,影响业务
数据传输需要经过线路,传输速度限制
复杂度体现在任务分配器、连接和交互、分配算法等方面
架构示意图:单机变双机、高可用集群
无论在哪台机器上进行计算,结果都一样
冗余解决方案的本质区别:高性能是扩展处理性能,高可用是冗余处理单元
通过增加冗余来提高可用性
可用性程度是系统设计的准则之一
系统无中断地执行其功能的能力
总结
高可用状态决策
存储高可用
计算高可用
高可用的实现方式:冗余
定义
复杂度来源之一:高可用

该思维导图由 AI 生成,仅供参考

今天,我们聊聊复杂度的第二个来源高可用
参考维基百科,先来看看高可用的定义。
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
这个定义的关键在于“无中断”,但恰好难点也在“无中断”上面,因为无论是单个硬件还是单个软件,都不可能做到无中断,硬件会出故障,软件会有 bug;硬件会逐渐老化,软件会越来越复杂和庞大……
除了硬件和软件本质上无法做到“无中断”,外部环境导致的不可用更加不可避免、不受控制。例如,断电、水灾、地震,这些事故或者灾难也会导致系统不可用,而且影响程度更加严重,更加难以预测和规避。
所以,系统的高可用方案五花八门,但万变不离其宗,本质上都是通过“冗余”来实现高可用。通俗点来讲,就是一台机器不够就两台,两台不够就四台;一个机房可能断电,那就部署两个机房;一条通道可能故障,那就用两条,两条不够那就用三条(移动、电信、联通一起上)。高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机器来达到目的,但其实本质上是有根本区别的:高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元
通过冗余增强了可用性,但同时也带来了复杂性,我会根据不同的应用场景逐一分析。

计算高可用

这里的“计算”指的是业务的逻辑处理。计算有一个特点就是无论在哪台机器上进行计算,同样的算法和输入数据,产出的结果都是一样的,所以将计算从一台机器迁移到另外一台机器,对业务并没有什么影响。既然如此,计算高可用的复杂度体现在哪里呢?我以最简单的单机变双机为例进行分析。先来看一个单机变双机的简单架构示意图。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了高可用性的复杂性及其实现方式,涉及计算高可用和存储高可用两个方面。在计算高可用方面,需要考虑任务分配、连接管理等复杂因素;而在存储高可用方面,传输延迟和中断等问题对数据一致性和业务造成影响。文章强调了冗余机制在提升系统可用性的重要性,同时指出了在实现高可用性时需要面对的技术挑战和取舍。此外,文章还详细分析了高可用状态决策的几种方式,包括独裁式、协商式和民主式,以及它们各自的优缺点和可能出现的问题。通过对这些决策方式的分析,读者可以更好地理解高可用性的复杂性,以及在实践中需要考虑的各种因素。整体而言,本文为读者提供了对高可用性复杂性的深入理解,并为实现高可用性提供了有益的思考和指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学架构》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(159)

  • 最新
  • 精选
  • 小超在努力
    古人有言:先解决有无,再解决优化。所以可用更难,性能次之,找对象同理。

    作者回复: 你已参透天机😄

    2018-08-16
    7
    109
  • 彡工鸟
    这么多回复里,没有人提到高可用和高性能的量化指标,没有这个指标前提下,无法断定哪个更复杂吧。打个比方,高可用两条99就行了,你觉得会复杂,会难么?高性能要求你在并发百万,千万级调用十几个服务前提下,仍能保持10多毫秒,你觉得简单?复杂与否还是要指标。另外,很多人都关注应用节点和硬件节点高可用,却忽略了业务高可用这个视角,系统全挂了,你人工接入业务,在后台帮用户开通,办理,对业务来说也是高可用吧。以上个人看法

    作者回复: 你说的有道理,没有绝对的结论,我的问题只是想引起大家思考,通过思考来更深入理解复杂度。 通常情况下,高可用要复杂一些,因为需要考虑的情景很多,而且没有完美的方案,只能做取舍。

    2018-05-08
    5
    90
  • bieber
    高可用的解决方法不是解决,而是减少或者规避,而规避某个问题的时候,一般都会引发另一个问题,只是这个问题比之前的小,高可用的设计过程其实也是一个取舍的过程。这也就是为什么系统可用性永远只是说几个九,永远缺少那个一。 而高性能,这个基本上就是定义计算能力,可以通过架构的优化,算法的改进,硬件的升级都可以得到很好的解决,从而达到我们心里对性能的预期…

    作者回复: 有道理,没有完美的高可用方案

    2018-05-25
    2
    75
  • 性能
    老师,银行账务类强一致性业务,适用最终一致性方案吗?我们通常要求既要实时看到账务操作结果,又要提供高性能,最终只能用依赖于数据库实现一致性,但性能压力很大

    作者回复: 强一致性目前没有太好的方式,目前一般采取用户分区的做法,即:将用户分散在多个数据分区中,每个数据分区中的用户用单点数据库保证强一致性

    2018-05-29
    4
    37
  • 晓晨同学
    核心思想:网站高可用的主要技术手段是服务与数据的冗余备份与失效转移。同一服务组件部署在多台服务器上;数据存储在多台服务器上互相备份。通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失。 从架构角度看可用性:当前网站系统多采用经典的分层模型,从上到下为:应用层、服务层与数据层。应用层主要实现业务逻辑处理;服务层提供可复用的服务;数据层负责数据读写;在部署架构上常采用应用和数据分离部署,应用会部署到不同服务器上,这些服务器被称为应用层的服务器;这些可复用的服务也会各自部署在不同服务器上,称为服务层的服务器;而各类数据库系统、文件柜等数据则部署在数据层的服务器。 硬件故障方面引起不可用的技术解决措施:(1)应用服务器。可通过负载均衡设备将多个应用服务器构建为集群对外提供服务(前提是这些服务需要设计为无状态,即应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行业务逻辑的操作响应),当均衡设备通过心跳检测手段检测到应用服务器不可用时,则将其从集群中移除,并将请求切换到其他可用的应用服务上。(2)服务层服务器。这些服务器被应用层通过分布式服务框架(如Dubbo)访问,分布式服务框架可在应用层客户端程序中实现软件负载均衡,并通过服务注册中心提供服务的服务器进行心跳检测,当发现有服务器不可用时,立即通知客户端程序修改服务列表,同时移除响应的服务器。(3)数据服务器。需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份;当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。

    作者回复: 为你点赞👍👍👍

    2019-02-19
    3
    31
  • 夜行观星
    就我一个人注意到ZK的选举算法不是Paxos吗?虽然不是本文重点😂

    作者回复: 感谢指正,ZK的协议是ZAB,官方文档也解释了ZAB不是Paxos算法,因为两者的设计目标不同,我没有深入研究两者协议,但大部分研究过的人认为ZAB是在Paxos算法上进行了改良和优化,有兴趣的可以深入研究一下。

    2018-05-13
    2
    31
  • A李文
    冷备、温备、热备的具体区别是

    作者回复: 冷备:系统没启动 温备:系统启动,但是没法接管业务 热备:系统启动,随时可以接管业务

    2020-03-17
    4
    21
  • 高性能虽然复杂,但是只要通过合理的集群方案还是可以解决业务的性能需求,但是高可用也只能做到相对高可用,绝对高可用是不存在的,总会有诸多突发外界因素进行干扰,高性能的实现是受人为控制的,只要是在人的控制范围内,那问题都不是问题,但是要做到高可用,很多事情都不是人能控制的,比如天灾人祸

    作者回复: 很正确👍

    2018-10-27
    14
  • 孙振超
    相对而言还是高可用更难些,按照作者说的高性能其实就是容量,在负载均衡系统高可用的情况下加机器就可以了,而想做到各个环节的高可用不是靠加机器就能搞定的,通常需要复杂的算法、引入更多的中间件、牺牲一定的性能才能实现,这其中还要进行各种权衡取舍裁剪才可以

    作者回复: 确实如此

    2018-05-26
    12
  • 云学
    有些人把高可用与高可靠混淆了,高可用是不要中断服务,高可靠是数据不丢失。

    作者回复: 有区别,但实践中一般很难清晰的区分,否则每次都要解释半天,我们一般都是混用,大家都明白是什么意思。 严格来说,高可用是指正常提供服务的概率,主要和故障恢复时间有关;高可靠是指出问题的概率,主要和故障次数有关。大部分情况下其实我们都是说可用性,因为保证系统能够正常提供服务才是我们的首要目标。

    2018-05-15
    11
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部