> 文章列表 > 刚性可用和柔性可用

刚性可用和柔性可用

刚性可用和柔性可用

简述

这两个词汇一般出现在事务当中
刚性可用又称为刚性事务,也就是我们经常见到的"强一致性",ACID理论
柔性可用又称为柔性事务,也就是我们经常见到的"最终一致性",BASE理论

前言

进入主题之前,我们先简单聊一下事务
在编程中,事务是指作为单个工作单元执行的一系列操作,用于确保数据库或者其它系统中数据的一致性和完整性
而事务通常具有四个属性(ACID):

  • 原子性(Atomicity)

事务的原子性是指事务必须是一个原子的操作序列单元
任何一项操作失败都将导致整个事务失败,同时其他已经被执行的操作都将被撤销并回滚,只有所有的操作全部成功,整个事务才算是成功完成
要么成功,要么失败

  • 一致性(Consistency)

事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态
事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态

  • 隔离性(Isolation)

事务的隔离性是指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰

  • 持久性(Durability)

事务的持久性也被称为永久性,是指一个事务一旦提交,它对数据库中对应数据的状态变更就应该是永久性的
一旦某个事务成功结束,那么它对数据库所做的更新就必须被永久保存下来——即使发生系统崩溃或机器宕机等故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束时的状态

刚性可用

正常我们的单体服务,只要满足ACID,它都是刚性可用的

柔性可用

随着业务的扩展,我们的服务需要进行跨服务间进行调用,并且用户量开始上升

为什么我们要用柔性可用

  • 我们的系统不再绝对可靠,开始出现了宕机,网络波动(故障)
  • 系统的成本预算也不够,为了系统能稳定运行,在设计的时候可能会进行容灾(资源冗余),但是这种冗余不是无限度的,成本在哪里,当遇到超过冗余的流量,照样会出现问题

当条件有限而不能向用户提供完美服务的时候,可以用柔性有损的服务,最大程度的保证关键服务可用性
通常有损的服务所需的成本会低于完美服务,相应的体验也较差,所以在系统设计时需要平衡二者的关系,尽量提供高等级服务
我们常见的"BASE理论"就是最经典的柔性可用,TCC补偿型事务MQ通知型事务

BASE理论

在分布式系统中,一般有三个指标,简称:CAP理论
CAP理论
Consistency 一致性:读写操作后的值必须一直
Avaliability 可用性:收到请求必须在规定时间内给出回应
Partition tolerance 分区容错性:在不同地区可以进行通信

分布式系统中,网络本身无法做到100%可靠,有可能出现故障
所以C和A无法同时做到

具体来说,当分布式系统遇到网络分区(即节点之间的通信中断)时,必须在一致性(CP)和可用性(AP)之间进行选择。
如果选择保证一致性,那么在网络分区期间,系统将无法提供服务,即不可用。
如果选择保证可用性,那么在网络分区期间,系统将无法保证数据的一致性。
什么是BASE理论
BASE理论本质上是对CAP的延伸和补充,更具体地说,是对CAP中AP方案的一个补充
Basically Available 基本可用:系统应始终可用,即使面临网络分区或者其它故障
Soft State 软状态:系统允许存在中间状态,该中间状态不会影响系统整体可用性
Eventual Consistency 最终一致性:系统最终的结果会变得一致,但不是立刻一致

柔性可用的实现步骤

要实现柔性可用的系统,需要在产品设计和技术实现两个阶段都有柔性的意识

  • 服务分级

在产品设计阶段,需要对服务的应用场景进行还原
要清楚地认识到哪些服务是系统的核心服务,哪些服务是支撑服务
(这不单单是从重要性进行分级,还要考虑,有些服务是需要实时完成还是可以离线完成后延迟同步)

  • 自身能力评估

在产品设计阶段,要了解自己拥有的资源,对自己的负载能力有较好的评估
简单的说,就是要清楚在各种条件下,自己能提供什么样的服务

  • 系统划分

在技术实现初期(系统设计),需要遵循大系统小做的原则,对系统进行拆分,避免各个服务互相影响,降低子模块耦合性

  • 自我监控

系统要有自我监控能力,了解当前负载,评估是否需要提供降级服务

  • 降级服务

满足降级条件时,分级提供柔性服务

  • 系统恢复

当系统重新满足可以提供完美服务的条件时,升级服务等级(有能力时,还应该对之前放弃的局部服务进行恢复)

参考:

https://blog.csdn.net/jokeMqc/article/details/127503412
https://blog.csdn.net/weixin_39582708/article/details/113911252
https://cloud.tencent.com/developer/article/1339887
https://www.jianshu.com/p/a555d9cef983