首页 > 其他分享 >分布式事务

分布式事务

时间:2023-09-27 10:02:33浏览次数:37  
标签:事务 模式 分布式系统 全局 TC 分布式

    分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如跨数据源的分布式事务还有跨服务的分布式事务而分布式事务中又有很多个本地事务,在每个本地事务中药保证ACID的原则,而分布式事务呢我们就可以把所有的事务看作是一个业务,也就是全局事务,要保证全局事务的原子性,要么所有本地事务都成功,要么全部失败,这就是分布式事务,而分布式事务满足CAP定理即在分布式系统中不可能同时满足C、A、P,C、A、P是分布式系统三个指标分别代表一致性、可用性和分区容错性,一致性就是用户访问分布式系统中的任意节点,得到的数据必须一致可用性就是用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝而分区容错性就是如果系统因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,就会形成独立分区来保障系统可用,在分布式系统中,P是一定要保证的,因为网络等一些客观因素是不可避免的此时就要保证分区容错,而在分布式系统中,C和A是矛盾的,不可能同时满足,因为满足P的同时,如果要保证一致性,就必须等待网络恢复,完成数据同步后,整个集群才对外提供服务,服务处于阻塞状态,不可用如果要保证可用性,就不能等待网络恢复那么各个节点之间就会出现数据不一致这就是分布式事务的CAP定理。而因为分布式事务只能满足CP或AP,这时候就会出现一些问题,为了解决这些问题,分布式事务又引入了BASE理论,BASE理论包含三个思想,BA是基本可用,分布式系统在出现故障时,允许损失部分可用性,即保证核心可用S是软状态,在一定时间内,允许出现中间状态,比如临时的不一致状态还有E是最终一致性,虽然分布式事务无法保证强一致性,但是在软状态结束后,可以保证终达到数据一致分布式事务最大的问题就是各个子事务的一致性问题,因此根据CAP定理和BASE理论可以提出一些解决办法,在AP模式下,各个子事务分别执行和提交,允许出现结果不一致,然后采用弥补措施来回复数据,来实现最终一致。而在CP模式下,可以让各个子事务执行后相互等待,同时提交同时回滚,并且在事务相互等待的过程中,让处于等待状态的子事务处于弱可用状态,来达成强一致。但不管是哪一种模式,都需要在子系统事务之间互相通讯,协调事务状态,也就是需要一个事务协调者TC,这里的子事务,称分支事务,所有分支在一起被称为全局事务。基于这种模式的架构方案有很多,其中最火的就是Seata,在Seata的架构下,TC也就是事务协调者,可以维护全局和分支事务的状态,协调全局事务提交或回滚,TM也就是事务管理器,会定义全局事务的范围、开始全局事务并且提交或回滚全局事务,还有RM也就是资源管理器,是用来管理分支事务处理的资源,与TC交谈注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。基于这样的架构呢Seata提供了四种不同的分布式事务解决方案,第一种是XA模式,XA模式是牺牲一定的可用性,来保证强一致性的分阶段事务模式,无业务入侵,第二种是TCC模式,TCC模式是达成最终一致的分阶段事务模式,他是有业务入侵的,第三种是AT模式,AT模式也是达成最终一致的分阶段事务模式,但是他没有业务入侵,AT模式也是Seata的默认模式,第四种就是SAGA模式,SAGA模式是长事务模式,他也有业务入侵。下面就来详细说说AT模式的基本流程,AT模式分为两个阶段,第一阶段,TM,向TC发送指令开启全局事务,然后由TM调用分支,再由资源管理器RM向TC发送指令注册分支事务,注册成功后再去执行sql并提交分支事务,在提交前后会将修改前后的数据储存在undolog数据表中,称为快照,第二阶段,当所有分支事务都提交后,TM会向TC发送指令来提交或回滚全局事务,然后TC会去检查每个提交的分支事务的状态,若无异常就由TM执行提交全局事务,并删除undolog中的数据,若是其中任意一个分支事务出现了问题,则TC会协调TM去回滚全局事务,然后根据存储到undolog中的数据将数据恢复到执行更新前的版本,最后删除undolog中的数,这就是Seata的AT模式。

