分布式事务专题

分布式事务解决方案…

2PC(两阶段提交)

事务分为两个阶段完成,由事务管理器和参与者组成,是在数据库层面实现的。

准备阶段(Prepare phase)

事务管理器给每个参与者发送Prepare消息,每个事务参与者在本地执行事务,并写本地Undo/Redo日志,此时事务没有提交

提交阶段(Commit phase)

如果事务管理器收到了参与者的执行失败或者超时的消息,给每个参与者发送Rollback消息;否则发送Commit消息;参与者根据消息执行回滚或者提交操作,并释放锁资源

解决方案

XA方案

2PC是在数据库层面实现的协议,为了减少数据库厂家的对接成本,国际开放标准组织定义了分布式事务处理模型DTP。

DTP模型定义角色:
  • AP(Application Program):应用程序。
  • RM(Resource Manager):资源管理器,事务的参与者。
  • TM(Transaction Manager):事务管理器,负责协调管理事务,管理事务生命周期。

DTP模型定义TM和RM之间通信的接口规范为XA。基于数据库的XA协议来实现2PC又称为XA方案。

交互方式
  1. TM向AP提供应用程序编程接口,AP通过TM提交或事务回滚。
  2. TM通过XA接口来通知RM数据库事务的开始、结束、提交和回滚。
XA方案的问题
  • 需要本地数据库支持XA协议
  • 资源锁需要等待两个阶段提交才能释放,性能较差

Seata方案

Seata是阿里中间件团队发起的开源项目Fascar,后改名Seata,是一个开源的分布式事务框架。解决了传统2PC协议的问题。目前提供AT(2PC)模式以及TCC模式

优点
  • 不需要数据库支持XA协议,是工作在应用层的中间件;
  • 不长时间占用资源,对业务0侵入解决分布式问题。
设计思想

Seata把事务理解成全局事务和若干分支事务,全局事务负责协调其管辖下的分支事务达成一致。通常分支事务就是某个数据库的本地事务。

角色
  • TC(Transaction Coordinator):事务协调器,是独立的中间件,需要独立部署运行,维护全局事务的运行状态,接收TM指令发起全局事务的提交和回滚。
  • TM(Transaction Manager):事务管理器,需要嵌入到应用程序中工作,负责开启一个全局事务,并向TC发起提交或者回滚指令。
  • RM(Resource Manager):控制分支事务,负责分支注册、状态汇报,并接收TC的指令,驱动分支(本地)事务提交或回滚。