浅谈两阶段提交和三阶段提交

DEV-C++调试设置        昨天用C/C++去考了CSP,结果用DEV-C++调试总是闪退,按照我的记忆打开了调试参数,迷迷糊糊搞了一通,还是没办法调试,难受了几个小时。所以今天痛下决心,一定要写下DEV-C++设置调试的过程,警示自己! 解决步骤 1.打开DevC++找到上方工具栏 2.点击选择编译选项,再按下图所示设置即可 阅读详情

本文主要分为三个部分

第一部分阐述两阶段提交的原理和优缺点。

第二部分阐述三阶段提交的原理和优缺点。

第三部分阐述如何解决业务中最终一致性的问题。

 

一.两阶段提交

两阶段提交方法是用于分布式事务中用来完成事务操作的。

 

两阶段提交是一种思想,XA协议,TCC,Paxos,Raft都用到了这种思想。

 

这里先基于XA协议谈一下,因为我们一般提到的两阶段提交都是基于XA协议。

 

两阶段提交分为投票和提交两个阶段。

投票阶段,协调者向参与者发送事务请求,参与者进行操作并记录进日志,但不提交,并将操作结果通知协调者。

提交阶段,协调者收到参与者的操作结果后,如果都是成功的,就通知参与者提交。如果有不成功,就通知参与者回滚。

 

它的优点是原理简单,实现方便。

它的缺点是会出现单点故障,同步阻塞,数据不一致的问题。

 

由于XA协议会在第一阶段就锁定资源,所以会有一些性能问题。

 

同样运用到两阶段提交思想的TCC协议,则针对性能做了一些提升。

 

TCC也是一种两阶段提交方法,它的全称是Try,Confirm,Cancel。它分为预留阶段和确认阶段,预留阶段参与者要实现事务操作,确认和撤销操作。确认阶段,如果所有参与者确认成功,就确认操作,否则就实现撤销操作。

 

它是通过业务代码来实现的 。它本质上是一种补偿事务,就是他为每一个操作都注册一个确认和撤销的操作。这样可以减轻数据库压力,可以提升并发性能。

 

通俗的讲TCC协议就是把出现成功和失败后的应对操作都考虑到了,并用业务代码编写。

 

另外,两阶段提交会出现数据不一致的问题。

在第二阶段进行提交时,如果这时发生网络故障或者协调者发生了故障,导致只有一部分参与者收到消息进行提交,这时这个分布式系统就会出现不一致的问题。

 

二.三阶段提交

这时候又出现了三阶段提交方法,三阶段提交在二阶段提交的基础上引入了超时机制和准备机制,解决同步阻塞和改进数据不一致性的问题。

 

第一步

协调者向参与者询问是否可以执行事务操作。

 

第二步

协调者在得到参与者的回复后决定是否进行预提交。

如果进行预提交,参与者执行事务操作,记录事务日志,返回操作结果给协调者。

如果不进行预提交,参与者收到不提交的消息或者超时未接收到协调者的消息或者协调者没有收到参与者的响应,就中断事务操作。

 

第三步

协调者发送命令给所有参与者,执行提交或中断操作。

如果执行提交操作,参与者收到消息后正式提交事务,提交事务后,向协调者发送确认响应,协调者收到所有确认响应后,完成事务。

如果执行中断操作,参与者收到消息根据在预提交阶段记录的日志进行回滚,回滚后向协调者发送确认响应,协调者收到所有确认响应后,中断和结束事务。

 

三阶段提交的优点是解决了二阶段提交方法同步阻塞的问题,改善了二阶段提交的数据不一致性的问题。

 

三阶段提交的缺点和二阶段一样:

1.需要锁定资源,会降低系统性能。

2.仍然存在数据不一致性的问题,三阶段在最后提交阶段,如果协调者发出的中断命令,由参与者没有收到,参与者在超时后会自动提交事务,造成了数据不一致性。

 

三.既然两阶段提交和三阶段提交都是强一致性,怎么解决业务中的最终一致性问题?