标签:事务,模式,分布式系统,全局,TC,分布式
From: https://www.cnblogs.com/jinfangwei/p/17731982.html

相关文章

  • SpringBoot | Redis序列化与分布式锁
    欢迎参观我的博客,一个Vue与SpringBoot结合的产物:https://poetize.cn博客:https://gitee.com/littledokey/poetize-vue2.git聊天室:https://gitee.com/littledokey/poetize-im-vue3.git后端:https://gitee.com/littledokey/poetize.git七牛云登录/注册地址(文件服务器,CDN):https:/......
  • 如何设计实现一个好用的分布式监控体系?
    dg-publish:truetitle:可观测性:如何设计实现一个好用的分布式监控体系?createTime:2023-09-2523:35tags:-kafka可观测性:如何设计实现一个好用的分布式监控体系?怎样实现好用的指标和日志模块,以便我们快速定位业务问题出在哪里指标需要关注哪几个维度?从技术上看,指标......
  • 如何实现简单的分布式链路功能?
    为什么需要链路跟踪为什么需要链路跟踪?微服务环境下,服务之间相互调用,可能存在A->B->C->D->C这种复杂的服务交互,那么需要一种方法可以将一次请求链路完整记录下来,否则排查问题不好下手、请求日志也无法完整串起来。如何实现链路跟踪假设我们从用户请求接口开始,每次请求需要有......
  • Spring事务的传播机制
     https://www.bilibili.com/video/BV1hu411N7gA/?p=6&spm_id_from=pageDriver&vd_source=0d7b1712ce42c1a2fa54bb4e1d601d78......
  • Hadoop是什么? Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并
    Hadoop是什么?Hadoop是一个由Apache开发的开源分布式计算框架,它能够处理大规模数据并行处理任务,支持大规模数据存储和处理。Hadoop的核心组件包括分布式文件系统HDFS和分布式计算框架MapReduce,它们使得Hadoop可以在廉价的硬件上并行地处理大量数据。Hadoop还包括很多相关的项目和子......
  • 分布式操作系统是操作系统的终极形态吗?​
    昨天一位网友私信我,提出一个问题:“Laxcus分布式操作系统会不会是操作系统发展的终极形态?”。今天觉得有必要把这件事说一说,所以就忙里偷闲写下这篇文章。咱们先说结论:是也不是,需要具体情况具体分析。操作系统发展到今天,基本分为两种:面向个人工作的操作系统,和面向企业业务的操作系统......
  • MySQL事务死锁问题排查
    一、背景在预发环境中,由消息驱动最终触发执行事务来写库存,但是导致MySQL发生死锁,写库存失败。com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:rpcerror:code=Aborteddesc=Deadlockfoundwhentryingtogetlock;tryrestartingtransaction(er......
  • 【北亚企安数据恢复】Ceph分布式存储基本架构&概念&Ceph数据恢复流程
    Ceph存储基本架构:Ceph存储可分为块存储,对象存储和文件存储。Ceph基于对象存储,对外提供三种存储接口,故称为统一存储。Ceph的底层是RADOS(分布式对象存储系统),RADOS由两部分组成:OSD和MON。MON负责监控整个集群,维护集群的健康状态,维护展示集群状态的各种图表,如OSDMap、MonitorMap、......
  • es 的分布式架构原理能说一下么( es 是如何实现分布式的啊) ?
    ElasticSearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。核心思想就是在多台机器上启动多个es进程实例,组成了一个es集群。es中存储数据的基本单位是索引,比如说你现在要在es中存储一些订单数据,你就应该在es中创建一个索引order_idx,所有的订单数据......
  • 使用 Spring Integration 实现基于 Redis 的分布式锁以及踩坑
    背景分布式锁的应用场景应该还是蛮多的,这里就不赘述了。之前在开发中实现分布式锁都是自己基于Redis造轮子,虽然也不复杂并且自己实现一次能对分布式锁有更深的了解,但是终归有些麻烦。尤其是新项目需要的时候还得CV一次。然后在查询过程中(毫不意外地)发现Spring有现成的组......