常用本地事务和分布式事务解决方案模型 1

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 常用本地事务和分布式事务解决方案模型

1 DTP模型

维基百科https://zh.wikipedia.org/wiki/X/Open_XA

分布式事务解决方案几乎都是柔性事务,分布式事务的实现有许多种,其中较经典是由Tuxedo提出的XA分布式事务协议,XA协议包含二阶段提交(2PC)和三阶段提交(3PC)两种实现。


其他还有 TCC、MQ 等最终一致性解决方案,至于工作中用哪种方案,需要根据业务场景选取,2PC/3PC、TCC数据强一致性高,而MQ是最终数据一致。


https://www.ibm.com/docs/zh/db2/10.5?topic=managers-designing-xa-compliant-transaction


X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由厂商进行具体的实现X/Open DTP中的角色

AP(Application Program):应用程序,主要是定义事务边界以及那些组成事务的特定于应用程序的操作。


RM(Resouces Manager):资源管理器,管理一些共享资源的自治域,如提供对诸如数据库之类的共享资源的访问。譬如:数据库、文件系统等,并且提供了这些资源的访问方式。


TM(Transaction Manager):事务管理器,管理全局事务,协调事务的提交或者回滚,并协调故障恢复。


DTP模型里面定义了XA协议接口,TM 和 RM 通过XA接口进行双向通信

2 2PC

2PC3PC,都是基于 XA 协议的

2.1 方案简介

二阶段提交协议(Two-phase Commit,即2PC)是常用的分布式事务解决方案,即将事务的提交过程分为两个阶段来进行处理:准备阶段和提交阶段。事务的发起者称协调者,事务的执行者称参与者。


在分布式系统里,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。当一个事务跨多个节点时,为了保持事务的原子性与一致性,而引入一个协调者来统一掌控所有参与者的操作结果,并指示它们是否要把操作结果进行真正的提交或者回滚(rollback)。


二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。


核心思想就是对每一个事务都采用先尝试后提交的处理方式,处理后所有的读操作都要能获得最新的数据,因此也可以将二阶段提交看作是一个强一致性算法。


2.2 处理流程

简单一点理解,可以把协调者节点比喻为带头大哥,参与者理解比喻为跟班小弟,带头大哥统一协调跟班小弟的任务执行。


2.2.1 阶段1:准备阶段

1、协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待所有参与者答复。

2、各参与者执行事务操作,将undo和redo信息记入事务日志中(但不提交事务)。

3、如参与者执行成功,给协调者反馈yes,即可以提交;如执行失败,给协调者反馈no,即不可提交。

2.2.2 阶段2:提交阶段

如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(rollback)消息;否则,发送提交(commit)消息;参与者根据协调者的指令执行提交或者回滚操作,释放所有事务处理过程中使用的锁资源。(注意:必须在最后阶段释放锁资源) 接下来分两种情况分别讨论提交阶段的过程。


情况1,当所有参与者均反馈yes,提交事务:

e5d63c295eca46e0bd10c452b057647f.png

  • 1、协调者向所有参与者发出正式提交事务的请求(即commit请求)。
  • 2、参与者执行commit请求,并释放整个事务期间占用的资源。
  • 3、各参与者向协调者反馈ack(应答)完成的消息。
  • 4、协调者收到所有参与者反馈的ack消息后,即完成事务提交。

情况2,当任何阶段1一个参与者反馈no,中断事务


  • 1、协调者向所有参与者发出回滚请求(即rollback请求)。
  • 2、参与者使用阶段1中的undo信息执行回滚操作,并释放整个事务期间占用的资源。
  • 3、各参与者向协调者反馈ack完成的消息。
  • 4、协调者收到所有参与者反馈的ack消息后,即完成事务中断。

2.3 方案总结

2PC是一个强一致性的同步阻塞协议,事务执⾏过程中需要将所需资源全部锁定,也就是俗称的 刚性事务


2PC方案实现起来简单,实际项目中使用比较少,主要因为以下问题:


性能问题 所有参与者在事务提交阶段处于同步阻塞状态,占用系统资源,容易导致性能瓶颈。

可靠性问题 如果协调者存在单点故障问题,如果协调者出现故障,参与者将一直处于锁定状态。

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

3 3PC

3.1 方案简介

三阶段提交协议,是二阶段提交协议的改进版本,与二阶段提交不同的是,引入超时机制。同时在协调者和参与者中都引入超时机制(2PC 中只有协调者有超时机制)。


三阶段提交将二阶段的准备阶段拆分为2个阶段,插入了一个preCommit阶段,使得原先在二阶段提交中,参与者在准备之后,由于协调者发生崩溃或错误,而导致参与者处于无法知晓是否提交或者中止的“不确定状态”所产生的可能相当长的延时的问题得以解决。


c43f4b87e4e9cd55ec9a00b872b535d2.png

3.2 处理流程

3.2.1 阶段1:canCommit

协调者向参与者发送canCommit请求,参与者如果可以提交就返回yes响应(参与者不执行事务操作),否则返回no响应:


1、协调者向所有参与者发出包含事务内容的canCommit请求,询问是否可以提交事务,并等待所有参与者答复。

2、参与者收到canCommit请求后,如果认为可以执行事务操作,则反馈yes并进入预备状态,否则反馈no。

