微服务架构之CAP定理和BASE理论

什么是 CAP 定理
.1 一致性(Consistency)
一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
这里的一直性是指的强一致性N a L 4 + i Z S,一般关系型数据库9 q 9 V就有强一致性特性。

2,可用性(Avv s g e =ailability)
可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。
异地双活或者本地多活,但是一个区域的服务挂掉的情况下 其他r B * u s J $ I地区能正常提供服务,并 ( k G且是正常响应时间

3. 8 C K L ) % R *,分区容错性(PaR / 2 i y 4rtitiv U 5 xon tolerance)
分区容错性指“the systemr J L [ z ] continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某y Y _ s I _节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
区域故障也能~ } # e I : x 2 8稳定提供服务
CAP权衡
CAP理论,我们知道无法同时满足一致性、可用性和分区容错性这三个特性。一般都是CP或者AP
CP 多用于金融系统
AP 用于? S | 6 n d B普通分布架构
BASE 理论
解决BASE理论的延生
BASE理论是对CAP中的一致性及可用性进行T ( F A一个权衡的结果,其核心思想是:我们无法做到强一致性,那么我们可以通过牺牲强一致性获得可用性, 一般应用I Z ; I , K V u r于服务化系统的应用层或者大数据处理系统中,采用适当的方式 达到最终一致性。

BA:Basically AvaE o ) : - { milable(基本可用)
基本可用:是对A(可用性)的一个妥协u n } } p M r U o,比如秒杀场景下,或者雪崩1 m W p o的业务场景下,可以降级处理,使核心功能可用,而不是所有的功能可用。或者{ . b延迟完成,比如通过削峰限流,来延迟响应

S:Soft state(软状态)
指允许部分节点数据存在一定的延时,这个延时不影响可用性。例如一次写d c j R 9 4操作只更新了一个结点就返回成功。那么其他节点和这个节点的数据时不一致的。此时的数据状态就是软状态。该状态不能一直存在,必须要有个期限,系统保证在没有后续更新的前提下,在这个期限后,系统最终返回上一次更新操作的值,从而达到数据的最终一致性V r m 0 x 2,这个容忍期限(不一致窗口的时间)取决于通信延迟,系统负载,数据复C : u f方案设计,复制副本个数等,DNS是一个典型的最终一致性系统

E:Eventually consistent(最终一致性)
指最终数据要实现一致性,例如:软状态的数据最终我们要通过一些手段将数据同步到其他数据节点上。例如使用mq。
ACID规则
其中 又去关系性数据库遵循的ACID规则有所区别
A (Atomicity) 原子性
原子性很容易理解,也就是说事务z u @ }里的所有操作要么p ( - a Z全部做完,要么都不做,事务成功的7 U d条件是事务里的所v 9 i H 有操作都成功,只要有一个操作失败,整个事务就失败,F } c需要回B u *滚。

比如银行转账,从 A 账户转 100 元至 B 账户,分为两个步骤:1)从 A 账户取 100 元;2)存入 100 元至 B 账户。这两步要么一起+ P | P t w c 3 &完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了 100 元。

C (Consistency) 一致性
一致性也比较容易理解,也就是说数S | : L据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。S k = I

例如现有完整性约k 5 o h S束 a+b=10,如果一个事务改变了 a,那么必须得改变 b,使得事务结束后依然满足 a+b=10,否则事务失败。

I (Isolation) 隔离性
所谓的隔离性是指并发的事务之间不会互相影响,如果一个事务要访问{ V 4 q I 9 @ r的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。

比如现在有个交易是从 A 账户转 100 元至 B 账户,在这个交易还Q p ) d t w $ =未完成的情况) M E ) U p下,如果此时 B 查询自己的账户,是看不到新增加的 100 元的。

D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出I b s ( z ~ . Y现宕机也不会丢失。