分布式事务
文章平均质量分 85
分布式事务
猎户星座。
花有重开日,人无再少年。
展开
-
Seata-TCC模式
下单请求给到事务协调者,首先调用订单服务Try方法执行下单中的逻辑,然后调用库存服务,锁定库存,事务协调者如果没有收到问题反馈,就调用每个具体服务的Confirm,即调用订单服务Confirm执行支付逻辑,调用库存服务Confirm执行扣减库存的逻辑,如果扣减库存出问题了,就调用订单服务的Concel执行未支付或回滚的逻辑。TCC是二阶段提交协议,Try-Confirm-Cancel(资源预留、确认操作、取消操作),Try是对当前业务资源的检查,如果成功,则Confirm提交,否则Cancel回滚。转载 2024-02-24 21:44:29 · 38 阅读 · 0 评论 -
Seata-Saga模式
XA和AT都是数据源代理,业务侵入型少;比如图1中这3个完全没有关系的服务,在总业务逻辑处理的时候,使用Saga的状态机来定义,调用服务1,再调用服务2,再调用服务3。Seata中的Saga事务模式是由外部的Saga提供的状态机来进行完成的,需要定义总流程,状态机里可以定义当前节点的调用服务,而且每个节点上可以配置当前这个调用服务的反向补偿节点。一阶段正向执行,比如T1和T2正常,T2到T3也正常,T3位置出现问题了, 就需要整体的回滚,这个时候就会进行反向补偿,把之前的已成功的状态都补偿回去。转载 2024-02-24 21:43:29 · 156 阅读 · 0 评论 -
Seata-XA模式
如果库存减1了,订单并没有真正创建,这个时候读库存,读到的确实是99,这个99就是所谓的中间状态,这个就是脏读。AT、SAGA、TCC都是补偿型的,都会出现脏读的情况,当然Seata本身是有预防的,但确实会存在这些问题:可能会得到脏数据且最终一致性是允许有中间状态的,这也解释了为什么Seata支持XA,因为XA是强一致性的。如果一个参与全局事务的RM资源失联了,收不到分支事务的结束命令,那它锁定的数据就会被一直锁定,就有可能会产生死锁,这是XA协议要解决的核心问题,也是Seata引入XA模式要解决的问题。转载 2024-02-24 21:41:50 · 104 阅读 · 0 评论 -
Seata-AT模式
一阶段,会拦截业务sql(比如订单先调用库存(库存减1),再生成订单),Seata解析sql语句,同时要找到当前要更新的业务数据,比如库存减1,在数据被更新前,保存undolog日志,再执行业务sql,更新之后的数据再保存到redolog日志。回滚的时候所用到的数据就在undolog,即在数据被正式更新之前所保存下来的原数据作为回滚的依据,通过回滚反向生成sql完成分支事务的回滚,事务结束后会释放所有资源和删除所有日志。TM发起全局事务的执行,不同的分支事务需要执行自己的本地事务。转载 2024-02-24 21:40:27 · 59 阅读 · 0 评论 -
分布式事务之Saga
这个名字的选取反映了这种模式的特点,即由一系列的事务(或步骤)组成一个更大的操作,每个步骤都是整体操作的一部分。Saga中的每个操作都是一个事务,而且都有相应的补偿事务。"Saga"这个词原本是北欧的一种故事叙述形式,通常用于描述英雄的冒险或者王室的历史,特点是由一系列的事件或者故事组成,这些事件或故事虽然各自完整,但是都是整体叙述的一部分。补偿事务的作用是,当某个操作失败时,执行与之前所有成功的操作对应的补偿事务,来把数据状态回滚到执行Saga之前的状态,以保证数据的一致性。三、Saga模式的优劣。转载 2024-02-19 15:32:53 · 373 阅读 · 0 评论 -
servicecomb-pack
前言:servicecomb-pack 包括2大部分即 alpha、omega ,其中alpha相当于管理端服务端,而omega是需要嵌入到业务代码中,是一个client端,接收、上报给alpha事务ID以及执行状态。而事务协议又包括2种即saga与tcc,我们在omega-transport这个项目模块,包括支持的项目框架:dubbo、feign、hystrix、resttemplate、servicecomb,在官方文档里或者代码demo里没有关于springcoud feign的相关实例,可能感觉原创 2022-01-27 14:17:53 · 348 阅读 · 0 评论 -
RockerMq之事务消息
本篇博客的RocketMq版本为4.3.0,首先附上RocketMq事务消息的流程图,以下的实践也都是基于此流程图生产端项目RocketMqConfig配置生产者package com.yj.producer.config;import org.apache.rocketmq.client.producer.TransactionMQProducer;import org....原创 2020-01-28 16:26:49 · 495 阅读 · 0 评论 -
Atomikos简介
开发原因在Java后端开发过程中事务控制非常重要,而Spring为我们提供了方便的声明式事务方法@transactional。但是默认的Spring事务只支持单数据源,而实际上一个系统往往需要写多个数据源,这个时候我们就需要考虑如何通过Spring实现对分布式事务的支持。开发思路对于数据库层面的分布式事务而言,JTA(Java Transaction API,XA的JAVA实现方案)是...原创 2020-01-27 15:47:45 · 15007 阅读 · 4 评论 -
Seata简介
简介Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。支持AT、TCC、SAGA、XA四种模式,对微服务框架支持友好。如下图所示,Seata 中有三大模块,分别是 TM、RM 和 TC。 其中 TM 和 RM 是作为 Seata 的客户端与业务系统集成在一起,TC 作为 Seata 的服务端独立部署。TC - 事务协调者 维护全局...转载 2020-01-22 14:29:58 · 3748 阅读 · 0 评论 -
分布式事务及常见解决方案
试想一个由两台服务器一起参与的事务,服务器A发起事务,服务器B参与事务,B的事务需要人工参与,所以处理时间可能很长。如果按照ACID的原则,要保持事务的隔离性、一致性,服务器A中发起的事务中使用到的事务资源将会被锁定,不允许其他应用访问到事务过程中的中间结果,直到整个事务被提交或者回滚。**主事务记录 Activity:**主事务记录是整个分布式事务的主体,其最核心的数据结构是事务号(TX_ID)和事务状态(STATE),它是在启动分布式事务的时候持久化写入数据库的,它的状态决定了这笔分布式事务的状态。转载 2020-01-19 19:13:30 · 2492 阅读 · 0 评论 -
SpringCloud之Seata整合
附:SpringCloud之系列教程汇总跳转地址一、环境搭建①首先,我们采用的是Eureka作为Seata的配置中心,所以先启动EurekaServer②下载seata-server-0.9.0.zip,解压,修改配置文件registry.confregistry { # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa t...原创 2020-01-17 22:38:07 · 2304 阅读 · 0 评论