漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!————— 第二天 —————————————————假如没有分布式事务在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

点击上方“程序员小灰”,选择“置顶公众号”

有趣有内涵的文章第一时间送达!

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

—————  第二天  —————



漫画什么是分布式事务_分布式事务框架



漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架


————————————


漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

假如没有分布式事务


在一系列微服务系统当中,假如不存在分布式事务,会发生什么呢?让我们以互联网中常用的交易业务为例子:

漫画什么是分布式事务_分布式事务框架

上图中包含了库存和订单两个独立的微服务,每个微服务维护了自己的数据库。在交易系统的业务逻辑中,一个商品在下单之前需要先调用库存服务,进行扣除库存,再调用订单服务,创建订单记录。

正常情况下,两个数据库各自更新成功,两边数据维持着一致性。


漫画什么是分布式事务_分布式事务框架

但是,在非正常情况下,有可能库存的扣减完成了,随后的订单记录却因为某些原因插入失败。这个时候,两边数据就失去了应有的一致性。

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

什么是分布式事务?


分布式事务用于在分布式系统中保证不同节点之间的数据一致性。分布式事务的实现有很多种,最具有代表性的是Oracle Tuxedo系统提出的XA分布式事务协议。


XA协议包含两阶段提交(2PC)三阶段提交(3PC)两种实现,这里我们重点介绍两阶段提交的具体过程。

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架

在魔兽世界这款游戏中,副本组团打BOSS的时候,为了更方便队长与队员们之间的协作,队长可以发起一个“就位确认”的操作:



漫画什么是分布式事务_分布式事务框架

当队员收到就位确认提示后,如果已经就位,就选择“是”,如果还没就位,就选择“否”



漫画什么是分布式事务_分布式事务框架

当队长收到了所有人的就位确认,就会向所有队员们发布消息,告诉他们开始打BOSS。



漫画什么是分布式事务_分布式事务框架

相应的,在队长发起就位确认的时候,有可能某些队员还并没有就位:

漫画什么是分布式事务_分布式事务框架



漫画什么是分布式事务_分布式事务框架



漫画什么是分布式事务_分布式事务框架

以上就是魔兽世界当中组团打BOSS的确认流程。这个流程和XA分布式事务协议的两阶段提交非常相似。


那么XA协议究竟是什么样子呢?在XA协议中包含着两个角色:事务协调者事务参与者。让我们来看一看他们之间的交互流程:


第一阶段:


漫画什么是分布式事务_分布式事务框架

在XA分布式事务的第一阶段,作为事务协调者的节点会首先向所有的参与者节点发送Prepare请求。


在接到Prepare请求之后,每一个参与者节点会各自执行与事务有关的数据更新,写入Undo Log和Redo Log。如果参与者执行成功,暂时不提交事务,而是向事务协调节点返回“完成”消息。

当事务协调者接到了所有参与者的返回消息,整个分布式事务将会进入第二阶段。



第二阶段:


漫画什么是分布式事务_分布式事务框架


在XA分布式事务的第二阶段,如果事务协调节点在之前所收到都是正向返回,那么它将会向所有事务参与者发出Commit请求。


接到Commit请求之后,事务参与者节点会各自进行本地的事务提交,并释放锁资源。当本地事务完成提交后,将会向事务协调者返回“完成”消息。


当事务协调者接收到所有事务参与者的“完成”反馈,整个分布式事务完成。



以上所描述的是XA两阶段提交的正向流程,接下来我们看一看失败情况的处理流程:

第一阶段:


漫画什么是分布式事务_分布式事务框架

第二阶段:

漫画什么是分布式事务_分布式事务框架


在XA的第一阶段,如果某个事务参与者反馈失败消息,说明该节点的本地事务执行不成功,必须回滚。


于是在第二阶段,事务协调节点向所有的事务参与者发送Abort请求。接收到Abort请求之后,各个事务参与者节点需要在本地进行事务的回滚操作,回滚操作依照Undo Log来进行。


以上就是XA两阶段提交协议的详细过程。


漫画什么是分布式事务_分布式事务框架

漫画什么是分布式事务_分布式事务框架


XA两阶段提交的不足


XA两阶段提交究竟有哪些不足呢?


1.性能问题