通过分布式消息来确保事务最终一致性。

在 eBay 的分布式系统架构中,架构师解决一致性问题的核心思想就是:将需要分布式处理的事务通过消息或者日志的方式异步执行,消息或日志可以存到本地文件、数据库或消息队列中,再通过业务规则进行失败重试。

另外,建议在开发实现分布式系统,如果不是必须,尽量不要实现事务(ACID),可以考虑采用强一致性(两阶段提交和三阶段提交)或最终一致性。

 

参考

1.极客时间 《分布式技术原理与算法解析》

2.极客时间 《分布式协议与算法实战》

 

IEM模型,地表粗糙度模拟 利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟 立即下载

相关推荐

ROS2 Control实战:多机器人仿真与控制器管理

本文详细介绍了ROS2 Control在多机器人仿真中的应用,涵盖命名空间配置、控制器管理及性能优化。通过Gazebo仿真环境和ROS2 Control框架,开发者可以高效管理多个机器人的硬件抽象和控制器,实现资源隔离与平滑切换。文章还提供了常见问题排查和调试工具推荐,助力机器人开发实践。

u9v0w的博客 203

两阶段提交和三阶段提交的区别

两阶段提交协议包括预提交和提交两个阶段,而三阶段提交协议包括准备、提交和回滚三个阶段。例如,在两阶段提交协议中,如果协调者在预提交阶段发生故障,部分参与者已经提交了事务,而另一部分参与者由于无法与协调者通信而无法确认提交。两阶段提交和三阶段提交协议可以应用在主从数据库(Master-Slave Database)上,以实现在分布式环境下主从数据库之间的数据一致性。同样的,在三阶段提交协议中,尽管引入了准备阶段来解决部分阻塞等待问题,但仍然存在单点故障和网络故障等可能导致协议异常的情况。

小楠的博客 1657

如何设计ADAS系统功能状态机(一)

状态机模块在自动驾驶系统中扮演着关键的角色,它负责管理和控制各个功能的状态转换和行为执行。今天我们来聊聊如何设计自动驾驶系统的状态机。

supass2018的博客 1615

分布式事务:两阶段提交与三阶段提交

分布式基础知识 分布式的特点:分布性、对等性、并发性、缺乏全局时钟、故障总会发生 分布式环境下的各种问题:通讯异常、网络分区、成功失败超时三态、节点故障 事务一致性 数据库事务包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 分布式事务: 事务的参与者、支持事务的服务器、资源服务器以及事务管理器位于分布式系统的...

seowen的开发 小本子 1384

告别130MB/s瓶颈!用Zynq+NVMe实现1.2GB/s高速存储的PL数据分流实战

本文详细介绍了如何通过Zynq+NVMe实现1.2GB/s高速存储的PL数据分流方案,突破传统Zynq架构130MB/s的瓶颈。文章分享了PL直连NVMe的硬件架构设计、软件栈优化及性能调优实战技巧,帮助开发者实现高速数据流的稳定存储。

weixin_42653691的博客 372

TI IWR6843AOP雷达+DCA1000EVM数据采集:官方手册里的坑,我帮你踩完了

本文详细解析了TI IWR6843AOP雷达与DCA1000EVM数据采集实战中的12个关键细节,包括硬件连接陷阱、mmWave Studio隐藏设置、数据采集参数优化等,帮助开发者避开官方手册未提及的常见问题,提升数据采集效率和系统稳定性。

weixin_28366475的博客 1102

【分布式事务】三阶段提交和二阶段提交的区别

预备阶段的作用是降低失败概率,确保在超时或网络异常时,参与者可以基于预备阶段的结果自行决定提交或回滚,减少阻塞时间。2PC中,协调者必须收到所有参与者的明确“成功”消息后,才会通知提交;3PC通过增加预备阶段(PreCommit),让参与者先进行自检,确保自己能成功执行后续操作。如果直接增加默认提交,可能会导致部分参与者提交成功,而异常参与者回滚,造成数据不一致。3PC并没有根本解决2PC的问题,但通过预备阶段优化了系统的可用性和健壮性。2PC的目标是强一致性,默认提交会破坏这一目标。

