【微服务9】分布式事务-解决方案

143 阅读2分钟

知识点

  • Seata框架(XA、AT、TCC)

  • MQ

Seata架构

Seata事务管理中三个重要角色:

  • TC(Transaction Coordinator)事务协调者:维护全局和分支事务的状态,协调全局事务提交和回滚
  • TM(Trasaction Manager)事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务
  • RM(Resource Manager)资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚

image.png

Seata的XA模式(CP 强一致性)

RM一阶段的工作:

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC TC二阶段的工作:
  4. TC检测各分支事务的执行状态
  5. 如果都成功,通知所有RM提交事务
  6. 如果都失败,通知所有RM回滚事务 RM二阶段的工作:
  • 接收TC指令,提交或回滚事务

image.png

Seata的AT模式(AP 高可用、官方推荐、项目使用多)

AT模式同样是分阶段提交的事务模型,不过却弥补了XA模型中资源锁定周期过长的缺陷。

阶段一RM的工作:

  1. 注册分支事务
  2. 记录undo-log(数据快照)
  3. 执行业务sql并提交
  4. 报告事务状态

阶段二提交时RM工作:

  • 删除undo-log即可

阶段二回滚时RM的工作:

  • 根据undo-log恢复数据到更新前

image.png

Seata的TCC模式(AP)

  1. Try:资源的检测和预留
  2. Confirm:完成资源操作业务:要求try成功confirm一定成功
  3. Cancel:预留资源释放

image.png

MQ分布式事务

image.png

你们项目中采用的是哪一种分布式事务解决方案

  • 简历上写的微服务,只要是发生了多个服务之间的写操作,都需要进行分布式事务控制
  • 描述项目中采用的哪种方案(seata|mq)
  1. seata的XA模式,CP,需要互相等待各个分支事务的提交,可以保证强一致性,性能较差 【银行业务】
  2. seata的AT模式,AP,底层使用undo log实现,性能较好 【互联网业务】
  3. seata的TCC模式,AP,性能较好,不过需要人工编码实现 【银行业务】
  4. MQ模式实现分布式事务,在A服务写数据的时候,需要在同一个事务内发送消息到另一个事务,异步的,性能好 【互联网业务】