分布式事物SAGA
概述SAGA
SAGA是1987 Hector & Kenneth 发表的论文,主要是解决长事务执行的问题。有的系统比较旧同时也需要长事物,不能改造,那么比较适用这种场景处理,还有金融行业比较适合用这种事务,主要也是流程会比较长。
SAGA的执行方式
SAGA是两层执行的,事物按流程T1,T2,,,TN。那么与之对应的就是C1,C2,,,CN。也就是由N个分布式事务组织,同时也有N个回滚事务与之对应。如下图,3个服务,A,B,C,这3个服务是按顺序执行的,如果B事务执行失败了,那么就会执行B事务的回滚操作。

当事务执行的时间比较长的话,那么需要与之对应的回滚服务。
存在的问题
我们举个转账的例子吧,A账户向B账户进行转账,A、B账户各100元,B账户需要+50元,A账户需要-50元,这个时候假如有两个不同的银行,那么会有两个服务。当B账户增加了50元的时候,A账户还没有-50元,也就意味着,此时已经将B账户增加增加好了,事务已经执行成功了。我们还需要执行回滚操作,将B账户增加的钱减回去。
因为金融行业,可以多出来钱,不能少钱,因为钱少了就找不回来了这种特性,所以在设计的时候需要先将账户加钱。
再一个SAGA只允许两层嵌套,因为流程已经很长了,嵌套多了在深度和性能上都不允许。
重试机制
还是如上例子,当A账户转账完了之后,往B账户转账失败了,那么需要将失败的情况记录下来。并且服务需要设计成幂等的,这个时候有个程序来检查任务,然后再进行重试,重试次数多了也不会对结果造成影响。
重试可以采用指数形式进行,且重试到一定次数的时候将进行预警,然后人工介入。
SAGA VS TCC
- TCC采用的中间的状态进行的数据存储,中间如果有数据查询的话不会影响结果。而SAGA会直接将事务进行提交,没有中间的结果。整个事务执行完了之后可能对结果造成变化。
- TCC需要编写try,confirm,cancel三个服务的逻辑,这样代码会非常多。但是因为逻辑代码可以控制且中间态也不影响结果,处理速度会比较快,高并发执行效率高,深受互联网欢迎。而SAGA对业务的侵入会较低,通过注解的方式可以
- 流程较长的时候需要采用SAGA,业务流程长,业务流程复杂,当针对旧代码不能改造成分布式事务的代码可以选择SAGA。TCC比较适合流程少,对实时结果要求比较高,高并发的场景比较适合。
实现SAGA的框架
支持SAGA的有 seata, Easytransaction。
分布式事物SAGA的更多相关文章
- Atomikos和GTS-Fescar和TCC-Transaction和TX-LCN分布式事物的比较
什么是分布式事物 分布式系统中保证不同节点之间的数据一致性的事物,叫做分布式事物. 为什么要用分布式事物 微服务,SOA等服务架构模式,一个是service产生多个节点,另一个是resource产生多 ...
- 开启分布式事物DTC
1.web服务器开启分布式事物配置后,数据库服务器的host文件要设置 “IP web服务器主机名” 的映射,否则会 出现 “与基础事务管理器的通信失败” #跨网段使用TransactionSco ...
- 2018-01-08 学习随笔 SpirngBoot整合Mybatis进行主从数据库的动态切换,以及一些数据库层面和分布式事物的解决方案
先大概介绍一下主从数据库是什么?其实就是两个或N个数据库,一个或几个主负责写(当然也可以读),另一个或几个从只负责读.从数据库要记录主数据库的具体url以及BigLOG(二进制日志文件)的参数.原理就 ...
- MySQL分布式事物(XA事物)的使用
有时一个系统的数据 放在不同的库之中.如果用普通的事物 一个分支库提交成功了,另外一个分支库提交失败了, 这候 两个库没有同步的成功或者失败.会导致系统数据的不完整. 对于处理这种情况 MySQL有了 ...
- mq解决分布式事物问题【代码】
上节课简单说了一下mq是怎么保证数据一致性的.下面直接上代码了. 所需环境:1.zookeepor注册中心 2.kafka的服务端和工具客户端(工具客户端也可以不要只是为了更方便的查看消息而已) ...
- mq解决分布式事物问题
今天只看看原理,下一节看项目怎么集成mq进行解决分布式事物. 1.什么情况下会使用到分布式事物? 举例说明:现有一个支付系统,因为项目使用的是微服务框架,有订单模块和支付模块两个模块.生产者进行订单的 ...
- 分布式事物解决方案-TCC
分布式框架下,如何保证事物一致性一直是一个热门话题.当然事物一致性解决方案有很多种(请参考:分布式事物一致性设计思路),我们今天主要介绍TCC方案解决的思路.以下是参与设计讨论的一种解决思路,大家有问 ...
- Springboot与ActiveMQ、Solr、Redis中分布式事物的初步探索
Springboot与ActiveMQ.Solr.Redis中分布式事物的初步探索 解决的场景:事物中的异步问题,当要求数据库与solr服务器的最终一致时. 程序条件: 利用消息队列,当数据库添加成功 ...
- 分布式的一致性(分布式事物)-------2PC详述
英文名:Two Phase Commit(2PC) 算法目的:实现分布式事物 算法概述: 有两类节点: -----协调者 -----事务参与者 流程阶段: -----请求阶段 -----提交阶段 算法 ...
随机推荐
- pip 源的问题
pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.douban.com some-package
- Spring(一)——概述
一.概述 1.介绍 struts 是 web 框架 (jsp/action/actionfrom).hibernate是orm (Object Relational Mapping) 框架,处于持久层 ...
- MySQL——MySQL客户端命令
1. mysql: (1)用于数据库连接 (2)用于管理数据库: a: 命令接口自带命令 b: SQL语句: DDL: 数据库定义语言 DCL: 数据库控制语言 DML: 数据库操作语言 2. mys ...
- GDAL 矢量裁剪栅格
本节将介绍如何在Python中用GDAL实现根据矢量边界裁剪栅格数据. from osgeo import gdal, gdal_array import shapefile import numpy ...
- 2021-06-14 BZOJ4919:大根堆
BZOJ4919:大根堆 Description: 题目描述 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你 ...
- el-upload + accept限制上传的文件格式
/** * kevin 2021/1/4 * @description el-upload + accept限制上传的文件格式 * @param e 校验的类型 * @returns {str ...
- RSTP
一.STP协议的缺点,存在的问题 STP 协议工作时间收敛慢,响应时间长---------->RSTP 原始的802.1d(stp)不支持多个vlan---->(PVST===>把一 ...
- Spring Boot学习(一)——Spring Boot介绍
Spring Boot介绍 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式 ...
- nodejs安装 Later version of Node.js is already installed. Setup will now exit 及 node与npm版本不符
暴力删除nodejs导致无法重新安装 Later version of Node.js is already installed. Setup will now exit 1.电脑全局搜索nodej ...
- centos7 下安装 mysql5.7
由于CentOS7的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件. 下载命令: wget https://dev.mysql.com/get/mysql57-commu ...