首页 > 其他分享 >分布式事务的解决方案(欢迎讨论~)

分布式事务的解决方案(欢迎讨论~)

时间:2024-12-24 21:26:52浏览次数:5  
标签:事务 Saga 解决方案 协调者 阶段 提交 参与者 分布式

目录

背景

CAP定理

BASE理论

 场景重现​编辑

分布式事务常见的解决分案

1.二段提交

2.三段提交

3.TCC模式 

4.分布式补偿事务(Saga) 

 5.Seata分布式框架-XA模式

6.Seata分布式框架-AT模式

XA AT TCC SAGA 的对比


背景

首先必须介绍一下分布式中至关重要的两个理论:CAP 理论和 BASE 理论

我们抽蚕拨丝一步一步来~

CAP定理

1998年, 加州大学的计算机科学家 Eric Brewer提出, 分布式系统有三个指标:

· Consistency (一致性)

· Availability (可用性)

· Partition tolerance (分区容错性)

Eric Brewer 说, 分布式系统无法同时满足这三个指标

这个结论就叫做CAP 定理。

BASE理论

BASE理论是对CAP的一种解决思路, 包含三个思想:

 1.Basically Available (基本可用) : 分布式系统在出现故障时, 允许损失部分可用性, 即保证核心可用。

 2.SoftState (软状态):在一定时间内,允许出现中间状态, 比如临时的不一致状态。

 3.Eventually Consistent (最终一致性) : 虽然无法保证强一致性, 但是在软状态结束后, 最终达到数据一致。 

而分布式事务最大的问题是各个子事务的一致性问题, 因此可以借鉴CAP定理和BASE理论:

AP模式: 各子事务分别执行和提交, 允许出现结果不一致, 然后采用弥补措施恢复数据即可, 实现最终一致。

CP模式: 各个子事务执行后互相等待, 同时提交, 同时回滚, 达成强一致。但事务等待过程中, 处于弱可用状态。

 场景重现

分布式事务常见的解决分案

分布式事务是在分布式系统中,跨越多个计算机节点或数据存储系统进行的事务,在这种环境下保证事务的ACID(原子性、一致性、隔离性、持久性)属性是一大挑战。

1.二段提交

二阶段提交协议(Two-phase commit protocol),简称 2PC。两阶段提交是一种强一致性事务协议,它分为准备阶段和提交阶段。

在准备阶段,协调者节点询问所有参与者是否准备好提交事务,如果所有参与者都答应准备好了,那么在提交阶段,协调者会通知所有参与者提交事务。

如果有任何一个参与者在准备阶段没有准备好,那么协调者会通知所有参与者回滚事务。

有熟悉 MySQL 的同学可能马上想到了,MySQL 的事务提交就是通过几种日志来实现二阶段提交的。

在准备阶段,协调者节点询问所有参与者是否准备好提交事务,如果所有参与者都答应准备好了,那么在提交阶段,协调者会通知所有参与者提交事务。

如果有任何一个参与者在准备阶段没有准备好,那么协调者会通知所有参与者回滚事务。

有熟悉 MySQL 的同学可能马上想到了,MySQL 的事务提交就是通过几种日志来实现二阶段提交的。

1.1优点

  1. 原子性保证:2PC 协议可以保证所有参与者要么全部提交成功,要么全部失败回滚,从而实现跨多个分布式节点的事务的原子性。

  2. 简单直观:2PC 的设计思路简单,逻辑清晰,容易理解,这使得它在很多传统的数据库和分布式系统中得到了广泛的应用,比如 MySQL 从 5.5 版本开始支持。

1.2缺点

  1. 同步阻塞:在 2PC 的第一阶段,所有参与者在响应协调者的准备请求后,必须等待最终的提交或回滚指令。这期间,所有参与者都处于阻塞状态,无法进行其他操作,导致资源锁定时间较长,在高并发场景下很明显不太适用。

  2. 单点故障:如果协调者在第二阶段崩溃,参与者可能会无限期地等待指令,因为它们不知道应该提交还是回滚。这使得整个系统容易受到单点故障的影响。

  3. 单点故障:如果协调者在第二阶段崩溃,参与者可能会无限期地等待指令,因为它们不知道应该提交还是回滚。这使得整个系统容易受到单点故障的影响。

  4. 单点故障:如果协调者在第二阶段崩溃,参与者可能会无限期地等待指令,因为它们不知道应该提交还是回滚。这使得整个系统容易受到单点故障的影响。

