Atomikos和GTS-Fescar和TCC-Transaction和TX-LCN分布式事物的比较
什么是分布式事物
分布式系统中保证不同节点之间的数据一致性的事物,叫做分布式事物。
为什么要用分布式事物
微服务,SOA等服务架构模式,一个是service产生多个节点,另一个是resource产生多个节点。
service多个节点

resource多个节点

系统故障、网络错误等情况下,都会导致数据存储不一致的情况,这种情况就需要分布式事物来处理。
如何用分布式事物
分布式事物解决方案
XA二阶段提交
1.性能问题
XA协议遵循强一致性。在事务执行过程中,各个节点占用着数据库资源,只有当所有节点准备完毕,事务协调者才会通知提交,参与者提交后释放资源。这样的过程有着非常明显的性能问题。
2.协调者单点故障问题
事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,参与者收不到提交或是回滚通知,参与者会一直处于中间状态无法完成事务。
3.丢失消息导致的不一致问题。
在XA协议的第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就导致了节点之间数据的不一致。
XA三阶段提交
XA三阶段提交在两阶段提交的基础上增加了CanCommit阶段,并且引入了超时机制。一旦事物参与者迟迟没有接到协调者的commit请求,会自动进行本地commit。这样有效解决了协调者单点故障的问题。但是性能问题和不一致的问题仍然没有根本解决。
MQ事务
利用消息中间件来异步完成事务的后一半更新,实现系统的最终一致性。这个方式避免了像XA协议那样的性能问题。不过由于会出现网络延迟的问题,消息重复、消息顺序无法保证的情况也会出现。需要业务机制进行补偿。
本地消息表
将需要分布式处理的任务通过消息日志的方式来异步执行。消息日志可以存储到本地文本、数据库或消息队列,再通过业务规则自动或人工发起重试。人工重试更多的是应用于支付场景,通过对账系统对事后问题的处理。

Saga事务
将长事务拆分为多个本地短事务,由Saga事务协调器协调,如果正常结束那就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作。saga模式没有隔离性的影响还是较大。
LCN事务
LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。
该模式对代码的嵌入性为低。
该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。
该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。
该模式缺陷在于代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间


Atomikos事务
优点:
缺点:
1. Atomikos从池里取得connection时,每次都会去进行select test,这个对获取连接的影响很大,取消这个测试,TPS大概能提高近1倍;
2. Atomilos对池中connection的管理效率随着连接数的上升,呈现指数级的下降,测试环境中,连接最大配置为300,但实际上最大值没有超过70,线程dump发现连接池管理对象上存在激烈的锁竞争,导致很多线程等待前面的线程释放锁对象;
3. 由于Atomikos支持JTA事务,而c3p0则不支持,这导致atomikos在获取connection时,首先需要从线程上下文去检索是否已经存在着connection,这个检测从atomikos的实现上看,会遍历连接池中所有connection对象,所以当连接数上升时,连接池的效率显著下降;
TCC事务
TCC事务是Try、Commit、Cancel三种指令的缩写,其逻辑模式类似于XA两阶段提交,但是实现方式是在代码层面来人为实现。
该模式对代码的嵌入性高,要求每个业务需要写三种步骤的操作。
该模式对有无本地事务控制都可以支持使用面广。
数据一致性控制几乎完全由开发者控制,对业务开发难度要求高。
TCC事务机制相比于上面介绍的XA,解决了其几个缺点:
1.解决了协调者单点,由主业务方发起并完成这个业务活动。业务活动管理器也变成多点,引入集群。
2.同步阻塞:引入超时,超时后进行补偿,并且不会锁定整个资源,将资源转换为业务逻辑形式,粒度变小。
3.数据一致性,有了补偿机制之后,由业务活动管理器控制一致性 。
TCC事务的缺点,主要就一个:
- TCC的Try、Confirm和Cancel操作功能需业务提供,开发成本高。

到底要不要使用TCC到底要不要使用TCC事务,取决于以下几点:
- 是否真正有保证跨应用业务操作的原子性需求。
- 研发上能否投入资源开发相对应的TCC接口。
- 当然还有最后一点,能否搞定一个稳定的、高可用的、扩展性强的TCC事务管理器。
Fescar
优点
高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。
缺点
存在一些局限,比如:事务隔离级别最高支持到 读已提交 的水平,SQL 的解析还不能涵盖全部的语法等。
分为AT模式和MT模式,默认的是AT模式,但是最好是AT模式和MT模式结合使用,因为MT模式可以将非关系型数据库也纳入全局事务管理中。
AT模式的行为分支
业务逻辑不需要关注事务机制,分支与全局事务的交互过程自动进行。

MT模式的行为分支
业务逻辑需要被分解为 Prepare/Commit/Rollback 3 部分,形成一个 MT 分支,加入全局事务。

