网站首页 > 博客文章 正文
背景
最近公司准备把支付功能单独抽成一个公用的支付服务系统。这样一来在调用支付时就要考虑分布式事务问题。提起分布式事务,就必须得遵循CAP理论。
分布式事务所有解决思路:把一个分布式事务拆分成多个本地事务。
理论依据
两阶段提交 (2PC) 理论 。
角色:全局事务管理者 事务参与者
1 准备阶段(锁定资源,执行事务,但不提交,记录Undo/Redo 日志)
Undo 日志是记录修改前的数据,用于数据库回滚。
Redo 日志是记录修改后的数据,用于提交事务后,写入数据文件
2 提交事务阶段(事务管理者发出决策,事务参与者开始提交或者回滚本地事务,释放资源)。
成功时序图:
失败时序图:
提醒: 这里的redo,undo 都是数据库日志实现,数据库需要支持事务,所以是基于数据库的。
存在的问题
- 单点问题 :事务管理者宕机,导致参与者都被阻塞,整个数据库群不可用。
- 同步阻塞问题:在2阶段执行过程中,参与者一直要等待协调者。
- 存在数据不一致风险,网络通信中其实这是个无法完全解决的问题。
三阶段提交
在2阶段提交的基础上,多出一个询问阶段,并在参与者中也引入超时机制。
相对于2PC,3PC主要解决的单点故障问题,并减少阻塞,因为一旦参与者无法及时收到来自协调者的信息之后,他会默认执行commit。虽然 3PC 用超时机制,解决了协调者故障后参与者的阻塞问题,但与此同时却多了一次网络通信,性能上反而变得更差,生产上一般不会用。
2PC具体的解决方案:
seata 是阿里开源的分布式事务框架
高性能,对业务0侵入的,工作在应用层的中间件。
角色:
- Transaction Coordinator(TC): 全局事务协调者(需要独立部署),用来协调全局事务和各个分支事务(不同服务)的状态, 驱动全局事务和各个分支事务的回滚或提交。
- Transaction Manager?: 事务管理者,业务层中用来开启/提交/回滚一个整体事务(在调用服务的方法中用注解开启事务)。
- Resource Manager(RM): 资源管理者,一般指业务数据库代表了一个分支事务(Branch Transaction),管理分支事务与 TC 进行协调注册分支事务并且汇报分支事务的状态,驱动分支事务的提交或回滚。
成功时序图
失败时序图
提醒:seata 在第一阶段就提交了事务,释放了锁。在第二阶段都成功时,可以异步通知,所以性能高,不会有阻塞。
实战步骤
- 下载seata-server,并配置file.conf,registry.conf(也可以不配置默认本地文件配置)。
- 业务项目引入相应的jar包。
- 业务数据库创建undo_log日志表
- 修改业务配置文件application.xml
- 在业务发起者端开启全局事务@GlobalTransactional
其中配置可以参考项目的说明文档
下一章节演示具体的案例项目。
猜你喜欢
- 2024-10-08 峰哥分享:分布式事务Seata AT模式源码解读(一)
- 2024-10-08 分布式事务解决方案之 Alibaba Seata
- 2024-10-08 分布式事务Seata源码解析二:Seata Server启动时都做了什么
- 2024-10-08 分布式事务 Seata(分布式事务seata缺点)
- 2024-10-08 深度剖析 Seata TCC 模式【图解 + 源码分析】
- 2024-10-08 「推荐」阿里开源的分布式事务框架 Seata
- 2024-10-08 Seata 中Resource Manager (RM) 本地事务管理
- 2024-10-08 Seata 环境搭建(seata部署在docker)
- 2024-10-08 「每日背一句Day 107」Will you take a seat at the head of
- 2024-10-08 Seata AT 模式实现两个服务间分布式事务
你 发表评论:
欢迎- 07-07Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- 07-07Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- 07-07Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- 07-07Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- 07-07IT运维必会的30个工具(it运维工具软件)
- 07-07开源项目有你需要的吗?(开源项目什么意思)
- 07-07自动化测试早就跑起来了,为什么测试管理还像在走路?
- 07-07Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- 最近发表
-
- Xiaomi Enters SUV Market with YU7 Launch, Targeting Tesla with Bold Pricing and High-Tech Features
- Black Sesame Maps Expansion Into Robotics With New Edge AI Strategy
- Wuhan's 'Black Tech' Powers China's Cross-Border Push with Niche Electronics and Scientific Firepower
- Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!
- IT运维必会的30个工具(it运维工具软件)
- 开源项目有你需要的吗?(开源项目什么意思)
- 自动化测试早就跑起来了,为什么测试管理还像在走路?
- Cursor 最强竞争对手来了,专治复杂大项目,免费一个月
- Cursor 太贵?这套「Cline+OpenRouter+Deepseek+Trae」组合拳更香
- 为什么没人真的用好RAG,坑都在哪里? 谈谈RAG技术架构的演进方向
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)