m0_63011748的博客 332

从谱峰搜索到多项式求根:Root-MUSIC算法原理与MATLAB实践

本文深入解析Root-MUSIC算法在阵列信号处理中的原理与应用,通过多项式求根替代传统MUSIC算法的谱峰搜索,显著提升计算效率和精度。文章详细介绍了算法核心思想、MATLAB实现步骤及工程优化技巧,帮助读者掌握这一高效的DOA估计方法。

weixin_30832143的博客 80

面试题:两阶段提交与三阶段提交的区别?

但是其他部分未接到commit请求的机器则无法执行事务提交。),当协调者发生故障时,尤其是第二阶段,那么所有的参与者就会都处于锁定事务资源的状态中,而无法继续完成事务操作(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)此时,参与者都会在等待超时之后,2PC,两阶段提交,将事务的提交过程分为资源准备和资源提交两个阶段,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者预提交成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。

qq_64847107的博客 1854

FPGA 学习笔记:Vivado 工程更改FPGA 型号

FPGA 学习笔记:Vivado 工程更改FPGA 型号

坚韧与专注 1万+

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 403

二阶段提交和三阶段提交的区别

在doCommit节点,如果参与者收不到协调者的doCommit或者rebort请求时,会在等待超时的时候Commit。如果协调组发送的是abort,此时参与者执行了commit,则会造成数据不一致的情况。三阶段:第一阶段是CanCommit、第二阶段是PreCommit、第三阶段是doCommit。其实就是把二阶段提交的第一阶段准备提交又细分了一下。二阶段:第一阶段是准备阶段,第二阶段是提交阶段。1、同步阻塞,所有参与节点都是事务阻塞型的。二阶段提交和三阶段提交的区别。

weixin_44681865的博客 449

非结构化数据在大数据湖中的应用实践

想象一下,你正在整理一个杂乱的书房。有些书整整齐齐地放在书架上,每本书都有明确的标题、作者和出版日期——这些就是结构化数据,它们像数据库中的表格,有固定的格式和字段。但书房里还有更多东西:散落的照片、手写的笔记、录音带、视频光盘、甚至还有画作。这些物品没有固定的格式,每件都独一无二——这就是非结构化数据。在技术术语中,非结构化数据是指没有预定义数据模型或组织形式的信息。文本文档(Word、PDF、TXT)电子邮件和社交媒体内容图像和照片(JPG、PNG)音频文件(MP3、WAV)

软件工程实践的博客 361

无法列入分布式事务处理_浅谈分布式事务的几种解决方案(两阶段提交)

一起吃瓜什么是分布式事务对于我们耳熟能详的事务来讲应该是数据库操作的事务,针对简单业务或者架构的数据库事务操作我们不需要考虑分库分表、多服务节点请求的时候要满足单数据库服务的事务ACID特性是比较简单的一件事儿,而一旦业务变的复杂架构变的多样变的开始“分布”的时候,对应事务的保证就需要将“分布”的事务变的跟单机处理一样,所以,所谓分布式事务简而言之就是将分散的事务操作集中起来使得事务操作的数据看起...

weixin_39621495的博客 345

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【分布式】浅谈分布式事务及解决方案

【分布式】浅谈分布式事务及解决方案

blblccc 1996

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

浅谈paxos协议与zookeeper

介绍两篇好博客 1、zookeeper全解析–paxos作为灵魂 https://blog.youkuaiyun.com/YQlakers/article/details/72630353 2、这个文章介绍paxos协议更为透彻 https://www.cnblogs.com/linbingdong/p/6253479.html 简单来说,paxos就是为了解决在一个分布式急群众,在几乎没有leader(实际...

zc08291161的博客 446

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

浅谈分布式一致性协议之3PC

由于二阶段提交存在着诸如同步阻塞、单点问题、脑裂等缺陷。所以,研究者们在二阶段提交的基础上做了改进,提出了三阶段提交。 文章目录