MT 模式一方面是 AT 模式的补充。另外,更重要的价值在于,通过 MT 模式可以把众多非事务性资源纳入全局事务的管理中。
详细了解网址https://blog.csdn.net/qq924862077/article/details/86556559
参考网址:
https://blog.csdn.net/bjweimengshu/article/details/79607522
https://www.cnblogs.com/bigben0123/p/9453830.html
https://blog.csdn.net/jl19861101/article/details/54864019
Atomikos和GTS-Fescar和TCC-Transaction和TX-LCN分布式事物的比较的更多相关文章
- 分布式事物解决方案-TCC
		分布式框架下,如何保证事物一致性一直是一个热门话题.当然事物一致性解决方案有很多种(请参考:分布式事物一致性设计思路),我们今天主要介绍TCC方案解决的思路.以下是参与设计讨论的一种解决思路,大家有问 ... 
- 分布式事物 - 基于RPC调用 - TCC模式
		前提 前端业务(主服务)可以以同步或异步调用TCC框架,或者TCC框架本身就是同步异步兼备的. 假定TCC框架拥有断电后的自动恢复能力.同时,在下游业务出现无限失败的情况下,也会进行无限的重试,以达到 ... 
- transaction  用tx事务 测试时 报错:Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/mvc]
		Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/sc ... 
- 阿里开源分布式事务解决方案  Fescar
		微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并 ... 
- 分布式事务解决方案FESCAR
		项目地址:FESCAR 以下是官网的文档.简介2019年,Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 1. ... 
- 来了!阿里开源分布式事务解决方案 Fescar
		摘要: 阿里妹导读:广为人知的阿里分布式事务解决方案:GTS(Global Transaction Service),已正式推出开源版本,取名为“Fescar”,希望帮助业界解决微服务架构下的分布式事 ... 
- alibaba/fescar  阿里巴巴 开源 分布式事务中间件
		Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 示例:https://github.com/windwant/ ... 
- 分布式事务 GTS 的价值和原理浅析
		GTS 今年双 11 的成绩 今年 2684 亿的背后,有一个默默支撑,低调到几乎被遗忘的中间件云产品——GTS(全局事务服务,Global Transaction Service),稳稳地通过了自 ... 
- Fescar分布式事务实现原理解析探秘
		前言 fescar发布已有时日,分布式事务一直是业界备受关注的领域,fescar发布一个月左右便受到了近5000个star足以说明其热度.当然,在fescar出来之前,已经有比较成熟的分布式事务的解决 ... 
随机推荐
- node启动本地服务器
			//下载依赖 cnpm i http cnpm i path cnpm i fsvar http = require('http'); var path = require('path'); var ... 
- (Python基础)文件操作
			对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 命名为7 years Once I was seven years old my momma t ... 
- [持续交付实践] 研发协作平台:DevOps背景下的组织结构
			前言 今年以来做的事情越来越杂,负责的技术方向越来越广,精力越来越分散(创业公司的典型特点),编码的时间越来越少,有时候也会觉得很疲惫没办法专注一个事情. 除了技术方向上的实践,组织上如何组建一个最优 ... 
- .NET Core 中的通用主机和后台服务
			简介 我们在做项目的时候, 往往要处理一些后台的任务. 一般是两种, 一种是不停的运行,比如消息队列的消费者.另一种是定时任务. 在.NET Framework + Windows环境里, 我们一般会 ... 
- Docker笔记——jenkins镜像制作
			jenkins官方路径:https://hub.docker.com/_/jenkins/ 最新Dockerfile路径:https://github.com/jenkinsci/docker/blo ... 
- 关于总结一些CentOS7常用的运维命令
			Centos7日常需要用的运维命令 1.删除0字节文件 find-type f -size 0 -exec rm -rf {} \ 2.查看进程 按内存从大到小排列 ps -e -o " ... 
- nginx配置location总结及rewrite规则写法(转)
			一个示例: location = / { # 精确匹配 / ,主机名后面不能带任何字符串 [ configuration A ] } location / { # 因为所有的地址都以 / 开头,所以这 ... 
- 【活动发布】捷微H5-微信新年砍价活动,开源发布了
			活动名称: 微信新年砍价 适用项目: 捷微H5活动平台源码下载:http://yun.jeecg.org/pmall/detail/924D63E4F73B4387B75DE9B8545136C5 视 ... 
- 不学无术的下场——OO第一单元总结
			第一单元OO作业总结 第一次作业  第一次作业的要求是对仅有常数和幂函数的式子进行求导.  由于是第一次接触JAVA,对很多东西都还不熟悉,尤其是正则表达式做得不好.当时我的思路如下: 建立Pol ... 
- 阿里云从0安装mysql到远程连接
			1.安装mysql数据库. (1)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rp ... 
