【微服务篇】分布式事务方案以及原理详解

news/2024/4/28 4:10:37/文章来源:https://blog.csdn.net/lin819747263/article/details/137126381

分布式事务是指事务参与者、资源服务器、事务管理器分布在不同的分布式系统的多个节点之上的事务。在微服务架构、大型分布式系统和云计算等环境中,由于系统间调用和资源访问的复杂性,分布式事务变得尤为重要。

应用场景

  1. 跨系统交易:当交易涉及多个独立的系统或服务时,如电子商务中的订单系统、支付系统和库存系统,需要保证数据的一致性。
  2. 微服务架构:在微服务架构中,每个微服务可能使用不同的数据库,分布式事务确保了跨服务的数据一致性。
  3. 大数据处理:在大数据应用中,数据可能分布在不同的存储系统中,分布式事务可以协调这些系统之间的操作。

解决方案

分布式事务的解决方案多种多样,每种方案都有其适用场景、优点和缺点。以下是一些常见的分布式事务解决方案:

  • 两阶段提交(2PC)

  • 三阶段提交(3PC)

  • TCC事务补偿

  • Saga模式

  • 基于BASE理论(基本可用、软状态、最终一致性),采用异步消息、事件驱动等方式逐步达到数据的最终一致性。

  • 分布式事务中间件

两阶段提交(2PC)

两阶段提交是一种最常见的分布式事务协议,其过程分为两个主要阶段:准备阶段和提交阶段。

  1. 准备阶段:事务协调者(通常是发起事务的节点)向所有参与者发送准备(PREPARE)命令,询问它们是否可以安全地提交事务。每个参与者执行事务操作,但不提交,而是将操作结果记录到持久存储中,并向协调者回报是(YES)或否(NO)。
  2. 提交阶段
    • 如果所有参与者都回应YES,协调者发送提交(COMMIT)命令给所有参与者,每个参与者完成事务操作并释放所有事务资源。
    • 如果任何参与者回应NO,协调者发送回滚(ROLLBACK)命令给所有参与者,每个参与者撤销事务操作并释放资源。
优点:
  • 强一致性:确保了所有参与者要么都提交事务,要么都不提交,从而保证了数据的强一致性。
缺点:
  • 性能开销:所有参与者在等待其他参与者和协调者的决定时,必须保持锁定资源,这可能导致高延迟和低吞吐量。
  • 单点故障:如果协调者在提交阶段之前失败,参与者可能会长时间锁定资源,直到协调者恢复。
  • 阻塞问题:在某些故障情况下,参与者可能会无限期地等待协调者的指示。

三阶段提交(3PC)

三阶段提交是对两阶段提交的改进,目的是减少阻塞和解决单点故障问题。它增加了一个额外的阶段,使得整个过程分为“准备”、“预提交”和“提交/中断”。

  1. 准备阶段:与2PC类似,协调者向所有参与者发送准备命令,询问它们是否可以提交事务。
  2. 预提交阶段:如果所有参与者都同意提交事务,协调者进入预提交状态并通知所有参与者。此时,每个参与者都准备好提交事务,但还未真正执行提交。
  3. 提交/中断阶段
    • 如果预提交成功,协调者发送提交命令给所有参与者,参与者完成事务提交并释放资源。
    • 如果在预提交阶段有任何失败,协调者发送中断命令给所有参与者,参与者撤销操作并释放资源。
优点:
  • 减少阻塞:通过引入预提交阶段,参与者在等待最终决定时可以释放部分资源,从而减少资源锁定时间。
  • 改善容错性:在某些故障情况下,即使协调者失效,参与者也可以根据当前的状态自行决定是提交还是中断事务。
缺点:
  • 复杂度:相较于2PC,3PC更加复杂,实现和维护难度更高。
  • 仍存在单点故障问题:虽然3PC减少了单点

TCC事务补偿

TCC补偿事务是一种分布式事务解决方案,其名"TCC"代表三个关键阶段:Try、Confirm、Cancel。TCC补偿事务主要用于处理分布式系统中的一致性问题,特别是在微服务架构中,它能有效地管理跨多个服务的事务。

工作原理

TCC补偿事务的核心思想是将每个分布式事务操作分解为三个明确的步骤:尝试(Try)、确认(Confirm)和取消(Cancel)。这三个步骤分别对应于事务的预留、提交和回滚操作。

  1. Try 阶段
    • 这是事务的准备阶段。在这个阶段,事务参与者检查所有必要的条件是否满足,并尝试预留所需的资源(例如,锁定库存、检查信用额度等),以确保事务可以成功执行。然而,实际的业务变更还没有被应用到持久化存储中。
  2. Confirm 阶段
    • 如果所有参与者的Try阶段都成功执行,则进行确认阶段。在这个阶段,所有预留的资源被正式确认,业务操作得以提交。这意味着Try阶段中准备的所有操作现在被最终执行,如将锁定的库存扣除。
  3. Cancel 阶段
    • 如果任何参与者在Try阶段失败,或者由于某些原因需要回滚事务,则进入取消阶段。在这个阶段,所有参与者执行补偿操作,撤销Try阶段所做的预留。这确保了即使事务未能成功提交,系统的一致性和数据的完整性也得到了保障。

