概述
分布式事务的背景
常见事务:数据库事务
ACID,Spring @Transactional
分布式事务产生场景
- 跨库事务
- 跨网络事务,微服务拆分之后,对同一个数据库的表操作
- 解决分布式系统中数据一致性问题
X/Open DTP事务模型
定义了一个2PC(二阶段提交)模型,定义了XA协议去负责事务提交或回滚
-- 第一阶段
xa start 'xatest';
insert into user values('Lucifer', 'Lucifer');
xa end 'xatest';
xa prepare 'xatest'; --将数据写入到redolog中
-- 第二阶段
xa commit 'xatest'; --提交写入操作到数据库
xa rollback 'xatest'; --回滚写入操作
Oracle / Mysql数据库都提供了对XA协议的支持,但是使用过程中需要对其进行包装
开源分布式事务框架
- Seata(XA)
- Atomikos
- Bitronix
CAP定理(CP / AP)
- C: 强一致性
- A: 可用性
- P: 分区容错性, 当出现网络分区,是否允许可用
Base理论
- BA:基本可用
- S:柔性状态,可以不用实时强一致,但必须最终一致
- E:最终一致性
分布式事务一致性解决方案
- TCC事务
- 补偿
- 定时校对
基于可靠性消息的最终一致性方案
是对BASE理论的落地
生产端通过本地消息事务解决数据不一致问题
幂等性(执行1次和执行多次有着相同的结果)
消费端可能存在消息重复消费的问题,可以通过以下幂等性解决重复消费问题
- 消息表,用MD5值+唯一约束,如果重复消费抛异常DuplicateKeyException
- redis,setNx方法
- 状态机,修改数据状态(某个状态在状态机中只会存在一次)
- 上游生成唯一id
TCC事务
TCC是一种弱一致性模型,和XA类似,都是二阶段提交,XA是数据库层面二阶段,TCC是代码层面二阶段提交
Try:先将资源占用
Confirm:如果Try成功,那么Confirm提交
Cancel:如果Try失败,那么Cancel回滚
最后
以上就是风趣背包为你收集整理的分布式事务的背景的全部内容,希望文章能够帮你解决分布式事务的背景所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复