分布式事务(6种)

什么是事务?

就是一系列操作 要么同时成功 要么同时失败 为了保证这一系列的操作 必须同时满足四大特性

分布式事务?

比方说下单操作 涉及到很多环节 优惠券模块 积分模块等 某一个模块失效了 别的成功了就会出问题 分布式事务就是要保证大家一起都成功

常见的几种方案:

1.两段式提交(2pc)

通过消息中间件协调多个系统 比如有AB两个事务 中间件先问A准备好了吗 A说准备好了 问B准备好了吗 B说准备好了 然后A提交 B提交 如果有一个提交失败了 那么就全都回滚

2.三段式提交(3pc)

在两阶段提交第一阶段和第二阶段插入了一个准备阶段 保证在最后提交阶段之前各个节点的状态是一样的 并且还引入了超时机制

3.最终一致性

在这里插入图片描述

1.消息主动推送方先把消息发送给消息中间件 消息状态:待确认
2.消息中间件收到消息后 把消息持久化到消息存储里面
3.返回消息存储的结果 如果成功:执行操作 失败就不执行
4.执行业务操作 把执行的结果(成功还是失败)发送给消息中间件
5.消息中间件收到结果 开始判断 如果成功:更新消息状态为待发送 如果失败:删除消息存储里面对应的消息
6.向消息被动方发送消息
好处就是主动方事务执行成功了 消息一定会投递到被动方 如果提交失败了 被动方不会被打扰

4.最大努力通知

A系统调用B系统接口
B系统完成操作向A系统发起结果通知 若通知失败,则B系统按策略进行重复通知
A系统如果接收到结果通知修改状态。
A系统未如果接收到通知会主动调用B系统的接口查询结果。

5.TCC(try confirm cancel)

举例比如AB要给C转账80r
1.try
先进行业务检查 看看ABC的账户状态正常不
预留业务资源 把A的冻结金额增加30 B的冻结金额增加50
2.commit
真正执行业务
不需要业务检查了 上个阶段检查过了
只用上个try阶段预留的业务资源
3.cancel
释放try阶段预留的资源 比如B没有50块钱了 那就要对A账户进行Cancel操作

6.XA

分为两部分事务管理器和本地资源管理器
事务管理器负责各个本地资源的提交和回滚
本地资源管理器一般就是数据库

7.本地消息列表

核心思想就是将远程分布式事务拆分成一系列本地事务
比如买了一瓶水 在扣钱服务器上增加一个本地消息列表记录扣的钱和减去水的库存 这个时候有个定时任务去轮询这个本地消息表 把没有发送的消息 发送给库存服务器 到达库存服务器之后 先写库存服务器的消息表 然后减库存
也就是先判断一下 再执行

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值