大数据分布式事务的深入理解?

        在一个大数据系统内部分布式事务无处不在,但凡一个任务分布到多台机器上执行就会涉及到分布式事务的场景,分布式事务一直以来都是分布式系统比较难以解决的问题。

        事务的理解,比如你要将账户A转1块钱到账户B中,那么这个行为在执行时会被拆分成两个步骤,第一步是将A账户扣掉1块钱,第二步就是将B账户加上1块钱;但是这两个步骤的特点是:要么都执行成功,要么都执行失败,不能存在一个成功一个失败的情况。我们把这种多个步骤要么同时执行成功,要么同时执行失败,不允许出现中间状态的操作就叫做事务。

        本地事务的理解,拿上面的转账例子来说,如果刚好A账户和B账户在同一家银行的同一个数据库里,那么他就满足了一个本地事务的基本条件;也就是说我要执行这两个账户的加减操作只需要在一个程序中就能完成,而且这两个操作彼此之间的顺序和结果是可知的,那么我们在程序内部就可以很容易实现这个事务操作;

        但是如果A账户跟B账户分别在两家不同银行的不同数据库中就没有办法做到像刚才那样在同一个程序里同时去操作A账户和B账户了,我们只能先在A账户对应的银行进行第一步操作,然后再在B账户对应的银行里进行第二步操作,但还会有个问题需要注意那就是操作A账户跟操作B账户这两个操作彼此之间的结果和顺序是不可见的,而这就是分布式事务的场景;此时就只能找一个中间人来帮忙协调这个事情,而这个中间人就是银联,于是我们只需要把转账这个行为告诉银联,然后银联来具体负责向A银行账户扣钱再去B银行的账户加钱;但是这个过程其实相比于刚才的本地事务要复杂的多,因为涉及到了三方的沟通,银行A、银行B、银联,这里面一旦有某一环节处理不好就容易导致A、B账户金额的不一致;那么为了保证分布式事务的可靠性就出现了两阶段提交和三阶段提交的实现方案。

        两阶段提交就是把这个多方沟通协调的过程根据沟通顺序划分为两个阶段;提交就是把写在内存中的数据再次写入到磁盘中;回滚是把在内存中修改的数据进行撤销。A账户跨行向B账户转账,第一阶段为银联收到转账申请后先向A账户所在银行发起扣钱操作,A只执行不提交也就是只在内存中对金额进行扣减但是不写入到磁盘中然后把执行成功的消息告诉银联,接着银联再向B的所在的银行发起加钱操作也只是在内存中对账户金额进行增加并不写入磁盘,然后再把执行成功的消息也告诉银联,第一阶段也可称为投票阶段,如果A、B操作都成功则投票成功,否则为失败。然后是分布式事务的第二个阶段,当银联分别收到A、B银行的操作反馈之后,确保所有步骤都没有问题便开始向A银行和B银行发出提交通知,让A银行和B银行分别将刚才在内存中修改的金额写入到磁盘中进行持久化,而这个阶段就叫做事务的提交阶段。如果两个阶段其中任何一个阶段一旦出现了某个操作的失败,那么银联就会在第一时间想办法不让A、B的账户余额变化写入磁盘中,就是进行事务的回滚操作,两阶段提交是用来保证分布式事务一致性的一种策略,但也有一些不完善的地方,然后就有三阶段提交。

        三阶段提交比两阶段提交多了一个事务开始前的询问阶段,比如当银联决定开始对A、B账户进行转账操作前,为了严谨他会先询问A、B账户所在的银行当前是否可以执行对应账户余额的增减操作,如果当前A银行或者B银行的数据据刚好在维护或者升级,那么就可以第一时间通过这个第一阶段的询问来得知,这样就可以提前终止本次转账操作,这么做的好处在于提前对各个要通讯的对象系统状况有个初步的了解,如果通信对象存在网络故障、系统负载过高等问题就可以提前知道避免了后续无谓的操作,而剩下的两个阶段跟两阶段提交的步骤基本一致,三阶段提交还优化了两阶段提交的超时机制,比如在原来等银联发送提交通知给A、B银行时如果协调者银联挂了,那么银行A和银行B就只能在那里等待并等银联恢复通信;而三阶段提交的机制则优化了这一点,如果最后一个阶段银联因为各种原因无法正常通信超过一段等待时间后那么银行A和银行B就可以在不用收到银联提交通知的情况下自己完成各自的提交操作,从而进一步提高分布式事务的一致性成功率。

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

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

