分布式事务
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 的一致性就是强一致 性),但应用可以采用适合的方式达到最终一致性。
- 基本可用(Basically Available)
分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
- 软状态(Soft State)
允许系统存在中间状态,而该中间状态不会影响系统整体可用性。这里的中间状态就是 CAP 理论中的数据不一致。
- 最终一致性(Eventual Consistency)
系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。
BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。分区期间牺牲一致性,但分区故障恢复后,系统 应该达到最终一致性。
综合上面的分析,ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。