`

分布式事务(概念)

 
阅读更多

事务有ACID的特性,即原子性、一致性、隔离性、持久性。

TCC编程:Try、Confirm和Cancel,分表代表尝试锁定资源、全部执行成功确认提交和取消。

 

分布式事务,是指多个任务分发到不同服务器执行,要么全部成功,要么全部失败。目前有几种方案,其中用的多且简单的就是补偿机制,以及2阶段提交、3阶段提交、4阶段提交。

 

补偿机制:以订单扣库存为例,若订单插入成功库存量扣失败,则mq定时补偿删除订单。即任何一个事务是可逆或可回滚的。

 

2阶段提交:请求阶段(协调者请求参与者决策是否可提交事务)、提交阶段(根据所有参与者的决策结果最终确认提交还是取消)。存在问题:1同步阻塞问题。执行过程中,所有参与节点都是事务阻塞型的。2单点故障。由于协调者的重要性,一旦协调者发生故障。3数据不一致。在二阶段提交的阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障。4当协调者出错,同时参与者也出错时,两阶段无法保证事务执行的完整性。

 

3阶段提交

1)CanCommit阶段

3PC的CanCommit阶段其实和2PC的准备阶段很像。

协调者向参与者发送commit请求,参与者如果可以提交就返回Yes响应,否则返回No响应。

2)PreCommit阶段

Coordinator根据Cohort的反应情况来决定是否可以继续事务的PreCommit操作。

根据响应情况,有以下两种可能。

A.假如Coordinator从所有的Cohort获得的反馈都是Yes响应,那么就会进行事务的预执行:

发送预提交请求。Coordinator向Cohort发送PreCommit请求,并进入Prepared阶段。

事务预提交。Cohort接收到PreCommit请求后,会执行事务操作,并将undo和redo信息记录到事务日志中。

响应反馈。如果Cohort成功的执行了事务操作,则返回ACK响应,同时开始等待最终指令。

B.假如有任何一个Cohort向Coordinator发送了No响应,或者等待超时之后,Coordinator都没有接到Cohort的响应,那么就中断事务:

发送中断请求。Coordinator向所有Cohort发送abort请求。

中断事务。Cohort收到来自Coordinator的abort请求之后(或超时之后,仍未收到Cohort的请求),执行事务的中断。

3)DoCommit阶段

该阶段进行真正的事务提交,也可以分为以下两种情况:

执行提交

A.发送提交请求。Coordinator接收到Cohort发送的ACK响应,那么他将从预提交状态进入到提交状态。并向所有Cohort发送doCommit请求。

B.事务提交。Cohort接收到doCommit请求之后,执行正式的事务提交。并在完成事务提交之后释放所有事务资源。

C.响应反馈。事务提交完之后,向Coordinator发送ACK响应。

D.完成事务。Coordinator接收到所有Cohort的ACK响应之后,完成事务。

中断事务

Coordinator没有接收到Cohort发送的ACK响应(可能是接受者发送的不是ACK响应,也可能响应超时),那么就会执行中断事务。

三阶段提交协议和两阶段提交协议的不同:

对于协调者(Coordinator)和参与者(Cohort)都设置了超时机制(在2PC中,只有协调者拥有超时机制,即如果在一定时间内没有收到cohort的消息则默认失败)。

在2PC的准备阶段和提交阶段之间,插入预提交阶段,使3PC拥有CanCommit、PreCommit、DoCommit三个阶段。

PreCommit是一个缓冲,保证了在最后提交阶段之前各参与节点的状态是一致的。

 

消息事务(2阶段提交)+最终一致性:即本地事务和发消息放到一个分布式事务中,比如系统向消息系统发预备消息,发送成功才执行本地事务,执行成功才发送提交消息给中间件。若本地事务执行失败,则通过消息中间件回调接口,不断检查本地事务执行状态。若本地执行成功发送提交失败,其实通过中间件回调接口就检测成功就可以自动提交了。

 

消息系统(eBay模式):核心是保证服务接口的幂等性。即同一个接口重复调用也不会出问题,保证数据的唯一性。

 

 

分享到:
评论

相关推荐

    分布式事务视频教程

    #### 一、分布式事务概念及重要性 在现代软件架构中,随着业务复杂度的提升以及系统规模的扩大,单一应用已经很难满足实际需求,分布式系统应运而生。分布式系统由多个独立运行的服务组成,这些服务之间通过网络...

    分布式事务-可靠消息的服务的设计与实现(消息服务子系统)

    1. **分布式事务概念**:在分布式系统中,事务处理跨越多个节点,必须确保所有操作要么全部成功,要么全部失败,这就需要分布式事务的支持。它保证了数据的一致性和完整性,避免了部分成功导致的数据不一致问题。 2...

    浅谈分布式事务实现技术及应用场景探讨.pdf

    1. Early Beginnings:事务概念的提出可以追溯到20世纪60年代,数据库管理系统的出现。事务的ACID特性是指原子性、 一致性、隔离性和持久性。 2. 2PC(Two-Phase Commit):是分布式事务中最常用的实现技术之一。它...

    分布式事务源代码

    以上是分布式事务的基本概念和相关技术点,通过分析提供的源代码,可以更深入地理解这些原理在实际开发中的应用。对于初学者,建议先理解基本理论,然后对照代码逐步学习,以提升对分布式事务的掌握。如果你在学习...

    大规模SOA系统中的分布式事务处事

    本文将深入探讨分布式事务的概念、原理以及在实际应用中的解决方案。 分布式事务是指跨越多个数据库或资源管理器的单个逻辑操作,其目的是保持ACID(原子性、一致性、隔离性和持久性)特性,以确保业务流程的正确...

    分布式事务若依框架文档

    #### 一、分布式事务基本概念 在理解分布式事务之前,我们首先需要了解数据库事务的基本属性,即ACID特性。 - **原子性(Atomicity)**:事务中的所有操作要么全部成功,要么全部失败。如果其中任何一部分失败,则...

    分布式事务.pdf

    分布式事务是为了解决分布式系统中跨越多个节点的操作,要求这些操作要么全部成功要么全部失败的一种事务机制。它是为了保证在不同节点上的数据一致性而产生的概念。分布式事务广泛应用于微服务架构、数据库分库分表...

    微服务架构的分布式事务控制及解决方案视频教程

    最全分布式事务视频课程详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 视频课程大纲: 1.事务基本概念讲解(本地、分布式) 2.分布式事务理论(CAP、BASE) 3.分布式事务解决方案之2PC(xa、...

    LCN分布式事务框架详解

    LCN(Local Capable Notifier...通过学习这个资源包,你将能够理解分布式事务的基本概念,掌握LCN的使用方法,并具备在实际项目中应用分布式事务的能力。无论是理论学习还是实践经验,这都是一份非常有价值的学习资料。

    分布式事务解决方案.zip

    1. **分布式事务理论基础**:分布式事务的基本概念源于ACID(原子性、一致性、隔离性、持久性)原则,它要求分布式系统中的事务操作如同单机事务一样可靠。在分布式环境中,由于网络延迟、节点故障等问题,实现ACID...

    分布式事务专题-v1.1.pdf

    在当今的互联网环境下,分布式系统已成为软件架构的主要形式,而分布式事务作为保证系统一致性的核心问题,其重要性愈发凸显。分布式事务是指在分布式系统中,跨越多个节点的事务,这些节点可能位于不同的服务器上,...

    2023深度解读分布式事务Seata课-视频教程网盘链接提取码下载 .txt

    本课程将深入探讨分布式事务管理框架Seata的核心概念和实际应用。学员将了解Seata在微服务架构中的作用、原理及实践,包括分布式事务、一致性、可靠性等方面的重要知识点。 视频大小:16.6G

    分布式事务学习笔记

    文中提到的学习资料可能包括但不限于各种技术书籍、在线教程、论文等,旨在帮助读者深入理解分布式事务的相关概念和技术实现。 通过上述知识点的详细解读,我们可以看到分布式事务不仅涉及事务的基本属性,还包含了...

    某果学院!微服务架构的分布式事务解决方案!百度云,百度网盘!!!

    在IT行业中,微服务架构是一种将单一应用程序分解为一组小型、独立的...通过“微服务架构的分布式事务解决方案.txt”这份文档,读者可以深入理解这一领域的核心概念和技术,从而在实际项目中有效应对分布式系统的挑战。

    基于J2EE分布式事务的应用技术研究

    分布式事务处理的概念 事务是工作的一个单一逻辑单元,其特性在于“要么全部成功,要么全部失败”。这种特性确保了数据的一致性和完整性。在分布式环境中,这意味着事务的参与者、服务器和支持事务的资源都可能...

    分布式事务专题总结.pdf

    在理解分布式事务专题之前,首先需要明确事务的基本概念。事务是一种机制,它保证了数据库操作的原子性、一致性、隔离性和持久性,也就是我们熟知的ACID属性。原子性(Atomicity)意味着事务中的所有操作要么全部...

    C#(.net)分布式事务处理类及事件使用

    在.NET开发环境中,C#语言提供了强大的工具和框架来处理分布式事务,这使得开发者能够构建高效、可扩展的多数据库应用。本主题将深入探讨C#中的分布式事务处理类及事件使用,帮助你理解如何在分布式系统中实现一致性...

Global site tag (gtag.js) - Google Analytics