相关文章

东方博宜 1553. 数列求和

东方博宜 1553. 数列求和 #include<iostream> using namespace std; int main() {int n ; cin >> n ;int sum ;sum 0 ;for(int i 1 ; i < n ; i){sum i*i ;}cout << sum ; }

Spring-ThreadLocal内存泄漏原因及解决办法

ThreadLocal原理回顾 ThreadLocal的原理&#xff1a;每个Thread内部维护着一个ThreadLocalMap&#xff0c;它是一个Map。这个映射表的Key是一个弱引用&#xff0c;其实就是ThreadLocal本身&#xff0c;Value是真正存的线程变量Object。 也就是说ThreadLocal本身并不真正存储线…

Vastbase编程利器:PL/pgSQL原理简介

PL/pgSQL是Vastbase提供的一种过程语言&#xff0c;在普通SQL语句的使用上增加了编程语言的特点&#xff0c;可以用于创建函数、存储过程、触发器过程以及创建匿名块等。 本文介绍Vastbase中PL/pgSQL的执行流程&#xff0c;包括PL/pgSQL的编译与运行。 1、编译 PL/pgSQL的编译…

基于深度学习的心律异常分类算法

基于深度学习的心律异常分类系统——算法设计 第一章 研究背景算法流程本文研究内容 第二章 心电信号分类理论基础心电信号产生机理MIT-BIH 心律失常数据库 第三章 心电信号预处理心电信号噪声来源与特点基线漂移工频干扰肌电干扰 心电信号读取与加噪基于小波阈值去噪技术的应用…

如何简单的复制dataframe列

今天在做项目的时候无意中发现了dataframe的一个特性&#xff0c;就是批量复制列的功能&#xff0c;而且列名是一样的&#xff0c;一般情况下&#xff0c;如果用df[xxx] xxx的方式&#xff0c;是没办法复制多个列名一样的列的&#xff0c;操作一次只会覆盖上次的赋值&#xff…

金三银四-探秘银行科技部:稳定职业背后的挑战 | 不敢跳槽啦 | 好慌

小伙伴们好&#xff0c;我是「 行走的程序喵」&#xff0c;感谢您阅读本文&#xff0c;欢迎三连~ &#x1f63b; 【Java基础】专栏&#xff0c;Java基础知识全面详解&#xff1a;&#x1f449;点击直达 &#x1f431; 【Mybatis框架】专栏&#xff0c;入门到基于XML的配置、以…

数据结构——二叉搜索树详解

一、二叉搜索树定义 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1.非空左子树上所有节点的值都小于根节点的值。 2.非空右子树上所有节点的值都大于根节点的值。 3.左右子树也都为二叉搜索树。 如下图所示&#xff1a…

浏览器扩展程序增加 vue_dev_tools 调试工具

1、引言 在做 Vue 项目的开发时&#xff0c;我们经常需要在页面上调试&#xff0c;接下来介绍如何在浏览器扩展程序增加 vue_dev_tools 调试工具。 Download the Vue Devtools extension for a better development experience 翻译&#xff1a;下载Vue Devtools扩展以获得更好…

1.6.1 变换

我们要想改变物体的位置&#xff0c;现有解决办法是&#xff0c;每一帧改变物体的顶点并且重配置缓冲区从而使物体移动&#xff0c;但是这样太繁琐&#xff0c;更好的解决方式是使用矩阵&#xff08;Matrix&#xff09;来更好的变换&#xff08;Transform&#xff09;一个物体。…

数据结构——快速排序的三种方法和非递归实现快速排序

