分布式事务的背景

分布式事务的背景

常见事务:数据库事务

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回滚

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值