2.三段提交

三阶段提交协议(Three-phase commit protocol),简称 3PC。三阶段提交(3PC)是两阶段提交(2PC)的改进版本,它旨在减少在协调者和参与者之间的阻塞时间,同时增加系统在某些故障情况下的容错能力,以下是 3PC 的三个阶段:

CanCommit 阶段

  • 协调者行动: 发送 CanCommit 请求到所有参与者,并等待回应。

  • 协调者行动: 发送 CanCommit 请求到所有参与者,并等待回应。

PreCommit 阶段

  • 协调者行动: 如果所有参与者回答 Yes,协调者发送 PreCommit 请求给所有参与者,并进入 Prepared 阶段;如果有任何参与者回答 No,或者等待超时,协调者发送 abort 请求。

  • 协调者行动: 如果所有参与者回答 Yes,协调者发送 PreCommit 请求给所有参与者,并进入 Prepared 阶段;如果有任何参与者回答 No,或者等待超时,协调者发送 abort 请求。

DoCommit 阶段

协调者行动: 一旦协调者收到所有参与者的 ACK,它会进入 DoCommit 阶段,发送 commit 请求给所有参与者

协调者行动: 一旦协调者收到所有参与者的 ACK,它会进入 DoCommit 阶段,发送 commit 请求给所有参与者

与 2PC 相比,3PC 在 PreCommit 阶段引入了超时机制,允许参与者在没有接收到协调者的最终指令时自行决定中止事务,这减少了协调者成为单点故障的可能性。

1.2实际业务场景

3PC通常用于需要较高可靠性的分布式系统中,尤其是在那些不能接受长时间锁定资源的场景。例如:

1.分布式数据库系统:分布式数据库可能使用 3PC 来确保跨多个数据中心的事务一致性。例如,一个全球性的银行可能需要在不同国家的分支机构之间处理账户转账,这时3PC可以减少在网络延迟或某个分支机构失去响应时的影响。

2.电信网络:在电信运营商的计费系统中,可能会使用 3PC 来同步跨多个服务点的账单信息,这些系统通常要求高可用性和快速响应,因此不能长时间阻塞。

3.大型分布式系统:对于需要跨多个服务和组件协调工作的大型分布式系统,比如云计算平台,3PC可以在保持事务一致性的同时,减少参与者等待协调者指令的时间

3.TCC模式 

TCC(Try-Confirm-Cancel)是一种应用层的分布式事务解决方案,它将事务分为三个步骤:尝试(Try)、确认(Confirm)和取消(Cancel):

  • 在 Try 阶段,会预留必要的业务资源;

  • 在 Confirm 阶段,如果所有相关的业务操作都成功了,则正式执行业务操作;

  • 如果有操作失败,则在 Cancel 阶段执行补偿操作,回滚之前的预留资源。

 

假设我们买一张从深圳到北京的火车票,票价为 360 元,TCC 分为这三个步骤:

Try:检查钱包的钱是否大于等于 360,并锁住资源(360 元和这张车票);

Cancel:如果有一个资源锁定失败,则进行 cancel 释放资源,这个过程中无论 cancel 还是其它操作失败都进行重试 cancel,所以需要保证幂等性;

Confirm:如果资源锁定都成功,则进行 confirm,资源交换,这个过程中无论 confirm 还是其它操作失败都进行重试 confirm,都需保证幂等性。

TCC 的出现解决二阶段提交的几个缺点

  1. 单点故障问题:引入了多个业务活动管理器,集群下高可用;

  2. 数据不一致问题:引入超时补偿机制,由业务活动管理器来控制一致性;

  3. 同步阻塞问题:引入超时补偿机制,不会锁定同步,将资源转换为业务逻辑形式,粒度更小

TCC模式的每个阶段是做什么的?
Try: 资源检查和预留
Confirm: 业务执行和提交
Cancel: 预留资源的释放