数据结构——快速排序的三种方法和非递归实现快速排序&#xff08;升序&#xff09; 快速排序的单趟排序hoare法挖坑法前后指针法 快速排序的实现key基准值的选取快速排序代码快速排序的优化 快速排序&#xff08;非递归&#xff09; 快速排序的单趟排序 hoare法 思路:从给定…

后端前行Vue之路(二):模版语法之插值与指令

1.概述 Vue.js的模板语法是一种将Vue实例的数据绑定到HTML文档的方法。Vue的模板语法是一种基于HTML的扩展&#xff0c;允许开发者将Vue实例中的数据绑定到HTML元素&#xff0c;以及在HTML中使用一些简单的逻辑和指令。Vue.js 基于 HTML 的模板语法允许开发者声明式地将 DOM 绑…

Windows11系统缺少解决办法

一.缺少msvcp120.dll 下载Mircrosoft Visual C 2015等系统关键组件 Microsoft Visual C 2015-2022 Redistributable (x86) - 14.34.31931 Installation Error etc.. - Microsoft Q&A 二.缺少python27.dll 重新下载python2.7进行安装(选择Windows x86-64 MSI installer)…

三级等保建设技术方案-Word

1信息系统详细设计方案 1.1安全建设需求分析 1.1.1网络结构安全 1.1.2边界安全风险与需求分析 1.1.3运维风险需求分析 1.1.4关键服务器管理风险分析 1.1.5关键服务器用户操作管理风险分析 1.1.6数据库敏感数据运维风险分析 1.1.7“人机”运维操作行为风险综合分析 1.2…

物联网(IoT)常用的通信协议

物联网&#xff08;IoT&#xff09;的通信协议是物联网设备之间交换数据的规则和标准。这些协议对于确保设备能够有效、安全地通信至关重要。下面是物联网通信协议的概述&#xff1a; 1. MQTT&#xff08;消息队列遥测传输&#xff09; 概述&#xff1a;MQTT是一种轻量级的发…

IP如何异地共享文件?

【天联】 组网由于操作简单、跨平台应用、无网络要求、独创的安全加速方案等原因&#xff0c;被几十万用户广泛应用&#xff0c;解决了各行业客户的远程连接需求。采用穿透技术&#xff0c;简单易用&#xff0c;不需要在硬件设备中端口映射即可实现远程访问。 异地共享文件 在…

php程序员如何成为编程高手

php程序员如何成为编程高手? 成为一名编程高手&#xff0c;无论是对于PHP程序员还是其他编程语言的开发者来说&#xff0c;都需要持续学习、实践和不断挑战自己。下面是一些具体的建议&#xff0c;帮助PHP程序员提升技术水平&#xff0c;向编程高手迈进&#xff1a; 1. 深入…

腾讯云2核2G服务器CVM S5和轻量应用服务器优惠价格

腾讯云2核2G服务器多少钱一年&#xff1f;轻量服务器61元一年&#xff0c;CVM 2核2G S5服务器313.2元15个月&#xff0c;腾讯云2核2G服务器优惠活动 txyfwq.com/go/txy 链接打开如下图&#xff1a; 腾讯云2核2G服务器价格 轻量61元一年&#xff1a;轻量2核2G3M、3M带宽、200GB月…

AXI Memory Mapped to PCI Express 学习笔记(五)—— Test Bench

本文包含有关Vivado Design Suite环境中提供的测试平台&#xff08;Test Bench&#xff09;的信息。 一、Endpoint的Root Port模型测试平台 PCI Express Root Port Model是一个强大的测试平台环境&#xff0c;它提供了一个测试程序接口&#xff0c;可以与提供的PIO设计&#…

洛谷_P4995 跳跳!_python写法

P4995 跳跳&#xff01; - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) n int(input()) data list(map(int,input().split())) data.append(0) data.sort()sum 0 l 0 r len(data)-1 flag 1 while l<r:sum (data[l]-data[r])**2if flag:l 1flag 0else:r - 1flag 1…

LinkedList讲解指南

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…