首页 > 其他分享 >七种常见的分布式事务

七种常见的分布式事务

时间:2023-02-27 00:44:07浏览次数:27  
标签:阶段 事务 七种 消息 提交 主动 分布式

分布式事务:在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。

七种:2PC,3PC,TCC,Saga,本地事务表,MQ事务消息,最大努力通知。

1 2PC

两阶段提交,将事物的提交过程分为资源准备阶段和资源提交阶段,并且由十五协调者来协调事物参与者,如果准备阶段所有事物参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。

2 3PC:

3PC,三阶段提交协议,是二阶段提交协议的改进版本,三阶段提交有两个改动点:

(1)在协调者和参与者中都引入超时机制
(2)在第一阶段和第二阶段中插入一个准备阶段,保证了在最后提交阶段之前各参与节点的状态是一致的。
所以3PC会分为3个阶段,CanCommit 准备阶段、PreCommit 预提交阶段、DoCommit 提交阶段。

3 TCC:Try Confirm Cancel,是应用层的两段提交,对代码侵入性强

4 Saga事务:核心思想是将长事务拆分成多个本地短事务并依次正常提交,如果所有短事务均执行成功,那么分布式事务提交;如果出现某个参与者执行本地事务失败,使分布式事务回到最初的状态。Saga事务协议如下:

(1)每个Saga事务由一系列幂等的有序子事务(sub-transaction)Ti组成。

(2)每个Ti都有对应的幂等补偿动作Ci,补偿动作用于撤销Ti造成的结果。

5 本地消息表:将分布式事务拆分成本地事务进行处理,角色:事务主动发起方和事务被动发起方。事务主动发起方需要额外新建事务消息表,并在本地事务中完成事务处理和记录事务消息,并轮询事务消息表的事务发送事务消息,事务被动方基于消息中间件消费事务消息表中的事务。这样可以避免以下两种情况导致的数据不一致性:业务处理成功、事务消息发送失败;业务处理失败,消息发送成功。

6 MQ事务消息的执行流程:基于MQ的分布式事务方案本质上是对本地消息表的封装,整体流程与本地消息表一致,唯一不同的就是将本地消息表存在了MQ内部,而不是业务数据库中。

7 最大努力通知:最大努力通知也称为定期校对,是对MQ事务方案的进一步优化。它在事务主动方增加了消息校对的接口,如果事务被动方没有接收到主动方发送的消息,此时可以调用事务主动方提供的消息校对的接口主动获取。
在可靠消息事务中,事务主动方需要将消息发送出去,并且让接收方成功接收消息,这种可靠性发送是由事务主动方保证的;但是最大努力通知,事务主动方仅仅是尽最大努力(重试,轮询....)将事务发送给事务接收方,所以存在事务被动方接收不到消息的情况,此时需要事务被动方主动调用事务主动方的消息校对接口查询业务消息并消费,这种通知的可靠性是由事务被动方保证的。
所以最大努力通知适用于业务通知类型,例如微信交易的结果,就是通过最大努力通知方式通知各个商户,既有回调通知,也有交易查询接口。

参考:https://blog.csdn.net/a745233700/article/details/122402303

 

标签:阶段,事务,七种,消息,提交,主动,分布式
From: https://www.cnblogs.com/xing54321/p/17149845.html

相关文章

  • 7.2-总线性能和总线事务
    总线的性能参数总线频率:反映总线工作速率(f),通常单位是MHz,类比于车速总线宽度:数据总线的位数,类似于告诉路有几条车道,单位是b是微型计算机的重要指标,通常与处理器的字长有......
  • 03_06_JavaWeb||day05_JDBC基础【重点掌握】||day05_1_JDBC基础【重点掌握第五点和会
    今日内容【重点掌握】JDBC基本概念快速入门对JDBC中各个接口和类详解1.JDBC:概念:Java数据库连接(JavaDataBaseConnectivity)Java语言操作数据库JDBC本质:其实是官方......
  • 03_05_JavaWeb||day04_MySQL多表&事务||day04_1_MySQL多表&事务
    今日内容多表查询【重点】事务【知道】DCL【了解】1.多表查询:查询语法:select列名列表from表名列表where....准备sql#创建部门表CREATETABLEdept(idI......
  • Gaussdb(for opengauss)分布式-核心技术
    一、产品简介GaussDB(foropenGauss)是华为公司自主研发的新一代企业级分布式关系型数据库,基于Shared-Nothing架构,同时支持x86和鲲鹏计算架构,提供高吞吐强一致性事务处理......
  • redis(11)事务秒杀案例
    秒杀案例描述现在有1个秒杀的功能,1个原来价值5000元的手机现在搞活动,降价到1块钱,做秒杀活动。库存就10个,假设有10000人抢购。目前逻辑是:抢到了商品库存就减1,然后把用户id......
  • redis(10)事务和锁机制秒杀
    Redis事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis事务的主......
  • 《分布式技术原理与算法解析》学习笔记Day23
    分布式数据复制我们在进行分布式数据存储设计时,通常会考虑对数据进行备份,以提高数据的可用性和可靠性,“数据复制技术”就是实现数据备份的关键技术。什么是数据复制技术?......
  • Spring事务——传播性
    传播性事务传播行为是为了解决业务层方法之间互相调用的事务问题,当一个事务方法被另一个事务方法调用时,事务该以何种状态存在?例如新方法可能继续在现有事务中运行,也可能开......
  • 事务传播性——代码演示版超级详细
    事务属性传播性传播性描述REQUIRED如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务(默认)SUPPORTS如果当前存在事务,则加入该事务;如果当前......
  • Golang基于Mysql分布式锁实现集群主备
    背景集群中如果需要主备,可以基于Redis、zk的分布式锁等实现,本文将介绍如何利用Mysql分布式锁进行实现。原理数据库中包含数据字段(此处为Master的主机名)、版本号和上......