美文网首页
从0开始学架构

从0开始学架构

作者: 微晓诶 | 来源:发表于2020-08-18 17:37 被阅读0次

什么是高可用?

https://time.geekbang.org/column/article/6895?utm_campaign=guanwang&utm_source=baidu-ad&utm_medium=ppzq-pc&utm_content=title&utm_term=baidu-ad-ppzq-title

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

具体呢?

这个定义的关键在于“无中断”,但恰好难点也在“无中断”上面,因为无论是单个硬件还是单个软件,都不可能做到无中断,硬件会出故障,软件会有 bug;

硬件会逐渐老化,软件会越来越复杂和庞大……

除了硬件和软件本质上无法做到“无中断”,外部环境导致的不可用更加不可避免、不受控制。例如,断电、水灾、地震,这些事故或者灾难也会导致系统不可用,而且影响程度更加严重,更加难以预测和规避。

所以,系统的高可用方案五花八门,但万变不离其宗,本质上都是通过“冗余”来实现高可用。

通俗点来讲,就是一台机器不够就两台,两台不够就四台;一个机房可能断电,那就部署两个机房;一条通道可能故障,那就用两条,两条不够那就用三条(移动、电信、联通一起上)。高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机器来达到目的,但其实本质上是有根本区别的:

高性能增加机器目的在于“扩展”处理性能;

高可用增加机器目的在于“冗余”处理单元。

计算高可用

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

计算高可用的复杂度和高性能的复杂度是相似的,在于任务分配这一块。

存储高可用

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

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

分布式领域里面有一个著名的 CAP 定理,从理论上论证了存储高可用的复杂度。也就是说,存储高可用不可能同时满足“一致性、可用性、分区容错性”,最多满足其中两个,这就要求我们在做架构设计时结合业务进行取舍。

高可用状态决策

无论是计算高可用还是存储高可用,其基础都是“状态决策”,即系统需要能够判断当前的状态是正常还是异常,如果出现了异常就要采取行动来保证高可用。

如果状态决策本身都是有错误或者有偏差的,那么后续的任何行动和处理无论多么完美也都没有意义和价值。但在具体实践的过程中,恰好存在一个本质的矛盾:通过冗余来实现的高可用系统,状态决策本质上就不可能做到完全正确。

优秀作业

硬件故障方面引起不可用的技术解决措施:

(1)应用服务器。可通过负载均衡设备将多个应用服务器构建为集群对外提供服务(前提是这些服务需要设计为无状态,即应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行业务逻辑的操作响应),当均衡设备通过心跳检测手段检测到应用服务器不可用时,则将其从集群中移除,并将请求切换到其他可用的应用服务上。

(2)服务层服务器。这些服务器被应用层通过分布式服务框架(如Dubbo)访问,分布式服务框架可在应用层客户端程序中实现软件负载均衡,并通过服务注册中心提供服务的服务器进行心跳检测,当发现有服务器不可用时,立即通知客户端程序修改服务列表,同时移除响应的服务器。

(3)数据服务器。需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份;当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。

软件方面引起不可用的技术解决措施:通过软件开发过程进行质量保证。通过预发布验证、严格测试、灰度发布等手段,尽量减少上线服务的故障。

相关文章

  • 从0开始学架构

    什么是高可用? https://time.geekbang.org/column/article/6895?utm...

  • 从0开始学架构

    一.开篇词 架构为什么有难度 1. 架构设计的思维和程序设计的思维差异很大。 架构设计的关键思维是判断和取舍,程序...

  • 从0开始学架构

    架构设计的目的 主要目的是为了解决软件系统复杂度带来的问题。 架构设计的三大原则 合适、简单、演化1、合适优于业界...

  • 从0开始学软件架构

    在极客时间上定了一个专栏,讲软件架构的,昨天开始学习,一口气看了10章,讲得真不错,把架构相关的背景、概念、原则梳...

  • 微内核架构

    第85篇 极客时间《从0开始学架构》课程笔记。 定义 微内核架构(Microkernel Architecture...

  • 【充电】学习《从0开始学架构》

    最近两周看了这个专栏。极客时间上的。同事发的盗版资料。后来我注册了极客时间,发现我曾经购买过。跟风购买(朋友圈看到...

  • 从0开始学架构 - 高可用存储架构

    极客时间,李运华《从0开始学架构》随堂笔记https://time.geekbang.org/column/int...

  • 小白学基金

    从0开始学基金(第一篇) 从0开始学基金(第二篇) 从0开始学基金(第三篇) 从0开始学基金(第四篇) 从0开始学...

  • 14 | 高性能数据库集群:读写分离

    “从 0 开始学架构”专栏已经更新了 13 期,从各个方面阐述了架构设计相关的理论和流程,包括架构设计起源、架构设...

  • 架构第8章 全面分析系统的可用性

    FMEA方法本文来自于《极客时间》- 从0开始学架构 FMEA(Failure mode and efects a...

网友评论

      本文标题:从0开始学架构

      本文链接:https://www.haomeiwen.com/subject/pbukjktx.html