XA协议遵循强一致性。在事务执行过程中,各个节点占用着数据库资源,只有当所有节点准备完毕,事务协调者才会通知提交,参与者提交后释放资源。这样的过程有着非常明显的性能问题。

2.协调者单点故障问题

事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,参与者收不到提交或是回滚通知,参与者会一直处于中间状态无法完成事务。


3.丢失消息导致的不一致问题。

在XA协议的第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。

如果避免XA两阶段提交的种种问题呢?有许多其他的分布式事务方案可供选择:


1.XA三阶段提交

XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段,并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求,会自动进行本地commit。这样有效解决了协调者单点故障的问题。但是性能问题和不一致的问题仍然没有根本解决。


2.MQ事务

利用消息中间件来异步完成事务的后一半更新,实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。


3.TCC事务

TCC事务是Try、Commit、Cancel三种指令的缩写,其逻辑模式类似于XA两阶段提交,但是实现方式是在代码层面来人为实现。


漫画什么是分布式事务_分布式事务框架


几点补充:


.本漫画纯属娱乐,还请大家尽量珍惜当下的工作,切勿模仿小灰的行为哦。


—————END—————


漫画什么是分布式事务_分布式事务框架



喜欢本文的朋友们,欢迎长按下图关注订阅号程序员小灰,收看更多精彩内容

漫画什么是分布式事务_分布式事务框架


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203960.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win32创建窗口函数(windows程序内部运行机制)

    win32创建窗口函数(windows程序内部运行机制)

    2021年11月19日
    45
  • WLS

    WLS来源:https://docs.o-ran-sc.org/projects/o-ran-sc-o-du-phy/en/latest/wls-lib.htmlWls_lib是英特尔开元的一个无线服务

    2022年8月3日
    8
  • 震荡波病毒原代码(勒索病毒源代码)

    #include#include#include#include#include#defineNORM”/033[00;00m”#defineGREEN”/033[01;32m”#defineYELL”/033[01;33m”#defineRED”/033[01;31m”#defineBANNERGREEN”[%%]”YELL”mandrag

    2022年4月14日
    80
  • python pyc文件使用_python怎么打开pyc文件

    python pyc文件使用_python怎么打开pyc文件首先使用百度搜索“ultraEdit”,进入到如图所示的官网下载文件。进入到ultraEdit官网的下载界面,我们选择如图所示的试用版本下载,我们进入到具体的下载界面后,点击下载中文安装版。下载好,我们使用鼠标左键双击软件安装包,进入到安装界面后点击安装,使用默认安装就可以了,无需修改安装文件路径。安装好了后,我们在电脑桌面使用鼠标左键双击ultraEdit的快捷方式,打开后进入到ultraEdi…

    2022年6月24日
    25
  • 微信小程序中-[渲染层网络层错误] pages/card/card.wxss 中的本地资源图片无法通过 WXSS 获取-解决办法

    微信小程序中-[渲染层网络层错误] pages/card/card.wxss 中的本地资源图片无法通过 WXSS 获取-解决办法1、报错原由微信小程序使用background-image运行时报错pages/index/index.wxss中的本地资源图片无法通过WXSS获取,可以使用网络图片,或者base64,或者使用标签。小程序样式中不允许小程序路径2、解决方法1.使用图片的网络路径background:url(‘http://1812.img.pp.sohu.com.cn/images/blog/2009/11/18/18/8/125b6560a6ag214.jpg’);2.base64将图

    2022年6月24日
    47
  • usb眼图测试方法_USB4.0

    usb眼图测试方法_USB4.01、现象HUB芯片电源噪声所引起;USBHUB芯片电压偏置电阻不合适所引起。2、参考电路3、原因分析在眼图测试时发现有一个USB口的眼图有抖动碰到眼图模板,当时经过千辛万苦,屡试不成,都未找到具体原因。只能确定眼图的抖动可能由于电源的噪声所引起,后续多次更换电源的滤波参数和割PCB后才找到由于一路电源1.8VPLL的布局所引起。真是众里寻她千百度,暮然回首,尽在一个HUBcore电源的滤波未做好。未通过模板时眼图如下图(未做任何调试):未通过模板时所对应的PCB布局..

    2025年6月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号