TCC的优点是什么?
· 一阶段完成直接提交事务, 释放数据库资源, 性能好
· 相比AT模型, 无需生成快照, 无需使用全局锁, 性能最强
· 不依赖数据库事务, 而是依赖补偿操作, 可以用于非事务型数据库TCC的缺点是什么?
有代码侵入, 需要人为编写 try、 Confirm和 Cancel接口, 太麻烦
软状态, 事务是最终一致
需要考虑 Confirm和 Cancel的失败情况, 做好幂等处理。

4.分布式补偿事务(Saga) 

Saga 是一种长事务的解决方案,它将一个大的分布式事务拆分成多个较小的本地事务,这些本地事务通过异步消息传递串联起来。

每个本地事务执行成功后,会发送消息触发下一个事务的执行。如果某个本地事务失败,Saga 会执行一系列补偿操作(回滚之前的操作)来保持数据的一致性。

假设有一个旅游网站,用户可以通过它预订机票、酒店和租车服务。每个预订步骤都可以视为一个 Saga 中的小事务:

用户预订机票。

用户预订酒店。

用户预订租车服务。

如果用户成功完成了所有预订步骤,那么整个旅行预订就完成了。但如果在预订租车服务时失败了,那么 Saga 会开始执行补偿操作:

取消酒店预订。

取消机票预订。

通过这种方式,Saga 确保了用户不会因为部分服务预订失败而损失金钱或留下未处理的预订。

1.4优点
灵活性:Saga 允许每个小事务独立管理,提高了系统的灵活性。

减少资源锁定:由于 Saga 不需要在事务执行过程中持续占用资源,因此可以减少长时间的资源锁定,提高系统的并发能力。

容错性:Saga 通过定义补偿操作来处理失败,增强了系统的容错能力。

适用于微服务架构:在微服务架构中,Saga 可以跨服务边界管理事务,每个服务独立处理自己的事务和补偿逻辑。

1.4.2.缺点
复杂性:实现 Saga 需要定义每个小事务的补偿操作,这可能会增加系统的复杂性。

数据一致性:Saga 不能提供 2PC 那样的即时一致性保证,它只能保证最终一致性,这在某些业务场景中可能是不够的。

补偿操作的难度:在某些情况下,补偿操作可能很难实现,尤其是当事务有副作用时(比如发送了一个不可撤销的通知)。

测试和调试:由于 Saga 涉及多个服务和补偿逻辑,测试和调试可能会更加困难。

在选择使用 Saga 模式时,需要仔细考虑业务场景是否适合最终一致性,以及是否能够有效地实现和管理补偿逻辑。对于那些需要高度一致性保证的场景,可能需要考虑其他事务管理机制。、

 5.Seata分布式框架-XA模式

 

XA模式的优点是什么?

· 事务的强一致性, 满足ACID原则。

·  常用数据库都支持, 实现简单, 并且没有代码侵入

XA模式的缺点是什么?

因为一阶段需要锁定数据库资源, 等待二阶段结束才释放, 性能较差

依赖关系型数据库实现事务

6.Seata分布式框架-AT模式

简述AT模式与XA模式最大的区别是什么?
·  XA模式一阶段不提交事务, 锁定资源; AT模式一阶段直接提交, 不锁定资源。
 · XA模式依赖数据库机制实现回滚; AT模式利用数据快照实现数据回滚。
·  XA模式强一致; AT模式最终一致

AT模式的优点:
· 一阶段完成直接提交事务, 释放数据库资源, 性能比较好
· 利用全局锁实现读写隔离
· 没有代码侵入, 框架自动完成回滚和提交
AT模式的缺点:
· 两阶段之间属于软状态, 属于最终一致
· 框架的快照功能会影响性能, 但比XA模式要好很多

XA AT TCC SAGA 的对比

标签:事务,Saga,解决方案,协调者,阶段,提交,参与者,分布式
From: https://blog.csdn.net/m0_74969835/article/details/144702735

