78、分布式事务解决方案

news2024/11/22 20:38:37

分布式事务解决方案

XA规范: 分布式事务规范,定义了分布式事务模型

四个角色: 事务管理器(协调者TM)、资源管理器(参与者RM),应用程序AP,通信资源管理器CRM

全局事务:一个横跨多个数据库的事务,要么全部提交、要么全部回滚

JTA事务时java对XA规范的实现,对应JDBC的单库事务

两阶段协议:
在这里插入图片描述
1、第一阶段 ( prepare ):每个参与者执行本地事务但不提交,进入 ready 状态,并通知协调者已经准备就绪

2、第二阶段 (commit) :当协调者确认每个参与者都 ready 后,通知参与者进行 cmmit 操作;如果有参与者 fail,则发送 rollback 命令,各参与者做回滚。

问题:

  • 单点故障:一旦事务管理器出现故障,整个系统不可用(参与者都会阻塞住)
  • 数据不一致::在阶段二,如果事务管理器只发送了部分 commit 消息,此时网络发生异常,那么只有部分参与者接收到 commit 消息,也就是说只有部分参与者提交了事务,使得系统数据不一致。
  • 响应时间较长:参与者和协调者资源都被锁住,提交或者回滚之后才能释放
  • 不确定性:当协事务管理器发送 commit 之后,并且此时只有一个参与者收到了 commit,那么当该参与者与事务管理器同时宕机之后,重新选举的事务管理器无法确定该条消息是否提交成功。

三阶段协议:主要是针对两阶段的优化,解决了2PC单点故障的问题,但是性能问题和不一致问题仍然没有根本解决

在这里插入图片描述
引入了超时机制解决参与者阻塞的问题,超时后本地提交,2pc只有协调者有超时机制

  • 第一阶段:CanCommit阶段,协调者询问事务参与者,是否有能力完成此次事务。

    如果都返回yes,则进入第二阶段
    有一个返回no或等待响应超时,则中断事务,并向所有参与者发送abort请求

  • 第二阶段:PreCommit阶段,此时协调者会向所有的参与者发送PreCommit请求,参与者收到后开始执行事务操作。参与者执行完事务操作后(此时属于未提交事务的状态),就会向协调者反馈”Ack”表示我已经准备好提交了,并等待协调者的下一步指令。

  • 第三阶段:DoCommit阶段,在阶段二中如果所有的参与者节点都返回了Ack,那么协调者就会从”预提交状态”转变为”提交状态”。然后向所有的参与者节点发送”doCommit"请求,参与者节点在收到提交请求后就会各自执行事务提交操作,并向协调者节点反馈”Ack”消息,协调者收到所有参与者的Ack消息后完成事务。相反,如果有一个参与者节点未完成PreCommit的反馈或者反馈超时,那么协调者都会向所有的参与者节点发送abort请求,从而中断事务。

TCC (补偿事务) : Try、Confirm、Cancel

  • 针对每个操作,都要注册一个与其对应的确认和补偿(撤销)操作

  • Try操作做业务检查及资源预留,Confirm做业务确认操作,Cancel实现一个与Try相反的操作即回滚操作。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中Confirm/Cancel操作若执行失败,TM会进行重试

  • TCC模型对业务的侵入性较强,改造的难度较大,每个操作都需要有 try、confirm、cance1三个接口实现

  • confirm 和 cancle 接口还必须实现幂等性

消息队列的事务消息:

  • 发送prepare消息到消息中间件
  • 发送成功后,执行本地事务
    如果事务执行成功,则commit,消息中间件将消息下发至消费端 (commit前,消息不会被消费)。
    如果事务执行失败,则回滚,消息中间件将这条prepare消息删除
  • 消费端接收到消息进行消费,如果消费失败,则不断重试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/773047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

远程大文件传输工具该怎么选择?

随着网络技术的不断进步,越来越多的人需要在不同地点之间传输文件。这时候,我们便需要使用远程文件传输工具。 1、什么是远程文件传输工具呢? 简单来说,它是一种能够帮助我们在不同设备之间传输文件的工具。通常情况下&#xff0…

Makefile:6: *** missing separator. Stop.

Makefile:2: *** missing separator. Stop. Windows下用VS CODE编写makefile文件,编译报出这个错误 可以查看一下VS CODE左下角,如果是下图“空格:4”这样,需要更改一下。 在“空格:4”上左键单击一下,在…

C# webform alert弹出内容换行

