三、分布式事务
一、分布式事务简述
原因:分布式条件下,多个节点操作的整体事务一致性。
实现方式:
- 强一致: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执行。
注:柔性事务隔离级别为读已提交、读未提交。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?