wh柒八九的博客 5505

浅谈分布式和微服务架构

文章目录一、微服务简介1、微服务的诞生2、微服务架构与SOA架构的区别二、CAP理论三、分布式事务四、服务拆分总结 一、微服务简介 1、微服务的诞生   在微服务概念出现之前还有一个概念是比较值得关注的就是SOA(面向服务架构),它是将应用程序的不同功能单元(也可以称为是服务)进行拆分,并通过这些服务之间定义良好的接口和协议进行联系。接口是采用中立的方式进行定义,通过这种方式实现不同服务之间调用。...

初学者 4038

分布式与并发【二】浅谈分布式一致性协议2PC与3PC

前言: 在分布式系统体系中,为保证数据的一致性,产生了一系列的一致性协议,其中最为著名的就是2PC和3PC协议,以及现在广泛使用的真正解决一致性的Paxos算法,本篇只讲述2PC和3PC,下一篇再介绍Paxos算法。 在分布式系统中,每个子节点都能明确认知到自己处理的事务成功或者失败,但是却无法直接获取其他分布式节点的操作结果,因此当一个事务需要跨多个系统操作时,就需要一个中间方也叫做协调者来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点称之为参与者,由协调者来确定事务是否最终需要提交,基于这个思

Yu_uuuuu的博客 801

浅谈mysql的两阶段提交协议

转自: http://www.cnblogs.com/hustcat/p/3577584.html http://www.cnblogs.com/cchust/p/4439107.html binlog组提交的基本思想是,引入队列机制保证innodbcommit顺序与binlog落盘顺序一致,并将事务分组,组内的binlog刷盘动作交给一个事务进行,实现组提交目的。bin...

weixin_30641999的博客 85

分布式事务的实现原理

事务是数据库系统中非常有趣也非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全不执行;在 SOA 与微服务架构大行其道的今天,在分布式的多个服务中保证业务的一致性就需要我们实现分布式事务。 在这篇文章中,我们将介绍 事务的实现原理、分布式事务的理论基础以及实现原理。 事务 在文章的开头,我们已经说过事务是数据库管理系统执行过程中的一个逻...

方志朋的专栏 1万+

浅谈分布式事务及解决方案 | 京东物流技术团队

在讲述分布式事务的概念之前,我们先来回顾下事务相关的一些概念。

京东科技开发者 299

浅谈分布式——一致性协议 2PC && 3PC

文章目录前言一、2PC阶段一:提交事务请求阶段二:执行事务提交执行事务提交中断事务缺点二、3PC阶段一:CanCommit阶段二:PreCommit执行事务预提交中断事务阶段三:doCommit执行提交中断事务 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、2PC Two-Phase Commit 的缩写,即二阶段提交。是计算机网

shaun的博客 248

浅谈分布式事务的解决方案

一、分布式事务 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 画外音:提起分布式系统,我们不得不想...

不清不慎的博客 694

浅谈分布式事务

在单体应用中,实现事务相对简单,因为所有操作都在一个数据库连接中进行。但在分布式系统中,一个业务操作可能涉及多个独立的服务和数据库,这时如何保证数据的一致性就是分布式事务需要解决的核心问题。简单来说,分布式事务就是在多个独立服务之间保持数据一致性的一种机制。分布式事务是一个复杂但又非常重要的话题。在实际项目中,我们需要根据具体需求选择合适的解决方案,并权衡一致性、可用性和性能之间的关系。希望本文能帮助大家更好地理解分布式事务,并在实际项目中游刃有余地应对各种挑战。

向着太阳奔跑 1044

浅谈「事务 & 分布式事务」

事务 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。 MySQL 支持事务吗? 答案: 在缺省模式下,MYSQL 是 autocommit 模式的,所有的数据库更新操

weixin_44471490的博客 241
上一篇: Java解析CST时间出现ParseException的解决方法?
下一篇: JavaScript踩坑之逻辑运算符 ||
scanq
博客等级 码龄11年 15粉丝 42原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值