3.2.2 阶段2:preCommit

协调者根据阶段1 canCommit参与者的反应情况来决定是否可以基于事务的preCommit操作。根据响应情况,有以下两种可能。

情况1,阶段1所有参与者均反馈yes,参与者预执行事务:

  • 1、协调者向所有参与者发出preCommit请求,进入准备阶段。
  • 2、参与者收到preCommit请求后,执行事务操作,将undo和redo信息记入事务日志中(但不提交事务)。
  • 3、各参与者向协调者反馈ack响应或no响应,并等待最终指令。

情况2,阶段1任何一个参与者反馈no,或者等待超时后协调者尚无法收到所有参与者的反馈,即中断事务:


  • 1、协调者向所有参与者发出abort请求。
  • 2、无论收到协调者发出的abort请求,或者在等待协调者请求过程中出现超时,参与者均会中断事务。

3.3.3 阶段3:do Commit

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

情况1:阶段2所有参与者均反馈ack响应,执行真正的事务提交:

  • 1、如果协调者处于工作状态,则向所有参与者发出do Commit请求。
  • 2、参与者收到do Commit请求后,会正式执行事务提交,并释放整个事务期间占用的资源。
  • 3、各参与者向协调者反馈ack完成的消息。
  • 4、协调者收到所有参与者反馈的ack消息后,即完成事务提交。

阶段2任何一个参与者反馈no,或者等待超时后协调者尚无法收到所有参与者的反馈,即中断事务:

1、如果协调者处于工作状态,向所有参与者发出abort请求。

2、参与者使用阶段1中的undo信息执行回滚操作,并释放整个事务期间占用的资源。

3、各参与者向协调者反馈ack完成的消息。

4、协调者收到所有参与者反馈的ack消息后,即完成事务中断

注意:进入阶段3后,如果协调者出现问题,或者协调者与参与者网络出现问题,都会导致参与者无法接收到协调者发出的do Commit请求或rollback请求。此时,参与者都会在等待超时之后,继续执行事务提交。


阶段三 只允许成功不允许失败,如果服务器宕机或者停电,因为记录的阶段二的数据,重启服务后在提交事务,所以,到了阶段三,失败了也不进行回滚,只允许成功。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7天前
|
机器学习/深度学习 算法 PyTorch
深度学习分布式模型
深度学习分布式模型
|
30天前
|
并行计算 算法 物联网
LLM 大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘诀进阶实战指南
LLM 大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘诀进阶实战指南
LLM 大模型学习必知必会系列(七):掌握分布式训练与LoRA/LISA微调:打造高性能大模型的秘诀进阶实战指南
|
1月前
|
NoSQL 分布式数据库 MongoDB
【MongoDB 专栏】MongoDB 的分布式事务解决方案
【5月更文挑战第11天】本文探讨了MongoDB的分布式事务处理,涉及两阶段提交(2PC)、TCC补偿事务、分布式锁和幂等处理。2PC通过协调者与参与者确保数据一致性,而TCC提供更高性能和容错性。分布式锁解决并发冲突,幂等处理保证事务正确性。根据业务需求选择合适方案,并关注性能、可靠性和容错。
【MongoDB 专栏】MongoDB 的分布式事务解决方案
|
14天前
|
存储 缓存 算法
分布式Session共享解决方案
分布式Session共享解决方案
11 0
|
14天前
|
存储 算法 Java
分布式唯一ID解决方案-雪花算法
分布式唯一ID解决方案-雪花算法
10 0
|
1月前
|
缓存 监控 数据库
分布式系统中缓存穿透问题与解决方案
在分布式系统中,缓存技术被广泛应用以提高系统性能和响应速度。然而,缓存穿透是一个常见而严重的问题,特别是在面对大规模请求时。本文将深入探讨缓存穿透的原因、影响以及一些有效的解决方案,以确保系统在面对这一问题时能够保持稳定和高效。
47 13
|
1月前
|
安全
考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
|
1月前
|
算法
基于一致性理论的微电网分布式控制策略仿真模型【自适应虚拟阻抗】【simulink仿真】
基于一致性理论的微电网分布式控制策略仿真模型【自适应虚拟阻抗】【simulink仿真】
|
1月前
|
程序员
深入解析:分布式一致性的终极解决方案——XA协议
本文介绍了分布式系统中的两种一致性协议:2PC(两阶段提交)和3PC(三阶段提交)。2PC分为准备和提交两个阶段,确保所有参与者在提交前达成一致。3PC则在2PC基础上增加了一个CanCommit阶段,提高容错性和可用性,参与者在超时后可自行中断事务。选择协议需依据业务需求和系统特点,高一致性要求可选3PC,注重性能则选2PC。
30 0
|
1月前
|
存储 缓存 算法
【专栏】探讨分布式限流所面临的挑战以及目前业界常用的解决方案
【4月更文挑战第27天】在互联网时代,分布式限流是应对高并发、保护系统稳定的关键。它面临数据一致性、算法准确性和系统可扩展性的挑战。常见限流算法有令牌桶、漏桶和滑动窗口。解决方案包括使用分布式存储同步状态、结合多种算法及动态调整阈值。定期压力测试确保策略有效性。随着系统规模增长,限流技术将持续发展,理解并应用限流原理对保障服务质量至关重要。

热门文章

最新文章