应用场景

TCC补偿事务模式特别适用于那些对数据一致性要求较高的场景,如金融服务(支付、转账)、电子商务(订单、库存管理)等领域。它通过明确的业务逻辑分割,允许复杂的分布式事务以一种可控和透明的方式进行管理。

优点

  • 强一致性:TCC通过明确的业务操作步骤保证了在各种情况下数据的一致性。
  • 灵活性高:开发者可以针对不同的业务场景自定义Try、Confirm和Cancel阶段的具体逻辑。
  • 无锁操作:相比于传统的基于锁的事务控制机制,TCC通过业务层面的预留和确认减少了对锁的依赖,提高了系统的并发性能。

缺点

  • 开发成本高:每个业务操作都需要实现三个阶段的逻辑,增加了开发和维护的复杂性。
  • 回滚复杂度:在Cancel阶段,确保所有的补偿操作能够正确无误地执行,需要仔细设计,特别是在涉及多个服务调用和外部系统交互时。
  • 性能考量:由于TCC模式增加了额外的网络调用和复杂的业务逻辑处理,可能会对系统性能产生一定影响,尤其是在高并发场景下。

消息事务

分布式消息事务是一种通过消息传递机制来协调和管理分布式系统中不同服务或组件之间事务的方法。它允许应用程序在不同的系统和服务之间进行可靠的消息交换,确保数据的一致性和完整性,特别是在复杂的分布式架构中。分布式消息事务通常与消息队列(如RabbitMQ、Kafka、ActiveMQ等)和消息中间件技术结合使用。

核心概念

  1. 消息中间件:提供了一个中间层,用于在分布式系统中的不同组件之间传递消息。它支持异步消息传递、消息持久化、消息路由等特性。
  2. 事务性消息:确保消息的发送与业务操作(如数据库更新)在一个事务范围内原子性地执行,即要么全部成功,要么全部失败。
  3. 最终一致性:分布式消息事务通常采用异步和事件驱动的方式,保证系统最终达到一致状态,而非严格的即时一致性。

实现方式

分布式消息事务的实现方式大致可以分为以下几类:

  1. 本地消息表:在发送消息的同一数据库事务中记录消息。业务操作和消息记录在同一个事务中完成,随后一个独立的进程或服务将消息从表中取出并发送到消息队列,确保消息的可靠发送。
  2. 事务消息:一些消息中间件支持事务消息的概念,允许在发送消息的过程中开启一个事务,结合业务数据库操作,实现消息发送和业务操作的原子性。
  3. 最终一致性(事件驱动):业务操作完成后发布一个事件到消息队列,其他服务通过订阅这些事件来响应和执行相应的业务逻辑,从而异步地实现业务间的协调和数据一致性。

应用场景

  • 分布式事务协调:在需要跨多个服务或数据库执行事务时,使用分布式消息事务来协调不同部分的操作,保证事务的完整性。
  • 事件驱动架构:在基于事件的系统中,服务通过监听和响应事件来实现解耦和动态扩展,分布式消息事务支持事件的可靠传递。
  • 异步处理和解耦:允许系统的不同部分异步交互,提高系统的响应速度和吞吐量,同时降低服务间的耦合度。

优点

  • 可靠性:确保消息在系统的不同部分之间可靠地传递,即使在部分组件失败的情况下也能保证数据的一致性。
  • 异步和解耦:提高了系统的灵活性和扩展性,不同的服务可以独立地开发和扩展,只通过消息进行交互。
  • 性能提升:通过异步消息传递,可以减少等待时间,提高系统整体的处理能力。

缺点

  • 复杂性:实现分布式消息事务增加了系统的复杂性,需要更多的开发和维护工作。
  • 一致性延迟:由于基于异步消息传递,系统的一致性可能会有延迟,需要设计合理的补偿和回滚机制。
  • 中间件依赖:依赖于消息中间件的稳定性和性能,中间件的选择和配置对系统的影响较大。

Saga 模式

Saga模式是一种解决分布式系统事务管理问题的设计模式,特别适用于长期运行的业务过程和微服务架构。Saga通过一系列本地事务将一个分布式事务拆解成多个步骤,每个步骤对应于在不同服务上执行的本地事务。如果其中一个步骤失败,Saga会执行一系列补偿事务来回滚之前的操作,从而保持数据一致性。

