分布式事务
介绍业内分布式事务
普通网友
这个作者很懒,什么都没留下…
展开
-
分布式事务 知识点01
Seata模式Seata关注的是微服务架构下的数据一致性问题,是整套的分布式事务解决方案。Seata框架包含两种模式:AT模式,关注的是数据分片角度,关注DB访问的数据一致性,多服务下多DB数据访问的一致性 TCC模式,TCC模式主要是围绕业务拆分展开,当业务在横向扩展资源时,解决了服务之间调用的一致性,保证资源访问的事务性AT模式AT模式下会把每个DB当作一个Resource,数据库就是 DataSource Resource。业务通过标准的JDBC接口访问数据库资源,Seata框架会..原创 2020-05-23 11:35:44 · 67 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 08 TCC 模式实现
TCC 原理图如下分为如下几步1.业务方调用各个微服务的try()方法,执行资源检查及预留操作2.当所有try()方法均执行成功时,对全局事务进行提交,即由事务管理器调用每个微服务的confirm()方法当任意一个方法try()失败(预留资源不足,抑或网络异常,代码异常等任何异常),由事物管理器调用每个微服务的cancle()方法对全局事务进行回滚try(), confirm(...原创 2019-09-15 13:23:14 · 344 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 07 服务端AT模式实现
服务端实现,都在DefaultCoordinator,实质上是调用defaultCore的方法1.首先创建全局globalSession,并且增加对应的监听器2.session.begin(); 开启session3.通过eventBus 下发globalTransaction 事件4.返回全局事务的xid++++++++++++++++++++++++++++++++...原创 2019-09-14 16:27:06 · 240 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 06 客户端AT模式实现03 第二阶段
第二阶段 异步删除分支 UndoLog如果一阶段成功,则TC会通知客户端RM进行第二阶段的提交工作,这部分代码最终实现位于AsyncWorker类中的branchCommit方法。1.分支信息,会插入到内存中的异步队列Async_commit_buffer2. 插入 ASYNC_COMMIT_BUFFER 之后,AsyncWorker 类中会有一个定时任务,从队...原创 2019-09-14 15:18:09 · 151 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 05 客户端AT模式实现02 第一阶段
AT 实现客户端部分,主要在rm-dataSource中重点实现还是在statementProxy查看一个execute方法,首先会调用executeTemplate.execute方法1、首先判断,如果当前不是全局事务,并且没有全局锁,那么就直接execute执行这个sql,返回对应的结果即可2、如果当前处于全局事务,就先判断SQL的类型,创建不同类型的ex...原创 2019-09-14 11:34:10 · 148 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 04 AT模式实现01
AT需要借助全局锁,如果第一阶段分支事务成功,第二阶段一开始全局锁就会被释放第一阶段 核心在于对业务sql进行解析,转换成undolog,并同时入库第二阶段分布式事务操作成功,则TC通知RM异步删除undolog分布式事务操作失败,TM向TC发送回滚请求,RM 收到协调器TC发来的回滚请求,通过 XID 和 Branch ID 找到相应的回滚日志记录,通过回滚记录...原创 2019-09-14 11:33:50 · 184 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 03 RM的实现02
继续看下branchRollbackrm执行undo操作,分成mysql和oracle的版本tcc执行同上,调用回滚方法,返回结果+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++branchRegister 分支注册原理和之前差不多,构建对应的request,底层依旧是调用channel...原创 2019-09-13 23:28:24 · 120 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 02 RM的实现01
核心接口实现,在core包中的ResourceManager,也分别继承于ResourceManagerInbound,ResourceManagerOutbound提供的接口方法如下:1.branchCommit : 分支提交2.branchRollback :分支回滚3.branchRegister : 分支注册4.branchReport : 分支上报信息5.lo...原创 2019-09-13 22:53:11 · 155 阅读 · 0 评论 -
分布式事务 中间件 Seata 源码分析 01 源码结构概述
1.all :空module,没有java代码2.bom : 空module,没有java代码3.codec :序列化编码,目前支持kyro,protoBuf和seata,对各种request和response进行编码codec4.common :提供 Seata 封装的工具类、异常类,线程相关的类等,大概在 2022 行代码左右。5.config :用于 Seata ...原创 2019-09-13 17:18:41 · 146 阅读 · 0 评论 -
分布式事务 中间件 Seata学习 五 官方文档04
AT 一阶段过程:解析 SQL:得到 SQL 的类型(UPDATE),表(product),条件(where name = 'TXC')等相关的信息。 查询前镜像:根据解析得到的条件信息,生成查询语句,定位数据。 执行业务 SQL:更新这条记录的 name 为 'GTS'。 查询后镜像:根据前镜像的结果,通过主键定位数据。 插入回滚日志:把前后镜像数据以及业务 SQL 相关的信...原创 2019-09-13 17:16:48 · 771 阅读 · 0 评论 -
分布式事务 中间件 Seata学习 四 官方文档03
两阶段提交协议的演变: 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。 二阶段: 提交异步化,非常快速地完成。 回滚通过一阶段的回滚日志进行反向补偿。 在一阶段事务提交前,确保拿到全局锁;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++...原创 2019-09-13 17:02:07 · 195 阅读 · 0 评论 -
分布式事务 中间件 Seata学习 三 官方文档02
全局事务的隔离性是建立在分支事务的本地隔离级别基础之上的。在数据库本地隔离级别读已提交或以上的前提下,Fescar 设计了由事务协调器维护的全局写排他锁,来保证事务间的写隔离,将全局事务默认定义在读未提交的隔离级别上。我们对隔离级别的共识是:微服务场景产生的分布式事务,绝大部分应用在读已提交的隔离级别下工作是没有问题的。而实际上,这当中又有绝大多数的应用场景,实际上工作在...原创 2019-09-13 15:26:45 · 1909 阅读 · 0 评论 -
分布式事务 中间件 Seata学习 二 官方文档01
来看一下seata 官方文档https://github.com/seata/seata/wiki/%E6%A6%82%E8%A7%88对业务无侵入:这里的侵入是指,因为分布式事务这个技术问题的制约,要求应用在业务层面进行设计和改造。这种设计和改造往往会给应用带来很高的研发和维护成本。我们希望把分布式事务问题在中间件这个层次解决掉,不要求应用在业务层面做额外的工作。 高性能:...原创 2019-09-12 21:35:54 · 1032 阅读 · 0 评论 -
分布式事务 中间件 Seata学习 一
分布式事务框架Seata架构Seata目前的事务模式有AT,TCC,Saga三种模式,默认即是AT模式,AT本质上是2pc协议的一种实现,三种模式的不同后面文章再详细介绍。如图所示,对于每一个服务而言都有两种角色(TM,RM),在全局事务的过程中,它们会与TC进行通信协助完成整个事务,可以简单介绍下每个角色的作用:TC: Transaction Coordinator,...原创 2019-09-12 21:28:47 · 345 阅读 · 0 评论 -
分布式事务Seata 深入分析三 知识点收集
Transcation Coordinator为什么之前一直强调TC是核心呢?那因为TC这个角色就好像上帝一样,管控着云云众生的RM和TM。如果TC一旦不好使,那么RM和TM一旦出现小问题,那必定会乱的一塌糊涂。所以要想了解Seata,那么必须要了解他的TC。那么一个优秀的事务协调者应该具备哪些能力呢?我觉得应该有以下几个: 正确的协调:能正确的协调RM和TM接下来应该做什么,做错了...原创 2019-12-18 21:51:40 · 464 阅读 · 0 评论 -
分布式事务Seata 深入分析二
分布式事务中间件Seata的设计原理那 Seata 是怎么做到的呢?下面说说它的各个模块之间的关系。Seata 的设计思路是将一个分布式事务可以理解成一个全局事务,下面挂了若干个分支事务,而一个分支事务是一个满足 ACID 的本地事务,因此我们可以操作分布式事务像操作本地事务一样。Seata 内部定义了 3个模块来处理全局事务和分支事务的关系和处理过程,这三个组件分别是:Trans...原创 2019-12-17 21:53:16 · 262 阅读 · 0 评论 -
分布式事务Seata 深入分析一
2.为什么XA大家都不用?其实也并非不用,例如在IBM大型机上基于CICS很多跨资源是基于XA协议实现的分布式事务,XA也事实上算分布式事务处理的规范了,但在为什么互联网中很少使用,究其原因我觉得有几个:性能(阻塞性协议,增加响应时间、锁时间、死锁) 数据库支持完善度(MySQL 5.7之前都有缺陷) 协调者依赖独立的J2EE中间件(早期重量级Weblogic、Jboss,后期轻量级A...原创 2019-12-16 23:43:30 · 2093 阅读 · 0 评论 -
分布式事务 业内方案对比
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免。ACID指数据库事务正确执行的四个基本要素:原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)CAPCAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consi...原创 2019-12-16 21:04:41 · 149 阅读 · 0 评论