vlambda博客
学习文章列表

微服务下分布式事务可靠性保证

微服务下分布式事务可靠性保证

分布式事务总的来说分为强一致性方案和最终一致性方案。本质的基础理论是 微服务的CAP理论和BASE(数据的最终一致性)理论。

强一致性方案的理论代表

本质思想是 准备阶段持有多个服务的本地事务资源不提交,不释放,当最终执行完后统一提交所有事务。特点是事务持有时间长,性能较低,强一致性基本得到保证。

  • • 二阶段提交协议(XA协议)

准备、提交二个阶段。

  • • 三阶段提交协议

预备、准备、提交三个阶段。在二阶段的基础,在准备阶段先检查各服务状态,也称为预备阶段。

最终一致性方案的理论代表

  • • TCC模式

TCC的本质原理是把数据库的二阶段提交上升到微服务来实现,从而避免了数据库2阶段中锁冲突的长事务低性能风险。

TCC异步高性能,它采用了try先检查,然后异步实现confirm,真正提交的是在confirm方法中。

分为3个操作,Try,Confiem、Cancel。也就是实现此模式需要实现3个方法。

但是,是两个阶段。第一个阶段是 Try操作,若全部执行成功则执行Confirm操作,否则执行 Cancel操作。

需要处理保证幂等、资源悬挂、空回滚。

幂等 问题:TC重复调用二阶段 解决:事务状态控制记录作为控制手段,只有存在INIT记录时才执行,存在CONFIRMED/ROLLBACKED记录时不再执行

空回滚 问题:TC回滚事务调用二阶段,但一阶段尚未执行 解决:事务状态控制记录作为控制手段,无记录时即为空回滚

资源悬挂 问题:TC回滚事务调用二阶段完成空回滚后,一阶段执行成功 解决:事务状态控制记录作为控制手段,二阶段发现无记录时插入记录,一阶段执行时检查记录是否存在

共通点 核心的解决方案就是事务状态控制表 幂等控制作为最基础的异常处理手段;资源悬挂的前置条件是空回滚,所以发生空回滚时会插入一条状态为ROLLBACKED的控制记录

  • • 补偿模式

业务重试,反向补偿、人工补偿。代表实现:Seata等,先执行的事务会提交,并记录回滚镜像,当后续执行发生异常则基于镜像回滚,若无异常,则异步删除镜像,若回滚失败,则会重试,达到重试次数后,则需要人工介入。

  • • 可靠事件模式

可靠性消息 + 人工介入。代表:RocketMq的可靠性事务消息。消息必然消费,若消费失败,则需要人工介入。

注意:二阶段提交并不是指二阶段提交协议,因为在实现上,TCC也是二阶段的