vlambda博客
学习文章列表

分布式事务概念以及CAP理论

分布式事务

1.事务的特征(ACID

  a) 原子性
事务必须是一个原子操作,事务在执行过程中,要么全部执行成功,要么全部不执行,不存在中间状态。
b) 一致性
事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后数据库都必须处于一致性。
c) 隔离性
在并发环境中,事务的执行是相互隔离的,他们的执行互不干扰。
d) 持久性
一个事务一旦提交,对数据库的对应数据状态的变更都会永久性的保存。

2.事务的隔离级别

a) read uncommitted   读未提交 
读取未提交的内容,在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。很少用于实际应用,脏读。
b) read committed     读提交,可避免脏读 事务隔离级别为读提交时,写数据只会锁住相应的行。
大多数数据库系统默认的隔离级别(但不是 mysql默认的)满足了隔离的简单定义:一个事务只看见已经提交事务做的改变,这种隔离级别也支持所谓的。
c)  repeated read 可重复读  可避免脏读、不可重复读
d) serializable  可串行化   可避免脏读  不可重复读   幻读。 会锁表 影响性能。

3.分布式环境的各种问题

a) 通信异常
b) 网络分区 多个节点 由于网络延迟原因导致只有部分节点能够正常访问
c) 节点故障

4.分布式事务

概念:分布式事务是指事务的参与者、支持事务的服务器,资源服务器以及事务管理器部署在分布式系统的不同节点上。

 

CAP 定理(CAP theorem) 

在一个分布式系统中,当涉及读写操作时,只能保证一致性 (Consistence) 、可用性 (Availability) 、分区容错性  (Partition Tolerance) 三者中的两个,另外一个必须被牺牲  ;

 一致性(Consistency) 所有节点同一时刻的数据要一致,对于客户端来说,读操作都会取出最新的数据,要求数据一致;
可用性(Availability)  非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应) 要求返回及时
分区容错性(partiton)要求分布式和数据同步
CAP 理论是忽略延时的,而实际应用中延时是无法避免的。 

CAP的应用

虽然  CAP 理论定义是三个要素中只能取两个,但放到分布式环境下,我们会发现必须选择  P(分区容错 )要素,因为网络本身无法做到 100% 可靠,有可能出故障,所以分区是一个必然的现象。如果我们选择了  CA而放弃了 P,那么当发生分区现象时,为了保证  C,系统需要禁止写入,当有写入请求时,系统返回  error(例如,当前系统不允许写   ),这又和 A冲突了,因为 A要求返回  no error   no timeout。因此,分布式系统理  论上不可能选择  CA架构,只能选择  CP或者 AP 架构。  

BASE 

BASE  是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性(CAP 的一致性就是强一致 ),但应用可以采用适合的方式达到最终一致性。 

1. 基本可用(Basically Available) 

分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。

2. 软状态(Soft State) 

允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里中间状态就是 CAP 理论中的数据不一致。 

3. 最终一致性(Eventual Consistency) 

系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。  
BASE  理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP  AP 方案的一个补充。 分区期间牺牲一致性,但分区故障恢复后,系统   应该达到最终一致性。  

综合上面的分析,ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE  CAP 理论中 AP 方案的延伸。