文章目录
- 1.分布式事务解决方案之两阶段提交协议
- 2.Seata 简介(两阶段提交协议的演变)
- 3.Seata 术语
1.分布式事务解决方案之两阶段提交协议
2PC,即两阶段提交协议(Two-Phase Commit),是分布式系统中保证事务原子性的一种经典算法。
2PC的设计目的是确保分布式事务能够在所有参与者上都成功提交,或者在所有参与者上都回滚,从而保证数据的一致性。这个协议分为两个阶段:
- 准备阶段(Prepare Phase):在这个阶段,事务管理器会询问所有的事务参与者是否准备好提交事务。每个参与者都会尝试预执行事务,并保留必要的资源,然后向事务管理器报告是否可以提交。
- 提交阶段(Commit Phase):如果所有参与者都报告可以提交,事务管理器就会发出正式提交的指令,参与者完成事务的真正提交。如果有任何一个参与者报告无法提交,事务管理器将指示所有参与者回滚事务。
举例:假设你在一个电商网站上购买了一件商品,这个操作涉及到了订单系统、库存系统 2 个不同的服务。这 2 个服务需要协同工作来共同完成这个购买操作。在这个场景中,如果任何一个服务出现问题,比如库存不足或者订单超时,那么整个购买操作就应该被回滚,否则就会出现数据不一致的问题。
- 准备阶段:事务管理器向所有参与者发送 Prepare 消息,每个数据库参与者在本地执行事务,并写好本地的 Undo/Redo 日志,此时事务没有提交。(日志在二阶段进行使用:Undo 用于回滚,Redo 用于提交)
- 提交阶段:如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据事务管理器的指令执行提交或回滚操作,并释放事务处理过程中使用的资源。
成功:
失败:
2.Seata 简介(两阶段提交协议的演变)
官网地址:https://seata.apache.org/zh-cn/docs/user/quickstart/
3.Seata 术语
官网地址:https://seata.apache.org/zh-cn/docs/user/quickstart/
要了解 Seata,首先我们要了解一下 Seata 中几个代表了分布式事务处理中的关键角色及概念:
- TC (Transaction Coordinator):事务协调者,负责维护全局和分支事务的状态,并驱动全局事务的提交或回滚。
- TM (Transaction Manager):事务管理器(发起者,同时也是 RM 的一种),定义全局事务的范围,负责开始全局事务以及提交或回滚全局事务。
- RM (Resource Manager):资源管理器(每个参与事务的微服务),管理分支事务处理的资源,与TC进行通信以注册分支事务和报告分支事务的状态,并负责驱动分支事务的提交或回滚。在Seata中,分支事务通常指的是本地事务,而分布式事务则是由多个分支事务共同组成的全局事务。
示例图
用户购买商品的业务逻辑。整个业务逻辑由 3 个微服务提供支持:
- 仓储服务:对给定的商品扣除仓储数量。
- 订单服务:根据采购需求创建订单。
- 帐户服务:从用户帐户中扣除余额。