三、分布式事务

一、分布式事务简述

原因:分布式条件下,多个节点操作的整体事务一致性。

实现方式:

  • 强一致:XA。
  • 弱一致:使用一套事务框架,保证最终一致的事务,柔性事务

 

二、XA分布式事务

1、XA模块描述

  • 应用程序(AP):定义事务边界(开始于结束,并且在事务边界内对资源进行操作)。
  • 资源管理器(RM):如数据库、文件系统。并提供访问资源的方式。
  • 事务管理器(TM):负责分配事务唯一标识,监控事务的执行速度,并负责事务的提交、回滚。

 

2、XA接口(两阶段事务)

  • xa_start:负责开启或恢复一个事务分支。
  • xa_end:负责取消当前线程与事务分支的关联。
  • xa_prepare:询问RM是否准备好提交事务。
  • xa_commit:通知RM提交事务分支。
  • xa_rollback:通知RM回滚事务分支。
  • xa_recover:需要回复的xa事务。

 

3、主流支持XA的框架

  • Atomikos
  • Narayana
  • Seata

注意:XA默认不会改变隔离级别

 

三、Base柔性事务

事务发展:本地事务 -> XA(两阶段) -> Base

 

柔性事务(Base)三个要素:

  • 基本可用:保证事务参与方不一定同时在线。
  • 柔性状态:允许系统状态更新有一定延时,客户不一定能够察觉。
  • 最终一致性:通过消息传递的方式保证系统的最终一致性。
  本地事务 XA两阶段事务 柔性事务
业务改造 实现相关接口
一致性 不支持 支持 最终一致
隔离性 不支持 支持 业务方保证
并发性能 无影响 严重衰退 略有影响
适合场景 业务方处理不一致 短事务&低并发 长事务&高并发

 

四、TCC/AT以及相关框架(柔性事务)

1、TCC要求必须实现三段逻辑

  • Try:完成业务检查,预留必须的业务资源。
  • Confim:真正执行业务逻辑,不能业务检查,需满足幂等性。
  • Cancel:释放Try阶段预留的业务资源,需满足幂等性。

提示:与XA区别就是把XA事务管理(TM)模块移到代码中。

TCC注意问题:允许空回滚、房悬挂控制、幂等设计。

 

2、Saga

与TCC区别:没有Try阶段,直接提交事务。

 

3、AT(对TCC、Saga模式进行优化)

AT模式是两阶段提交,自动生成反向SQL。

方式:通过中间件或框架拦住第一阶段SQL,然后生成反向SQL,如果有异常,进入第二阶段,取到反向SQL执行。

 

注:柔性事务隔离级别为读已提交、读未提交。

 

posted @ 2022-07-18 10:38  小珠9779  阅读(43)  评论(0编辑  收藏  举报