什么是分布式事物

分布式系统中保证不同节点之间的数据一致性的事物,叫做分布式事物。

为什么要用分布式事物

微服务,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.   全面崩溃 / 重启恢复
2.  兼容标准的SUN公司JTA API
3.  嵌套事务
4.  为XA和非XA提供内置的JDBC适配器

缺点:

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分布式事物的比较的更多相关文章

  1. 分布式事物解决方案-TCC

    分布式框架下,如何保证事物一致性一直是一个热门话题.当然事物一致性解决方案有很多种(请参考:分布式事物一致性设计思路),我们今天主要介绍TCC方案解决的思路.以下是参与设计讨论的一种解决思路,大家有问 ...

  2. 分布式事物 - 基于RPC调用 - TCC模式

    前提 前端业务(主服务)可以以同步或异步调用TCC框架,或者TCC框架本身就是同步异步兼备的. 假定TCC框架拥有断电后的自动恢复能力.同时,在下游业务出现无限失败的情况下,也会进行无限的重试,以达到 ...

  3. 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 ...

  4. 阿里开源分布式事务解决方案 Fescar

    微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这样可以降低开发难度.增强扩展性.便于敏捷开发.当前被越来越多的开发者推崇,系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并 ...

  5. 分布式事务解决方案FESCAR

    项目地址:FESCAR 以下是官网的文档.简介2019年,Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 1. ...

  6. 来了!阿里开源分布式事务解决方案 Fescar

    摘要: 阿里妹导读:广为人知的阿里分布式事务解决方案:GTS(Global Transaction Service),已正式推出开源版本,取名为“Fescar”,希望帮助业界解决微服务架构下的分布式事 ...

  7. alibaba/fescar 阿里巴巴 开源 分布式事务中间件

    Fescar 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题. 示例:https://github.com/windwant/ ...

  8. 分布式事务 GTS 的价值和原理浅析

    GTS 今年双 11 的成绩 今年 2684 亿的背后,有一个默默支撑,低调到几乎被遗忘的中间件云产品——GTS(全局事务服务,Global Transaction Service),稳稳地通过了自 ...

  9. Fescar分布式事务实现原理解析探秘

    前言 fescar发布已有时日,分布式事务一直是业界备受关注的领域,fescar发布一个月左右便受到了近5000个star足以说明其热度.当然,在fescar出来之前,已经有比较成熟的分布式事务的解决 ...

随机推荐

  1. 码云Gitee上新建项目教程

    1.在浏览器访问,https://gitee.com/: 2.使用用户名.密码登录: 3.在左下角显示当前用户的项目,点击“+”号,创建项目: 4.填写项目的相关信息,项目名称要和本地要上传的项目名称 ...

  2. mysql集群搭建--韩国庆

    按照我给大家提供的步骤,一步一步来,你就能配好mysql集群环境 什么是mycat 简单的说,MyCAT就是: •一个彻底开源的,面向企业应用开发的“大数据库集群” •支持事务.ACID.可以替代My ...

  3. HTTPS的内网访问和访问外网

    https://launchpad.support.sap.com/#/notes/2461900 https://wiki.scn.sap.com/wiki/display/Security/Tro ...

  4. shell脚本中获取当前所在目录地址

    shell脚本中获取当前所在目录如下 #!/bin/bash work_path=$() cd ${work_path} work_path=$(pwd) cd ${work_path}/src

  5. VUE 引入阿里图标库

    本身项目是VUE, Element-UI项目, 所以内置Element-UI图标库 地址如下, https://element.eleme.cn/#/zh-CN/component/icon 使用时: ...

  6. dataTable转换成Json格式

    #region dataTable转换成Json格式 /// <summary> /// /// </summary> /// <param name="dt& ...

  7. 抢人就完事了——OO第二单元总结

    总结性博客作业 (1)从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略. (2)基于度量来分析自己的程序结构度量类的属性个数.方法个数.每个方法规模.每个方法的控制分支数目.类总代码规模 ...

  8. 小白安装openvas总结-原创20181213

    先对该工具进行熟悉: OpenVAS 介绍 1.关于OpenVAS OpenVAS(Open Vulnerability Assessment System)是一套开源的漏洞扫描系统,早期Nessus ...

  9. linux命令行下xlsx转换成pdf或csv的笔记

    使用libreoffice(可以用yum直接安装,占用了4xxM磁盘空间...) 然后命令行执行: 转换成csv,支持utf-8中文编码: libreoffice  --invisible --con ...

  10. echarts 设置数据加载遮罩层

    //显示加载数据的loading        chart.showLoading({            text: "图表数据正在努力加载...",            x ...