你再不知道分布式事务,我就真的生气了( 二 )


CAP 理论
CAP 理论作为分布式系统的基础理论,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),这三个要素最多只能同时实现两点 。

你再不知道分布式事务,我就真的生气了

文章插图
 
一致性(C,Consistency):一致性是指数据在多个副本之间能否保持一致的特性 。
例如一个数据在某个分区节点更新之后,在其他分区节点读出来的数据也是更新之后的数据 。
可用性(A:Availability):可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果 。这里的重点是"有限时间内"和"返回结果" 。
分区容错性(P,Partition tolerance):分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务 。
你再不知道分布式事务,我就真的生气了

文章插图
 
BASE 理论
BASE 理论,是对 CAP 中 AP 的一个扩展,对于我们的业务系统,我们考虑牺牲一致性来换取系统的可用性和分区容错性 。
BASE 是 Basically Available(基本可用),Soft State(软状态)和 Eventually Consistent(最终一致性)三个短语的缩写 。
Basically Available:基本可用 。通过支持局部故障而不是系统全局故障来实现的 。
如将用户分区在 5 个数据库服务器上,一个用户数据库的故障只影响这台特定主机那 20% 的用户,其他用户不受影响 。
Soft State:软状态 。状态可以有一段时间不同步 。
Eventually Consistent:最终一致 。最终数据是一致的就可以了,而不是时时保持强一致 。
分布式事务的几种解决方案
分布式事务解决方案主要有以下这几种:
  • 2PC(二阶段提交)方案
  • TCC(Try、Confirm、Cancel)
  • 本地消息表
  • 最大努力通知
  • Saga 事务
二阶段提交方案
二阶段提交方案是常用的分布式事务解决方案 。事务的提交分为两个阶段:准备阶段和提交执行方案 。
二阶段提交成功的情况:
  • 准备阶段,事务管理器向每个资源管理器发送准备消息,如果资源管理器的本地事务操作执行成功,则返回成功 。
  • 提交执行阶段,如果事务管理器收到了所有资源管理器回复的成功消息,则向每个资源管理器发送提交消息,RM 根据 TM 的指令执行提交 。
如图:
 
你再不知道分布式事务,我就真的生气了

文章插图
 
二阶段提交失败的情况:
  • 准备阶段,事务管理器向每个资源管理器发送准备消息,如果资源管理器的本地事务操作执行成功,则返回成功,如果执行失败,则返回失败 。
  • 提交执行阶段,如果事务管理器收到了任何一个资源管理器失败的消息,则向每个资源管理器发送回滚消息 。
资源管理器根据事务管理器的指令回滚本地事务操作,释放所有事务处理过程中使用的锁资源。
你再不知道分布式事务,我就真的生气了

文章插图
 
2PC 方案实现起来简单,成本较低,但是主要有以下缺点:
  • 单点问题:如果事务管理器出现故障,资源管理器将一直处于锁定状态 。
  • 性能问题:所有资源管理器在事务提交阶段处于同步阻塞状态,占用系统资源,一直到提交完成,才释放资源,容易导致性能瓶颈 。
  • 数据一致性问题:如果有的资源管理器收到提交的消息,有的没收到,那么会导致数据不一致问题 。
TCC(补偿机制)
TCC 采用了补偿机制,其核心思想是:针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作 。
TCC(Try-Confirm-Cancel)是通过对业务逻辑的分解来实现分布式事务 。
针对一个具体的业务服务,TCC 分布式事务模型需要业务系统都实现一下三段逻辑:
  • Try 阶段:尝试去执行,完成所有业务的一致性检查,预留必须的业务资源 。
  • Confirm 阶段:该阶段对业务进行确认提交,不做任何检查,因为 Try 阶段已经检查过了,默认 Confirm 阶段是不会出错的 。
  • Cancel 阶段:若业务执行失败,则进入该阶段,它会释放 Try 阶段占用的所有业务资源,并回滚 Confirm 阶段执行的所有操作 。

你再不知道分布式事务,我就真的生气了

文章插图
 
TCC 分布式事务模型包括如下三部分:


推荐阅读