胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四维口袋KVP最具价值技术专家,技术领域专家团成员,2021电子工业出版社年度优秀作者,获得2023电子工业出版技术成长领路人称号,荣获2024年电子工业出版社博文视点20周年荣誉专家称号。
目录
Seata TCC事务模式是一种分布式事务处理机制,特别适用于那些需要显式业务行为和补偿操作的场景。以下是关于Seata TCC事务核心原理及架构设计的详细解析。
1.核心原理
1.1 TCC事务模式定义
TCC是Try-Confirm-Cancel的缩写,它是一种分布式事务的处理模式。在TCC模式中,事务被分为三个阶段:
(1)Try阶段:主要是对业务系统做检测及资源预留(如加锁、锁住资源)。此阶段不会实际完成业务操作,只是做好准备并锁定资源。
(2)Confirm阶段:当Try阶段所有参与的操作都成功时,进入Confirm阶段。此阶段将正式完成业务操作,提交事务,并释放在Try阶段预留的资源。
(3)Cancel阶段:如果Try阶段有任何一个操作失败,或者由于某种原因需要回滚事务,则进入Cancel阶段。此阶段将撤销所有已执行的Try操作,回滚到事务开始之前的状态,并释放预留的资源。
1.2 幂等性与一致性
(1)幂等性:Confirm和Cancel操作需要满足幂等性,即无论执行多少次,结果都应该是一样的。这是为了防止在网络延迟或故障等情况下,操作被重复执行而导致数据不一致。
(2)一致性:TCC模式通过两阶段提交协议来保证分布式事务的一致性。如果Try阶段成功,则进入Confirm阶段确保事务提交;如果Try阶段失败,则进入Cancel阶段确保事务回滚。
1.3 业务逻辑灵活性
自定义逻辑:开发者可以根据业务需求自定义Try、Confirm和Cancel三个阶段的逻辑。这种灵活性使得TCC模式能够适用于各种复杂的分布式事务场景。
2.架构设计
2.1 组件划分
(1)TM(Transaction Manager,事务管理器):负责定义全局事务的范围,开始全局事务,并在事务结束时根据业务执行的结果发起全局提交或全局回滚的请求。
(2)RM(Resource Manager,资源管理器):负责管理分支事务处理的资源(如数据库连接),执行Try、Confirm和Cancel操作,并向TC报告分支事务的状态。
(3)TC(Transaction Coordinator,事务协调者):负责维护全局事务和分支事务的状态,协调并驱动全局事务的提交或回滚。
2.2 通信机制
(1)高效通信:Seata TCC事务模式通过高效的网络通信机制,确保TM、RM和TC之间的信息能够及时、准确地传递。这包括分支事务的注册、状态报告、提交/回滚请求等关键信息的传递。
(2)Netty框架:Seata利用Netty框架来实现网络通信,Netty是一个高性能的异步事件驱动的网络应用程序框架,它提供了快速开发可维护的高性能协议服务器和客户端的能力。
2.3 异常处理与容错机制
(1)幂等性处理:为了防止网络延迟或故障导致的重复执行问题,Seata TCC事务模式提供了幂等性处理机制。例如,在Confirm和Cancel阶段,如果操作已经执行过,则不会再次执行。
(2)悬挂与空回滚处理:Seata TCC事务模式还提供了悬挂与空回滚的处理机制。悬挂是指由于网络延迟等原因,RM在未收到Try请求的情况下收到了Rollback请求;空回滚是指由于网络延迟等原因,RM在未收到Try请求的情况下收到了Rollback请求。Seata通过引入tcc_fence_log表来记录事务状态,从而避免悬挂与空回滚的问题。
2.4 性能优化
(1)资源锁定时间短:相较于传统的两阶段提交协议(2PC),TCC模式可以减少资源锁定的时间。因为资源仅在Try阶段被预留,并在Confirm或Cancel阶段迅速释放。
(2)异步提交:在提交阶段,Seata TCC事务模式可能采用异步提交的方式来提高性能。即一旦TC决定提交全局事务,它会立即通知所有RM进行提交操作,而不需要等待所有RM的提交结果。
Seata TCC事务模式通过Try、Confirm和Cancel三个阶段的划分,以及灵活的业务逻辑自定义能力,提供了一种高效、可靠的分布式事务处理机制。其架构设计充分考虑了组件划分、通信机制、异常处理与容错机制以及性能优化等方面,使得TCC模式能够适用于各种复杂的分布式事务场景。在实际应用中,开发者可以根据业务需求和环境配置相应的参数和策略,以实现最佳的性能和稳定性。
3.Seata TCC分布式事务的应用场景
Seata TCC分布式事务模式的应用场景广泛,特别适用于那些需要显式控制事务边界、业务操作可以明确分为尝试、确认和取消三个阶段的复杂业务流程。以下是一些具体的应用场景。
3.1 电商下单流程
在电商系统中,下单流程通常涉及多个服务,如库存服务、订单服务、账户服务等。这些服务需要确保数据的一致性,即要么所有服务都成功,要么所有服务都回滚。TCC模式可以很好地处理这种场景,通过Try阶段预留库存和账户余额,Confirm阶段提交订单并扣除库存和账户余额,Cancel阶段在失败时回滚预留的资源。
3.2 金融支付流程
在金融支付系统中,支付流程同样需要确保数据的一致性。TCC模式可以在Try阶段冻结用户账户余额,Confirm阶段提交支付并扣除账户余额,Cancel阶段在支付失败时解冻账户余额。
3.3 预约与取消场景
在某些业务中,如医院挂号、会议室预约等,存在预约和取消的操作。TCC模式可以在Try阶段预留资源(如挂号名额、会议室),Confirm阶段确认预约并提交相关数据,Cancel阶段在取消时释放预留的资源。
3.4 跨服务调用与事务控制
在微服务架构中,服务之间的调用是分布式的。当某个服务需要调用多个其他服务来完成一个业务操作时,可以使用TCC模式来确保这些服务调用的原子性。即要么所有服务都成功,要么所有服务都回滚。
3.5 长时间运行的事务
对于执行时间较长的事务,如批量处理、数据迁移等,TCC模式可以通过Try阶段开始事务并预留资源,Confirm阶段提交事务并释放资源,Cancel阶段在失败时回滚事务并释放预留的资源。
3.6 需要显式控制事务边界的复杂业务流程
在某些业务中,事务的边界可能不明确或需要显式控制。TCC模式可以允许开发者在代码中显式地定义事务的边界和操作,从而提供更精细的事务控制。
3.7 涉及外部系统或第三方服务的事务
当事务涉及外部系统或第三方服务时,如调用第三方支付接口、外部API等,TCC模式可以确保在调用失败时能够回滚已执行的操作。
总的来说,Seata TCC分布式事务模式适用于那些需要显式控制事务边界、业务操作可以明确分为尝试、确认和取消三个阶段的复杂业务流程。通过提供灵活的事务控制机制和高效的性能表现,TCC模式可以帮助开发者在分布式系统中实现数据的一致性和可靠性。