用 ” \n “(双斜杠哈,发布出去以后csdn只显示一个斜杠)换行,亲测有效果,其中saveNum,lose,sbnr 都是参数,sbnr是输入的换行内容,代码如下: ClientScript.RegisterStartupScript(this.GetType(), "ale…

小研究 - 面向 Java 的高对抗内存型 Webshell 检测技术(五)

由于 Web 应用程序的复杂性和重要性, 导致其成为网络攻击的主要目标之一。攻击者在入侵一个网站后, 通常会植入一个 Webshell, 来持久化控制网站。但随着攻防双方的博弈, 各种检测技术、终端安全产品被广泛应用, 使得传统的以文件形式驻留的 Webshell 越来越容易被检测到, 内存…

【天梯赛集训】7.18习题集

目录 7-1 递归 递推 7-2 函数的递归调用 7-3 A010 递归练习1 7-4 A011 递归练习2 7-5 A012 递归练习3 7-6 PG009 循环与递归 7-7 计算Fibonacci数列—递归 7-8 整数转换为字符串 7-9 简单的归并 AC: 9 / 9 用时:1 h 4 min 递归专题。 7-1 递归 递推 #inc…

Go语言的发展历史

Go语言的Logo 作为程序员,我们每天会用到大量的编程语言,打开界面会碰到很多logo,在正式学习Go语言之前,我们先来了解一下Go语言的Logo。也就是它,下面这个动物,gopher [ˈɡoʊfər] ,囊地鼠,…

TinyKv流程梳理三

split流程 处理协程启动 func (bs *Raftstore) startWorkers(peers []*peer) {ctx : bs.ctxworkers : bs.workersrouter : bs.routerbs.wg.Add(2) // raftWorker, storeWorkerrw : newRaftWorker(ctx, router)go rw.run(bs.closeCh, bs.wg)sw : newStoreWorker(ctx, bs.store…

Java解决new date出现的时区问题(差8小时)

1、设置当前时区 SimpleDateFormat format new SimpleDateFormat("yyyy/MM/dd"); format.setTimeZone(TimeZone.getTimeZone("GMT8:00")); 2、设置全局时区 创建一个全局配置类,用于配置项目全局时区。 这样就不用专门在各个地方设置时区了…

2023年下半年软考高项考试时间及安排

信息系统项目管理师一般情况下分别于上半年5月份和下半年11月份考试,2023年信息系统项目管理师上半年考试时间为2023年5月27日,下半年考试时间为2023年11月4日。 信息系统项目管理师考试报名时间: 下半年8月左右开始,各地区时间不…

【npm】基于vite制作自己的npm包+ts【超详细】

前言 头脑一热想做自己的npm包,但是又无从下手,于是我找到了度娘…看着别人做挺简单,自己上手真难受。一路的坑。注意事项也挺多的,所以我特地详细介绍如何制作自己的npm包,并附上ts类型检测。提升用户体验感。 初次踩…

如何编写高质量的测试计划

1.1目的 简述本计划的目的,旨在说明各种测试阶段任务、人员分配和时间安排、工作规范等。 测试计划在策略和方法的高度说明如何计划、组织和管理测试项目。测试计划包含足够的信息使测试人员明白项目需要做什么是如何运作的。另外,清晰的文档结构能使任…

three.js学习2(基础)

目录 前言: 参考文档(gsap使用): 目标一、使物体移动、旋转 Ⅰ、设置时钟方式 Ⅱ、使用gsap 1、安装 2、引入使用 目标二、自适应 目标三、双击全屏或者退出全屏 前言: 上面学习了three.js在页面上的简单显示…

【Java项目实战-牛客社区】--idea maven配置

第一 IDEA集成Maven插件,并配置Maven 以下步骤中,重点关注红色方框的配置 第二 IDEA 创建 Maven 项目 步骤一:创建模块,选择Maven,点击Next 步骤二:填写模块名称,坐标信息,点击finis…

vue2 实现后台管理系统左侧菜单联动实现 tab根据路由切换联动内容,并支持移动端框架

效果图: pc端 移动端 由于代码比较多,我这里就不一一介绍了,可以去我的git上把项目拉下来 git地址https://gitee.com/Flechazo7/htglck.git 后台我是用node写的有需要的可以评论联系

EDM营销过时了?不,这才是跨境电商成功的最佳工具

根据最近的一项研究,电子邮件仍然是最具说服力的营销工具和沟通形式之一。虽然即时通讯等其他渠道正在扎根,但电子邮件仍然是影响最深远的商业交流形式。到2023年,每天发送和接收的电子邮件总数可能会超过333亿封。所以,如果您希望…

Tensorflow和Keras安装流程,jupyter无法使用keras解决方案

Tensorflow和Keras安装流程,jupyter无法使用keras解决方案 1.Base: anaconda https://www.anaconda.com/download 2.安装python3.8,Tensorflow2.13.0,Keras2.13.1 –创建conda环境-在Anaconda Prompt中输入命令, conda create -n tensorfl…

安森美深力科汽车空调自动控制方案,助力推动能效、安全、节能、环保

NCV4266-2CST50T3G 安森美深力科汽车空调自动控制方案,助力推动能效、安全、节能、环保 汽车智能化、自动驾驶、电动汽车/汽车功能电子化等趋势的推进正使汽车变得更加安全、舒适、环保和节能,是创新的关键。为自动驾驶、汽车功能电子化、传统动力总成…

[JavaScript游戏开发] 2D二维地图绘制、人物移动、障碍检测

系列文章目录 第一章 2D二维地图绘制、人物移动、障碍检测 文章目录 系列文章目录前言一、列计划1.1、目标1.2、步骤 二、使用步骤2.1、准备素材(图片):草坪、人物(熊猫)、障碍(石头)2.2、初始化布局(表格),边距设置为0,无边框,设…

ASFF Learning Spatial Fusion for Single-Shot Object Detection 论文学习

1. 解决了什么问题? 目标检测取得了显著成绩,但是检测不同尺度的目标仍然是一个挑战。金字塔或多层级特征是解决目标检测中尺度变化的常用手段。但对于单阶段目标检测器而言,各特征尺度之间不一致性制约了算法的表现。与图像金字塔相比&…

Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

知识付费平台主要指的是能够通过付费来满足用户知识需求的平台,用户可以通过该平台来消费知识或者开展知识买卖等行为。 此处的平台是一个广义的概念,可以是微信小程序或者论坛,也可以是网页或者手机APP,等,就我国的情…