我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019年全年资料内部公开36码 > 强一致性 >

分布式事务解决方案 微服务分布式事务解决方案 TX-LCN TCC 3PC X

归档日期:08-15       文本归类:强一致性      文章编辑:爱尚语录

  概念:所谓的XA方案,,有一个事务管理器的概念,负责协调多个数据库的事务。事务管理器先问问各个数据库你准备好了么?如果每个数据库 能回复OK,那么就正式提交事务。在各个数据库上执行操作;如果任何其中一个数据库回答不OK,那么就回滚事务。

  使用场景:比较适合单块应用里、跨多个库的事务里,而且正是因为严重依赖数据库层面搞定复杂的事务,效率很低,绝对不适合高并发的场景。如果要玩,那么基于Spring+JPA就可以搞定。

  这个方案我们很少用,一版来说某个系统内部如果出现了跨多个库的这么一个操作,是不合规的,我可以给大家介绍一下:现在微服务,一个大系统分成一百个微服务 ,几十个微服务一般来说 我的规定和规范是要求每个服务智能操作自己对应的一个数据库。

  如果你要操作别的服务对应的数据库,不允许直接别的服务的数据库,违反微服务架构的规范。你随便交叉胡乱访问,几百个服务的话,全体乱套,这样的一套微服务是没法管理的,没法治理的,可能会出现数据被别人改错,自己的库被别人写挂等情况。

  Cancel阶段:进行补偿:如果任何一个服务的方法执行出错,那么这里就需要进行补偿,就是执行已经执行成功的业务逻辑的回退操作。【把执行成功的回滚】。

  这种方案使用的比较少、几乎没人使用,但是也有使用的场景。因为这个事务回滚实际上是严重依赖与你自己写代码回滚和补偿了,会造成补偿代价巨大,非常之恶心。

  3、B系统接收到消息之后,在一个事务里,自己本地消息表里插入一条数据,同时执行其他的业务操作,如果这个消息已经被处理过了,那么此时这个事务会回滚,这样保证不会重复处理消息。

  4、B系统执行成功之后,就会更新自己本地消息表的状态以及A系统消息表的状态;

  5、如果B系统执行失败了,那么就不会更新消息表的状态。那此时A系统会定时扫描自己的消息表,如果有未处理的消息,会再次发送到MQ中,让B去处理;

  6、这个方案保证了最终一致性,哪怕B事务失败了,但是A会不断重发消息,直到B那边成功为止。

  这个方案最大的问题在于 严重依赖数据库的消息表来管理事务。会导致如果高并发场景咋办呢?咋扩展呢?所以很少用。

  不用本地的消息表了,直接基于MQ来实现的事务。比如阿里的RocketMQ就支持消息事务。

  1、A系统发送一个prepared消息到MQ,如果这个prepared消息发送失败那么就直接取消操作别执行了。

  2、如果这个消息发送成功了、就接着执行本地事务,如果成功就告诉MQ发送确认消息,如果失败,就告诉MQ发送回滚消息。

  4、Mq 会自动定时轮询所有prepared消息回调你的接口,问你,这个消息是不是本地事务处理失败了,所有没有发送确认的消息,是继续重试还是回滚?一版来说这里你就可以查下数据库看之前本地事务是否执行,如果回滚了,那么这里也回滚吧。这个就是避免可能本地事务执行成功了,而确认消息却发送失败了。

  2、这里有个专门消费MQ的最大努力通知服务,这个服务会消费MQ然后写入数据库中记录下来,或者是放入个内存对垒也可以,接着调用系统B的接口;

  3、要是系统B执行成功就OK了;要是系统B执行失败了,那么最大努力通知服务就定时尝试重新调用系统B,反复了N次,最后还是不行就放弃。

  LCN分布式事务框架的核心功能是对本地事务的协调控制,框架本身并不创建事务,只是对本地事务做协调控制。因此该框架与其他第三方的框架兼容性强,支持所有的关系型数据库事务,支持多数据源,支持与第三方数据库框架一块使用(例如 sharding-jdbc),在使用框架的时候只需要添加分布式事务的注解即可,对业务的侵入性低。LCN框架主要是为微服务框架提供分布式事务的支持,在微服务框架上做了进一步的事务机制优化,在一些负载场景上LCN事务机制要比本地事务机制的性能更好,4.0以后框架开方了插件机制可以让更多的第三方框架支持进来.

  5.0完全拥抱springboot体系,JDK版本为1.8开发,将不仅仅支持LCN事务模式,也引入了TCC,TXC模式,同时把分布式事务协调的模式抽象出来,让各种模式可以嵌套使用。

  将抽离LCN封装业务,提出业务接口层与通讯层,将可支持自定义分布式事务模式与通讯模式。

  LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成事务协调控制。

  TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块提交关闭以后,TxClient连接池执行“假关闭”操作,等待TxManager协调完成事务以后在关闭连接。

  TxManager是LCN分布式事务框架的事务协调器,框架基于Netty做消息通讯,事务控制数据存储在redis中。TxManager采用高可用集群化部署方案,多个TM通过eureka集群完成服务注册,各个TxClient通过服务名称向TxManager发送事务信息。.

  Redis采用集群化配置方案(也可采用哨兵模式配置方案),保证事务控制数据的一致性及准确性.

  LCN通讯是基于TCP长连接的socket通讯,TxMansager与事务控制方是基于netty框架完成的。该协议只描述参与Socket通讯的协议。LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。

  LCN 核心采用3PC+TCC补偿机制,采用强一致性方案,保证了事务的一致性。

  1.分布式事务简介a,所谓分布式事务,是指的涉及多个数据库操作的事务,小编在开发中曾遇到过很多分布式事务的场景,今天我自己模拟了一个解决分布式事务的demo,希望和大家交流,并指出优缺点b,下面简单画...博文来自:的博客

  一、简介LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果。LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TXC模式 LCN模式: LCN模式是通过代...博文来自:Sunny

  分布式领域CAP理论Consistency(一致性),数据一致更新,所有数据变动都是同步的Availability(可用性),好的响应性能Partitiontolerance(分区容忍性)可靠性定理:...博文来自:一个人的博客

  分布式事物实现起来还是有些复杂的,这里使用了第三方一个事物调度框架:tx-lcn是一个单独的事物调度中心,与springcloud配合起来非常方便  地址:博文来自:sinstar1的博客

  LCN框架在2017年6月份发布第一个版本,从开始的1.0,已经发展到了5.0版本。LCN名称是由早期版本的LCN框架命名,在设计框架之初的1.0~2.0的版本时框架设计的步骤是如下,各取其首字母得...博文来自:wuwangchuxin

  框架介绍LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果核心步骤创建事务组是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事...博文来自:的博客

  简单的看下例子:采用springboot,需要redis,mysql,zookeeper(我们是用的这个做注册中心,可以换成其他的),详细见官网。manager工程用于协调分布式服务启动类加上注解@E...博文来自:cgj296645438的博客

  分布式事务存在两大理论随着互联化的蔓延,各种项目都逐渐向分布式服务做转换。如今微服务已经普遍存在,本地事务已经无法满足分布式的要求,由此分布式事务问题诞生。分布式事务被称为世界性的难题,目前分布式事务...博文来自:javaZhong的博客

  柔性事务解决方案:TCC(两阶段型、补偿型)更多干货分布式事务处理一分布式事务二分布式事务处理三分布式事务四_基于可靠消息的最终一致性分布式事务五_基于可靠消息的最终一致性_异常流程分布式事务六_常规...博文来自:架构师的成长之路的博客

  各种形态的分布式事务分布式事务有多种主流形态,包括:基于消息实现的分布式事务基于补偿实现的分布式事务基于TCC实现的分布式事务基于SAGA实现的分布式事务基于2PC实现的分布式事务这些形态的原理已经在...博文来自:skyesx的专栏

  过多的理论我就不说了,理论可以参考ServiceComb-Saga详细讲解,这是我在我写的一个Sringcloud搭建的一个分布式商城项目,我现在需要测试一个添加品牌的信息,他会调用一个订单的远程服务...博文来自:weixin_36964056的博客

  一、微服务微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。 每个微服务内聚不同的业务模块。二、分布式事务本地事务   分...博文来自:辛勤的搬运工_

  分布式事务分为应用内多数据源事务和应用间分布式事务,应用内多数据源事务参考基于Atomikos的多数据源分布式事务(XA)解决方案本文主要介绍应用间的分布式事务分布式事务的几种实现思路基于消息队列的分...博文来自:Simons Dream

  一、原理介绍:    LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由L...博文来自:wuwangchuxin

  一、原理介绍:    TXC模式命名来源于淘宝,实现原理是在执行SQL之前,先查询SQL的影响数据,然后保存执行的SQL快走信息和创建锁。当需要回滚的时候就采用这些记录数据回滚数据库,目前锁实现依赖r...博文来自:wuwangchuxin

  1.TXC是什么TXC(TaobaoTransactionConstructor)是一个分布式事务中间件,它可以通过极少的代码侵入,实现分布式事务。在大部分情况下,应用只需要引入TXCClient的j...博文来自:浮生一梦

  个人备忘个人理解也是阅读别人博文,自己整理了一下,希望对你们有帮助。补偿模式MQ(事务消息):举个例子,Bob向Smith转账,那我们到底是先发送消息,还是先执行扣款操作?好像都可能会出问题。如果先发...博文来自:的博客

  本文通过使用SpringCloud和Docker构建了一个常见的Microservice体系.SpringCloud为开发者提供了快速构建分布式系统中的一些常见工具,如分布式配置中心,服务发现与注册中...博文

  TCC方案最大的特点是实时性高。这种方案不借助MQ,如果你的系统是基于dubbo等微服务架构,那么就必须依靠这种方案实现分布式事务了。      明眼一看就知道,TCC应该是三个英文单词的首字母缩写而...博文来自:zsh2050的专栏

  一个TCC事务框架需要解决的当然是分布式事务的管理。关于TCC事务机制的介绍,可以参考TCC事务机制简介。TCC事务模型虽然说起来简单,然而要基于TCC实现一个通用的分布式事务框架,却比它看上去要复杂...博文来自:轰鸣

  事物概念事物特性(ACID)原子性(A)所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一...博文来自:weixin_34018169的博客

  1、TCC简介TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题;TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel3个方法均由业务编码实现;其中Try操...博文来自:weixin_34307464的博客

  分布式事务——TxInc简介TX-LCN主要有两个模块,Tx-Client(TC)Tx-Manager™.TC作为微服务下的依赖,TM是独立的服务(用于管理事务)。前言上述图片中包含两个事务,rpc事...博文来自:弗兰克的那点事儿

  Dubbo分布式事务处理是使用Dubbo作为分布式服务化框架时的一个难题,本教程将提供“基于可靠消息的最终一致性分布式事务解决方案”、“TCC两阶段型分布式事解决方案”和“最大努力通知型分布式事务解决...博文来自:水到渠成

  前言:写这个文章主要是给自己做下笔记以免遗忘,同时也给各大码农分享一下,互相学习。分布式事务的需求来源于系统的服务化。在微服务系统中,无法使用传统的事务达到数据库的一致性。每个子服务都有自己独立的数据...博文来自:zhaoxichen_10的博客

  协调者在分布式系统中,每一个机器节点虽然都能明确的知道自己执行的事务是成功还是失败,但是却无法知道其他分布式节点的事务执行情况。因此,当一个事务要跨越多个分布式节点的时候(比如,淘宝下单流程,下单系统...博文来自:杨煜冬煜杨的博客

  1、MQ发送方发送远程事务消息到MQServer;2、MQServer给予响应,表明事务消息已成功到达MQServer.3、MQ发送方Commit本地事务.4、若本地事务Commit成功,则通知MQS...博文来自:许文杰的博客

  背景项目采用SpringCloud(SpringBoot2.0.1)开发,SpringCloud是一个微服务架构实施的综合性解决框架。1.知识点概述1.“微服务”微服务架构的主旨是将原本独立的系统拆分...博文来自:weixin_33816946的博客

  按照网友的这篇文章,我使用springCloud搭建了一个demo 论坛

  一.理论知识1.数据库管理系统中事务(transaction)的四个特性:简称ACID(这种特性简称刚性事物)原子性(Atomicity)原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发...博文来自:AkiraNicky的博客

  官网地址:地址不支持2.0:支持2.0的修改版地址:博文来自:zhuwei_clark的博客

  一、关于分布式事务的文章1.ServiceComb中的数据最终一致性方案  博文来自:动感超人的专栏

  微服务架构的分布式事务的几个解决方案在网上看了很多的关于分布式事务的文章,在此总结下微服务架构下的分布式事务的几个方式一、尽量在业务上和技术上避免分布式事务     显而易见,微服务架构十分的流行,特...博文来自:的博客

  为了解决大家在实施分布式服务化架构过程中关于分布式事务问题的困扰,本教程将基于支付系统真实业务中的经典场景来对“可靠消息的最终一致性方案”、“TCC两阶段型事务方案”和“最大努力通知型方案”这3种柔性...博文来自:水到渠成

  面试题分布式事务了解吗?你们是如何解决分布式事务问题的?面试官心理分析只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的...博文来自:weixin_34410662的博客

  有了前面服务端的基础,客户端代码比较好理解,在一些方面代码是一样的。我们从注解@EnableDistributedTransaction开始,这个注解是开启事物客户端的唯一注解。@Retention(...博文来自:cgj296645438的博客

  这里启动三个项目,一个发起方,也就是我们常说的消费者,二个参与方,也就是我们常说的提供者,数据库的处理方式采用jpa的方式,这个用mybatis,hibernate都不影响。项目结构如下:具体的搭建的...博文来自:zhuwei_clark的博客

  wozniakzhang:入参是对象,对象里面有的属性也是对象,那么对象内部的属性参数这么判断非空呢?就是封装过几层之后

本文链接:http://ravynhart.com/qiangyizhixing/494.html