文章目录
概念
事务是单个逻辑单元组成的一组操作,执行这组操作时要么全成功,要么全失败。事务的特性包含一致性、原子性、隔离性和持久性。 原子性是指这组操作是一个整体,要么不执行,要么全部执行完,中间出现任何情况的打断(如意外断电)这组事务都不成功。 隔离性是指两组事务操作同一份数据是互补想干,就像隔离操作似的。 持久性是指事务提交后就永久的修改数据了。 一致性是指事务执行前后原来一致的数据和数据库仍然是一致的。比如订单表里增加了一个订单那么库存表里肯定是减少一份库存的。分布式事务就是在分布式系统中的,组成事务的这一组操作是在不同的节点上,需要保证事务的 AICD 特性。
理论
CAP
在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)3 个要素最多只能同时满足两个,不可兼得。其中,分区容忍性又是不可或缺的。也就说要么是AP要么是CP。
分区容忍性就是指分布式系统中肯定会出现系统异常,设计时要充分考虑好可能会发生异常,做好解决异常的备用方法。
一致性和上面讲的一致性是同样的意思。
可用性是指无论什么时候不会发生锁表的情况。这也正是A和C不能共存的原因。如果满足了一致性则写表时肯定会锁表,如果满足了可用性则肯定不能锁表。
BASE
BASE理论的核心思想是:
基本可用(BasicallyAvailable):指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用。
软状态(SoftState):指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性。
最终一致性(EventualConsistency):指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态。
分布式一致性模型
强一致性
数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。
弱一致性
数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。
最终一致性
弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。
方案
2PC
2PC是基于XA规范实现的,差不多是一回事。属于强一致性模型的一种方案。简单点说就是一组分布式事务操作中每个操作都执行完毕之后再提交。具体如下:
有一个事务管理器,负责协调多个数据库(资源管理器)的事务。协调者询问参与者事务操作是否预执行成功,参与者发回事务执行结果。如果每个数据库都回复ok,即预提交成功,就正式提交事务,在各个数据库开始执行操作,这里失败会有失败异常重试,日志分析,