相关文章

  • 关于VS Code崩溃提示‘-1247483645‘的解决方案 - 随笔记录
    今天开机运行VSCode时偶然发现它总是无法正常运行,提示框中报错的内容有这么一条:thewindowterminatedunexpectedly(reason:'crashed',code:'-1247483645')上网查找并尝试了很多网友的解决方案,彻底删除后重装或是使用网页版取代等等,但都不能很好地解决这个问题,最后测试为VSC......
  • Transformer大数据分布式因果推断在美团履约平台的探索与实践14
     1.背景中国有句古话:“民以食为天”。对食物的分析和理解,特别是识别菜肴的食材,在健康管理、卡路里计算、烹饪艺术、食物搜索等领域具有重要意义。但是,算法技术尽管在目标检测[1]-[3]、通用场景理解[4][5]和跨模态检索[6]-[8]方面取得了很大进展,却没有在食物相关的场景中取得......
  • Transformer大数据分布式因果推断在美团履约平台的探索与实践12
     1.背景中国有句古话:“民以食为天”。对食物的分析和理解,特别是识别菜肴的食材,在健康管理、卡路里计算、烹饪艺术、食物搜索等领域具有重要意义。但是,算法技术尽管在目标检测[1]-[3]、通用场景理解[4][5]和跨模态检索[6]-[8]方面取得了很大进展,却没有在食物相关的场景中取得......
  • 千纸鹤:高效安全的App内测与上架解决方案
    在移动互联网快速发展的时代,应用开发者需要一个高效、安全的工具来分发内测版本、获取用户反馈,并保障产品在上线前的质量与性能。千纸鹤应用服务平台正是为此而生,通过专业的内测分发服务,助力开发者轻松完成应用测试,快速触达目标用户,并顺利上线。一、内测分发的核心难题1.传......
  • 【SpringCloud】5.Micromete——分布式链路追踪
    必要性:由客户端发起的请求会形成链路,任何一环出现问题,可能导致失败。我们需要快速的观测、定位和解决问题。概述ZipKinMicromete+ZipKin搭建链路控制案例概述为什么需要分布式链路技术在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来......
  • 智能网联汽车功能安全及预期功能安全测试解决方案
    概述    智能化与网联化已经是当前汽车行业主要的发展趋势,伴随着电子电气系统(E/E系统)复杂程度增加并承担更多的主动策略,E/E系统失效、智能驾驶性能边界等引发的安全风险成为汽车行业不可忽视的问题。      经纬恒润安全团队致力于为国内外整车厂和零部件供应商提......
  • Web浏览器播放rtsp视频流详细解决方案
    1、背景在当前项目中,需要实现Web端直接播放RTSP视频流。该功能的核心目标是使得用户能够通过浏览器观看来自不同品牌的IPC(InternetProtocolCamera)设备的实时视频流。主要的IPC设备来自海康威视、大华科技以及宇视等厂商,这些设备普遍使用RTSP协议来传输视频数据。点播视频:MP4......
  • Loadrunner12 Controller 运行时不显示具体信息可视化的表格视图 解决方案
     loadrunnercontroller点击run运行时,下方的窗口没有显示表格视图,无法实现可查看资源的实时运行情况 实际上,左侧已经显示设计场景在运行了,蓝色部分为可查看部分 解决方案:1.点击view-viewgraphs-showxxgraphs;选择需要显示几个表格形式(这里我选择4个) 2.......
  • Linux 虚拟机重启找不到IP解决方案
    @目录前言简介Linux操作系统查看不到IP地址问题描述:第一步:修改配置第二步:查看ip第三步:查看网卡第四步:重启网络‌Linux网络服务重启失败解决办法问题描述:第一步:查看NetworkManager的状态第二步:停止NetworkManager第三步:重启Network第四步:禁用NetworkManager开机自启总结前......
  • PCIe扫盲——PCIe总线事务层入门(二)
    前面的文章介绍了TLP的几种类型以及TLP的包结构。这篇文章来详细地聊一聊Non-PostedTransaction(包括OrdinaryRead、LockedRead和IO/ConfigurationWrites)与PostedWrites(包括MemoryWrites和MessageWrites)。TLP是由硬件产生的,不与上层软件有关系Non-PostedTransactionO......