工作原理

Saga模式主要通过以下两种方式实现:

  1. 串行执行:Saga中的事务按顺序执行。如果某个事务失败,Saga将执行该事务之前所有事务的补偿操作来回滚更改。
  2. 并行执行:Saga中的事务可以并行执行,以提高效率。在这种情况下,如果某个事务失败,Saga将执行所有成功事务的补偿操作来恢复一致性。

每个事务都有一个对应的补偿事务。补偿事务是用来撤销原事务的操作。例如,如果一个服务在执行业务操作时失败,Saga将调用之前成功执行的事务的补偿操作,以撤销这些事务的影响。

应用场景

Saga模式适用于以下场景:

  • 长期运行的业务流程:在长时间运行的流程中,持续占用资源(如数据库锁)不现实,Saga通过异步和补偿机制解决了这个问题。
  • 微服务架构:在微服务架构中,不同的服务可能管理不同的数据源。Saga可以协调这些服务,确保它们之间的数据一致性。
  • 复杂的业务逻辑:对于需要多个步骤和涉及多个服务的复杂业务逻辑,Saga提供了一种结构化的方法来管理这些步骤。

优点

  • 提高了一致性:通过补偿事务,Saga可以在分布式系统中维持数据一致性,即使在面对局部失败的情况下。
  • 增加了灵活性:Saga允许并行处理事务,并且可以根据业务需求灵活地设计补偿逻辑。
  • 减少了资源锁定时间:相比于传统的分布式事务管理方法,如两阶段提交,Saga通过异步执行减少了资源的锁定时间。

缺点

  • 复杂性增加:实现Saga需要额外的逻辑来管理每个事务的补偿操作,这增加了系统的复杂性。
  • 补偿的挑战:设计和实现有效的补偿事务可能很复杂,特别是在无法轻松撤销的操作中。
  • 性能影响:补偿事务的执行可能导致系统性能下降,尤其是在高失败率的环境中。

实现方式

Saga的实现通常依赖于事件驱动架构,每个服务执行完操作后会发布事件,其他服务通过监听这些事件来触发下一步操作或补偿。常见的实现工具和框架包括Axon Framework、Eventuate Tram等,它们提供了Saga模式的支持,简化了分布式事务的管理。

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

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

相关文章

虚拟机-从头配置Ubuntu18.04(包括anaconda,cuda,cudnn,pycharm,ros,vscode)

最好先安装anaconda后cuda和cudnn,因为配置环境的时候可能conda会覆盖cuda的路径(不确定这种说法对不对,这里只是给大家的建议) 准备工作: 1.Ubuntu18.04,x86_64,amd64 虚拟机下载和虚拟机Ubu…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写,发表于2002年。研究团队通过第一性原理计算,探讨了位错对氮化镓(GaN)电子能量损失谱(EEL)…

探索 2024 年 Web 开发最佳前端框架

前端框架通过简化和结构化的网站开发过程改变了 Web 开发人员设计和实现用户界面的方法。随着 Web 应用程序变得越来越复杂,交互和动画功能越来越多,这是开发前端框架的初衷之一。 在网络的早期,网页相当简单。它们主要以静态 HTML 为特色&a…

ArcGIS Pro横向水平图例

终于知道ArcGIS Pro怎么调横向图例了! 简单的像0一样 旋转,左转右转随便转 然后调整图例项间距就可以了,参数太多就随便试,总有一款适合你! 要调整长度,就调整图例块的大小。完美! 好不容易…

大型矿业集团安全知识竞赛主持词

男:尊敬的各位领导,员工同志们: 合:大家好! 男;首先让我们以热烈的掌声对公司领导亲临比赛现场指导观看表示欢迎! 男;继成功开展了荣辱观专题讲座、好矿嫂女红艺术展、安全谜语竞猜…

ArcGIS制作风向频率玫瑰图

风玫瑰图是气象科学专业统计图表,用来统计某个地区一段时期内风向、风速发生频率,又分为“风向玫瑰图”和“风速玫瑰图” ;因图形似玫瑰花朵,故名。风玫瑰图对于涉及城市规划、环保、风力发电等领域有着重要的意义。风玫瑰图能够直观的显现某地区不同方位风向的频率特征,进…

Python拆分PDF、Python合并PDF

WPS能拆分合并&#xff0c;但却是要输入编辑密码&#xff0c;我没有。故写了个脚本来做拆分&#xff0c;顺便附上合并的代码。 代码如下&#xff08;extract.py) #!/usr/bin/env python """PDF拆分脚本(需要Python3.10)Usage::$ python extract.py <pdf-fil…

TitanIDE与传统 IDE 比较

与传统IDE的比较 TitanIDE 和传统 IDE 属于不同时代的产物&#xff0c;在手工作坊时代&#xff0c;一切都是那么的自然&#xff0c;开发者习惯 Windows 或 MacOS 原生 IDE。不过&#xff0c;随着时代的变迁&#xff0c;软件行业已经步入云原生时代&#xff0c;TitanIDE 是顺应…

Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174

Ryujinx/Ryujinx Stars: 26.1k License: MIT Ryujinx 是用 C# 编写的实验性任天堂 Switch 模拟器。 该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约 4050 个测试&#xff0c;其中超过 4000 个可以启动并进入游戏&#xff0c;其中大约 340…

从小白-入门-进阶-高阶,四个阶段详细讲解单片机学习路线!

大家好&#xff0c;今天给大家介绍从小白-入门-进阶-高阶&#xff0c;四个阶段详细讲解单片机学习路线&#xff01;&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 单片机学习路…

第18次修改了可删除可持久保存的前端html备忘录

第17次修改了可删除可持久保存的前端html备忘录&#xff1a;增加年月日星期&#xff0c;增加倒计时&#xff0c;更改保存区名称可以多个备忘录保存不一样的信息&#xff0c;匹配背景主题&#xff1a;现代深色 <!DOCTYPE html> <html lang"zh"> <head&…

C语言例4-27:计算1+2+...+100之和(利用while语句实现)。

代码如下&#xff1a; //计算12...100之和&#xff08;利用while语句实现&#xff09;。 #include<stdio.h> int main(void) {int n1, sum0;while(n<100){ //复合语句作为当型循环结构的循环体sumsumn;n;}printf("sum %d\n",sum);retu…

Capture One Pro 22 for Mac/win:重塑RAW图像处理的艺术

在数字摄影的世界里&#xff0c;RAW图像处理软件无疑是摄影师们手中的魔法棒&#xff0c;而Capture One Pro 22无疑是这一领域的璀璨明星。这款专为Mac和Windows系统打造的图像处理软件&#xff0c;以其出色的性能、丰富的功能和极致的用户体验&#xff0c;赢得了全球摄影师的广…

ES6 学习(三)-- es特性

文章目录 1. Symbol1.1 使用Symbol 作为对象属性名1.2 使用Symbol 作为常量 2. Iterator 迭代器2.1 for...of循环2.2 原生默认具备Interator 接口的对象2.3 给对象添加Iterator 迭代器2.4 ... 解构赋值 3. Set 结构3.1 初识 Set3.2 Set 实例属性和方法3.3 遍历3.4 相关面试题 4…

代码学习记录29----贪心最后一天

随想录日记part29 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.28 主要内容&#xff1a;今天是学习贪心算法最后一天&#xff0c;接下来是针对题目的讲解&#xff1a;1.单调递增的数字;2.监控二叉树; 3. 总结 738.单调递增的数字 968.监控二叉树 总结 To…

【直播课】2024年PostgreSQL CM认证实战培训课程于4月27日开课!

课程介绍 了解关注开源技术&#xff0c;学习PG以点带面 Linux/Andriod&#xff08;操作系统&#xff09;、Apache/Tomcat&#xff08;应用服务器&#xff09;、OpenStack/KVM&#xff08;虚拟化&#xff09;、Docker/K8S&#xff08;容器化&#xff09;、Hadoop&#xff08;大…

通过WSL在阿里云上部署Vue项目

参考&#xff1a; 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统&#xff0c;还有其他的进入方式。 选择ubuntu系统&#xff08;和WSL使用相同的系统&#xff09;。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…

玩电脑突然停电对电脑有影响吗

在现代社会中&#xff0c;电脑已成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;当我们正在专注于工作或娱乐时&#xff0c;突然停电可能会给我们带来不小的困扰。那么&#xff0c;玩电脑时突然停电会对电脑产生哪些影响呢&#xff1f;本文将深入探讨这一问题&…

踩坑uniapp中打包Andiord app,在真机调试时地图以及定位功能可以正常使用,打包成app后失效的问题

首先看到这是uni官网提出的&#xff0c;app上建议使用高德地图。 下面就用高德地图进行配置。 步骤一&#xff1a;登陆高德地图控制台 名称和类型根据自己情况填写选择即可 步骤二&#xff1a; 添加key 步骤三&#xff1a;取到SHA1 进入uniapp开发官网 点击应用名称&#…

Chrome 插件 tabs API 解析

Chrome.tabs API 解析 使用 chrome.tabs API 与浏览器的标签页系统进行交互&#xff0c;可以使用此 API 在浏览器中创建、修改和重新排列标签页 Tabs API 不仅提供操作和管理标签页的功能&#xff0c;还可以检测标签页的语言、截取屏幕截图&#xff0c;以及与标签页的内容脚本…