从ACID到CAP及BASE

2023-02-14,,

ACIDCAP及BASE

ACID

说到事务,肯定想到事务的ACID特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

1.原子性:全部成功或者全部失败。

2.一致性:不好描述,取个例子:银行转账,TOM给JIM转1000元,TOM的账户减少1000,同时JIM的账户要增加1000。不允许出现只减少或者只增加的情况。

3.隔离性:事务之间不能项目干扰。包含四种隔离级别,即read_uncommitted、read_committed、repeatable_read、serializable。

3.1 read_uncommitted:该隔离级别会发生脏读。举个例子,事务A更新字段的值从1到10,事务B在此过程中可以读到该字段的值1,2,3,4,5…10。

3.2 read_committed:该隔离级别不可重复读。举个例子,事务A更新字段的值从1到10,事务B在此过程中只能读到事务A提交后的值10。若此时有另外一个事务执行更新字段从10到20,那么事务B再次读取会读到20。

3.3 repeatable_read:该隔离级别会发生幻读。举个例子,事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

3.4serializable:最严格的事务隔离级别。要求所有事务都串行执行,不能并发。

4.持久性:事务一旦提交,事务的数据就会永久保存下来。

 

提供一个隔离级别对比表格:

隔离级别

脏读

可重复读

幻读

Read_uncommitted

存在

不可以

存在

Read_committed

不存在

不可以

存在

Repeatable_read

不存在

可以

存在

Serializable

不存在

可以

不存在

CAP

提到分布式事务,应该就会想到CAP。一个分布式系统是不可以同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)

1.一致性:分布式系统中多个副本数据保持相同。

2.可用性:系统提供的服务处于可用状态,能够在有限的时间后返回结果。

3.分区容错性:分布式系统在遇到任何网络分区故障的时候,必须能够保证对外提供给满足一致性和可用性的服务,除非整个网络出现问题。

以上三点,对于一个分布式系统不可能同时满足,但是分区容错性是最基本的。

放弃CAP定理

描述

放弃P

如果希望避免系统出现分区容错性问题,一种较为简单的做法是将所有数据放在一个分布式节点上。这样至少不会碰到由于网络分区带来的负面影响,如果放弃P,就意味着放弃系统可扩展性。

放弃A

如果遇到网络分区故障或者其他故障,那么受影响的服务需要等待一定的时间,在等待期间服务无法对外提供服务。

放弃C

放弃一致性是放弃数据的强一致性,保留数据的最终一致性。

BASE

base是Basically Available(基本可用)、soft state(软状态)、Eventually consistent(最终一致性)的缩写。

基本可用:分布式系统出现不可预知的故障时,允许损失部分可用性。例如响应时间上的损失、功能上的损失。

软状态:允许系统的在不同的节点的数据副本之间进行数据同步时存在延迟。

最终一致性:本质是保证数据最终能达到一致。包括因果一致性、读已之所写、会话一致性、单调读一致性、单调写一致性。

从ACID到CAP及BASE的相关教程结束。

《从ACID到CAP及BASE.doc》

下载本文的Word格式文档,以方便收藏与打印。