彻底搞透分布式一致性( 三 )


2PC只能应用于两个事务参与者的场景 , 而XA可以应用于多个事务参与者的场景,具体如图所示:

彻底搞透分布式一致性

文章插图
图片
XA 定义了一组接口:
  • XA资源管理器(XA Resource Manager,RM):用于管理分布式事务的资源,如数据库、消息队列等;
  • XA事务管理器(XA Transaction Manager,TM):用于协调各个资源管理器的事务处理;
  • XA接口:XA接口允许应用程序参与到分布式事务的协调中,包括开始、提交或回滚事务等操作;
对应的事务提交和回滚流程如下:
  • 应用程序通过XA接口开始一个分布式事务,XA事务管理器为该事务分配一个唯一的全局事务ID;
  • 应用程序使用XA接口将某些操作注册为分布式事务的一部分,这些操作可以涉及多个XA资源管理器;
  • 当应用程序执行到提交事务的代码时,XA事务管理器先协调各个XA资源管理器,检查这些资源管理器是否都能够提交事务;
  • 如果所有的资源管理器都能够提交事务,则XA事务管理器向各个资源管理器发送提交事务的请求,并等待它们的响应;
  • 如果其中有任何一个资源管理器不能提交事务,则XA事务管理器向各个资源管理器发送回滚事务的请求,并等待它们的响应;
  • 当所有的资源管理器都响应提交或回滚事务的请求后 , XA事务管理器将事务的状态(提交或回滚)通知给应用程序,并释放资源 。
2PC (包括升级后的 3PC) , 在事务执行的整个流程中都需要对资源进行锁定,在分布式环境下将大幅增加系统响应时间,降低整个系统的吞吐,在实际工作中使用的非常少 。
2.3. TCCTCC 是实现分布式事务解决方案的一种有效方法 , 更是真正应用于实际工作的一大解决方案 。
彻底搞透分布式一致性

文章插图
图片
TCC (try-confirm-cancel) 是一种分布式事务解决方案,它将一个分布式事务拆分成三个过程:
  • Try 操作:尝试执行分布式事务中的操作,检查所有参与方是否准备好执行事务 。如果准备好,则锁定资源,等待确认或取消操作;
  • Confirm 操作:确认执行分布式事务中的操作,提交所有参与方的操作 。如果有任何错误,则回滚所有操作并释放锁定的资源;
  • Cancel 操作:取消执行分布式事务中的操作 , 回滚所有参与方的操作并释放锁定的资源;
TCC 的操作流程如下:
  • 应用程序向协调者请求分布式事务,并传输所有需要执行的操作;
  • 协调者根据 TCC 的分布式事务处理策略创建一个唯一的分布式事务 ID,并将它分配给每个参与方;
  • 各参与方执行 Try 操作,并锁定需要访问的资源;
  • 协调者检查所有参与方是否准备好执行操作,如果所有参与方都准备好,则进入 Confirm 阶段;
  • Confirm 阶段中 , 各参与方确认执行操作,并将结果提交给协调者;
  • 如果有任何错误 , 协调者将回滚所有操作并释放锁定的资源 。否则,所有参与方之间的事务将得到确认执行 , 释放资源并关闭事务;
  • 如果任何参与方在 Try 阶段失败,则进入 Cancel 阶段;
  • Cancel 阶段中,各参与方撤销所有操作并释放锁定的资源;
  • 协调者记录每个阶段的操作,以便处理异常情况;
TCC 是一种补偿型事务机制,通过人工干预来处理异常,本身具备极佳的灵活性,适用于各种不同类型的应用场景 。
2.4. 事务一致性本质看了不少一致性解决方案,不知道有没有发现一些规律?
核心组件基本一致: