首页 > 其他分享 >如何理解分布式事务

如何理解分布式事务

时间:2024-10-18 16:47:48浏览次数:9  
标签:事务 协调者 理解 阶段 提交 参与者 分布式

在分布式系统环境中,分布式事务是一个关键的技术挑战。那么,什么是分布式事务呢?让我们一起来深入理解。

一、分布式事务的定义

分布式事务是指在分布式系统中,为了保证数据的一致性,涉及多个节点的事务操作。在传统的单体应用中,事务通常由数据库管理系统来处理,保证了数据的一致性和完整性。然而,在分布式系统中,由于数据分布在不同的节点上,事务的处理变得更加复杂。

二、分布式事务的挑战

  1. 数据一致性
    • 在分布式系统中,由于数据分布在不同的节点上,如何保证多个节点上的数据一致性是一个挑战。如果一个事务涉及多个节点的操作,当其中一个节点出现故障时,如何保证整个事务的原子性、一致性、隔离性和持久性(ACID)是一个难题。
  2. 性能问题
    • 分布式事务通常需要跨多个节点进行协调和通信,这会带来一定的性能开销。如何在保证数据一致性的前提下,尽量减少性能开销是一个挑战。
  3. 网络延迟和故障
    • 在分布式系统中,网络延迟和故障是不可避免的。如何处理网络延迟和故障,保证分布式事务的正常执行是一个挑战。

三、分布式事务的解决方案

  1. 两阶段提交(2PC)

    • 两阶段提交是一种经典的分布式事务解决方案。它将事务的提交过程分为两个阶段:准备阶段和提交阶段。在准备阶段,事务协调者向所有参与者发送准备请求,参与者执行事务操作,并将结果反馈给协调者。如果所有参与者都反馈成功,协调者在提交阶段向所有参与者发送提交请求,参与者提交事务。如果有任何一个参与者反馈失败,协调者在提交阶段向所有参与者发送回滚请求,参与者回滚事务。
    • 优点:保证了事务的原子性和一致性。
    • 缺点:性能开销较大,存在单点故障问题。
  2. 三阶段提交(3PC)

    • 三阶段提交是在两阶段提交的基础上进行改进的一种分布式事务解决方案。它将事务的提交过程分为三个阶段:准备阶段、预提交阶段和提交阶段。在准备阶段,事务协调者向所有参与者发送准备请求,参与者执行事务操作,并将结果反馈给协调者。如果所有参与者都反馈成功,协调者在预提交阶段向所有参与者发送预提交请求,参与者执行预提交操作,并将结果反馈给协调者。如果所有参与者都反馈成功,协调者在提交阶段向所有参与者发送提交请求,参与者提交事务。
    • 优点:相比两阶段提交,减少了阻塞时间,降低了单点故障的影响。
    • 缺点:仍然存在性能开销较大的问题。
  3. TCC(Try-Confirm-Cancel)

    • TCC 是一种基于补偿机制的分布式事务解决方案。它将事务的执行过程分为三个阶段:Try 阶段、Confirm 阶段和 Cancel 阶段。在 Try 阶段,尝试执行事务操作,并预留资源。如果 Try 阶段执行成功,进入 Confirm 阶段,确认执行事务操作。如果 Try 阶段执行失败,进入 Cancel 阶段,取消执行事务操作,并释放预留的资源。
    • 优点:性能较好,不存在单点故障问题。
    • 缺点:开发难度较大,需要业务系统实现 Try、Confirm 和 Cancel 三个阶段的逻辑。
  4. 基于消息队列的最终一致性

    • 基于消息队列的最终一致性是一种通过消息队列来实现分布式事务的解决方案。它将事务的执行过程分为两个阶段:事务发起阶段和事务补偿阶段。在事务发起阶段,事务发起者将事务操作封装成消息发送到消息队列中,消息消费者从消息队列中获取消息并执行事务操作。如果事务操作执行成功,消息消费者向消息队列发送确认消息,事务发起者接收到确认消息后,认为事务执行成功。如果事务操作执行失败,消息消费者向消息队列发送回滚消息,事务发起者接收到回滚消息后,进行事务补偿操作。
    • 优点:性能较好,不存在单点故障问题。
    • 缺点:实现相对复杂,需要保证消息的可靠性和顺序性。

四、分布式事务的应用场景及案例

(一)电商系统订单处理

  • 在电商系统中,当用户下单时,会涉及多个服务的操作。比如订单服务创建订单,库存服务扣减库存,支付服务处理支付。如果其中一个服务出现问题,整个事务需要回滚以保证数据一致性。
  • 假设用户下单购买一件商品,订单服务创建订单后,向库存服务发送扣减库存的请求。如果库存服务成功扣减库存,但支付服务出现故障导致支付失败,这时就需要通过分布式事务机制来协调各个服务。可以采用 TCC 模式,订单服务在 Try 阶段创建订单并标记为待支付状态,库存服务在 Try 阶段预留库存,支付服务在 Try 阶段检查支付条件。如果所有 Try 阶段都成功,进入 Confirm 阶段,订单服务标记订单为已支付,库存服务确认扣减库存,支付服务完成支付操作。如果某个服务的 Try 阶段失败,则进入 Cancel 阶段,订单服务取消订单,库存服务释放预留库存。

(二)银行转账系统

  • 在银行转账系统中,从一个账户向另一个账户转账涉及多个数据库的操作。转出账户所在的数据库需要减少金额,转入账户所在的数据库需要增加金额。
  • 例如,用户 A 向用户 B 转账 1000 元。可以使用两阶段提交来保证事务的一致性。事务协调者首先向转出账户数据库和转入账户数据库发送准备请求,转出账户数据库冻结 1000 元资金并反馈准备成功,转入账户数据库检查账户状态并反馈准备成功。如果所有参与者都反馈成功,协调者发送提交请求,转出账户数据库减少 1000 元金额,转入账户数据库增加 1000 元金额。如果有任何一个参与者反馈失败,协调者发送回滚请求,转出账户数据库解冻 1000 元资金。

五、总结

分布式事务是分布式系统中的一个关键技术挑战,它涉及到数据的一致性、性能、网络延迟和故障等问题。为了解决这些问题,出现了多种分布式事务解决方案,如两阶段提交、三阶段提交、TCC 和基于消息队列的最终一致性等。在实际应用中,需要根据具体的业务场景和需求选择合适的分布式事务解决方案。

文章(专栏)将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

个人小工具程序上线啦,通过公众号(服务端技术精选)菜单【个人工具】即可体验,欢迎大家体验后提出优化意见!500 个访问欢迎大家踊跃体验哦~

标签:事务,协调者,理解,阶段,提交,参与者,分布式
From: https://blog.csdn.net/u010223407/article/details/143057660

相关文章

  • Spring中的事务提交事件
    如果想在spring操作事务结束后执行一些代码,应该怎么办?为什么要这样?比如我们在事务中给其他系统发了消息,期望事务提交后过一会收到这个系统的回应,然后操作刚刚提交的数据。但是如果回应来的太快就像龙卷风,我们的事务是托管给Spring的可能还没提交,也就没法操作了一个方案是使用......
  • 堆栈!言简意赅理解!
    前言        在我们的生活中,常常会遇到需要整理和管理物品的情况,比如在玩具箱中放置玩具。我们可以把最后放进箱子的玩具放在最上面,这样我们每次玩耍时,只需从最上面拿出玩具即可。这种管理方式称为“堆栈”。在计算机科学中,堆栈是一种重要的数据结构,能够以“后进先出......
  • 深入理解浮点数的运算
    浮点数的运算步骤浮点数的加减运算一般由以下五个步骤完成:对阶、尾数运算、规格化、舍入处理、溢出判断所谓对阶是指将两个进行运算的浮点数的阶码对齐的操作。对阶的目的是为使两个浮点数的尾数能够进行加减运算。因为,当进行$M_{x}\times2^{E_{x}}$与$M_{y}\times2^{E......
  • 【人工智能-初级】第5章 支持向量机(SVM):原理解析与代码实现
    文章目录一、支持向量机简介二、支持向量机的数学原理2.1线性可分支持向量机2.2软间隔与非线性支持向量机2.3核函数三、SVM的优缺点3.1优点3.2缺点四、Python实现支持向量机4.1导入必要的库4.2生成数据集并进行预处理4.3创建SVM分类器并进行训练4.4模型预测与......
  • SpringBoot驱动的智能物流管理解决方案
    1系统概述1.1研究背景随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理智能物流管理系统的相关信息成为必然。开发合适的智能物流管理系统,可以方便管理人员对智能......
  • 深入理解浮点数的表示
    浮点数的表示通常,浮点数表示为:\[N=(-1)^{S}\timesM\timesR^{E}\]其中,S取值为0或者1,用来决定浮点数的符号;M是一个二进制定点小数,称为尾数,一般用定点原码小数表示;E是一个二进制顶点整数,称为阶码或者指数,用移码表示。R是基数(隐含),可以约定为2、4、16等浮点数的表示范围......
  • 分布式集群商城应用部署
    一、准备工作1.节点规划节点部署Ip主机名节点192.168.119.147db1数据库集群主节点192.168.119.153db2数据库集群从节点192.168.119.154MycatMycat中间件服务节点192.168.119.165Zookeeper1,kafka集群节点192.168.119.158Zookeeper2,kafka......
  • k8s-Longhorn系统配置 20241017 -分布式存储
    目录一Longhorn存储部署1.1Longhorn概述1.2Longhorn部署1.5动态sc创建1.6测试PV及PVC1.7Ingress暴露Longhorn1.8确认验证附加Helm部署附0.1helm安装附0.2helm安装 回到顶部一Longhorn存储部署1.1Longhorn概述Longhorn是用于Kubernetes的......
  • 【Linux线程】Linux多线程编程:深入理解线程互斥与同步机制
    ......
  • 《使用Gin框架构建分布式应用》阅读笔记:p77-p87
    《用Gin框架构建分布式应用》学习第5天,p77-p87总结,总计11页。一、技术总结1.Go知识点(1)context2.on-premisessoftwarep80,AcontainerislikeaseparateOS,butnotvirtualized;itonlycontainsthedependenciesneededforthatoneapplication,whichmakesthe......