分布式事务

TX-LCN分布式事务使用方案

无人久伴 提交于 2019-12-08 14:35:40
Lcn分布式事务流程实现(启动事务协调者) 如果觉得还可以 记得关注一下公众号哦!一起交流学习! 一、lcn流程图实现 二、Lcn介绍 1. tx-lcn 1.正如官网所说的:LCN并不生产事务,LCN只是本地事务的协调工! Lcn本身不会产生事务,也不会涉及到某些业务代码!他对事务的操作本身就依赖一个事务协调者服务 如上图所说的一样 他分为4个步骤 服务发起者 在事务协调者内创建事务组,并将本事务加入事务组 事务参与者加入事务组,直到有结束标记出现 事务协调者向所有的事务参与者发送询问,是否能够提交!全部提交则事务组提交!有一个回滚标记则事务组回滚! 事务组执行操作之后,释放所有锁资源! 三、代码案例 1 创建数据库 tx-manager 创建表 CREATE TABLE ` t_tx_exception ` ( ` id ` bigint ( 20 ) NOT NULL AUTO_INCREMENT , ` group_id ` varchar ( 64 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL , ` unit_id ` varchar ( 32 ) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL

LCN分布式事务框架原理详解4.0

蹲街弑〆低调 提交于 2019-12-08 14:35:21
目录 一、首先介绍3.0与4.0之前的差异 1.、地址: 2、4.0添加升级如下功能: 二、LCN4.0原理 1、架构介绍 2、核心步骤(LCN核心的三步骤) 3、事务协调机制 对于代理连接池的优化 4、补偿机制 为什么需要事务补偿? 补偿机制的触发条件? 补偿事务机制? LCN是怎么去实现事务补偿呢? 5、插件机制 拟场景演示模 一、首先介绍3.0与4.0之前的差异 1.、地址: 2、4.0添加升级如下功能: (1)3.0虽然有事务补偿机制,但4.0在此基础上不仅添加事务补偿机制的策性,还添加了管理的后台可以看到补偿的数据;同时也添加了一个回调地址,可以在补偿之前可以最先知道这次补偿的数据,也可以为我们的框架使用者提供一个决策权。 (2)同4.0时添加的插件扩展机制,也就是说他更加开放了,他可以可以容纳更多的rpc框架,也可以更多的支持db框架,比如mongodb、redis,还有将来一些框架,如ES等等。 二、LCN4.0原理 1、架构介绍 有图可得,lcn是通过nginx作为负载均衡的转发,也就是作为Txmanager的负载均衡的一个转发服务器;然后再是我们的TxManager,也就是事务管理器,然后事务管理器依赖两个服务,一个是redis服务,一个是Eureka服务集群;Eureka集群是用于我们TxManager之间的相互服务发现

LCN分布式事务解决方案

。_饼干妹妹 提交于 2019-12-08 14:34:24
一、什么是分布式事务? 二、lcn的实现思路 Lcn 的本质就是提供了一个全局的事务管理器 本地事务的提交还是回滚,由全局的事务管理器决定 2.1 本地执行的状态怎么提交给全局事务? 使用切面拦截本地事务的执行结果,使用tcp 发送给tx-manager 2.2 本地事务的提交或回滚怎么实现? 等待tx-manager通知自己 三、lcn的使用 3.1 下载lcn-manager (全局的事务管理器) 3.2 配置lcn-manager 配置eureka 并且配置redis Redis: 3.3 启动lcn 3.4 模拟转账服务 数据库: 3.4.1 add-service 3.4.2 decr-service 3.5 2 个微服务都需要添加依赖 < dependency > < groupId > org.springframework.boot </ groupId > < artifactId > spring-boot-starter-actuator </ artifactId > </ dependency > < dependency > < groupId > com.codingapi </ groupId > < artifactId > transaction-springcloud </ artifactId > < version > ${lcn.last

AOP实现LCN分布式事务手动回滚

半城伤御伤魂 提交于 2019-12-08 14:34:04
由于项目用了较为完善的异常处理机制,导致微服务在抛出异常时,立即被@ExpectionHandler捕捉掉了,造成LCN分布式事务无法捕捉到异常而无法回滚的情况。在查看LCN原理的时候,偶然发现可以获取LCN管理事务的事务组代号groupId,由此想到能不能通过这个ID来手动回滚达到目的。 原理 1. 在被调用服务异常抛出后,ExceptionHandler进行捕捉并会返回这些错误信息给被服务调用者,如果微服务调用成功,信息中错误码等于10000,如果不成功,那么错误码是不会等于10000的。那么在服务调用者将这些信息return之后,可以用aop来判断信息是否等于10000,如果不等于,拿到事务组groupId进行手动回滚。 2.如果获取LCN的groupId?LCN源码里有一个 MQTxManagerService 直接注入它: @Autowired MQTxManagerService mqTxManagerService; 然后TxTransactionLocal.current().getGroupId()拿到groupId,向tx-manager发送关闭事务的请求。 @AfterReturning(value = "firstPointCut()",returning = "result") public void rollback(JoinPoint

TX-LCN分布式事务原理介绍

风流意气都作罢 提交于 2019-12-08 14:33:45
框架介绍 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果 核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。 添加事务组 添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。 关闭事务组 是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。 事务控制原理 LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。 TxClient的代理连接池实现了 javax.sql.DataSource 接口,并重写了 close 方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。 对于代理连接池的优化 自动超时机制 任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态,然后再决定执行提交或者回滚操作,主要为了给最大资源占用时间加上限制。 智能识别创建不同的连接 对于只读操作、非事务操作LCN将不开启代理功能

LCN分布式事务原理介绍

ぃ、小莉子 提交于 2019-12-08 14:33:33
架介绍 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果 GITHUB地址: https://github.com/codingapi/tx-lcn 官方网址 https://www.txlcn.org 核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。 添加事务组 添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作。 关闭事务组 是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。 事务控制原理 LCN事务控制原理是由事务模块TxClient下的代理连接池与TxManager的协调配合完成的事务协调控制。 TxClient的代理连接池实现了javax.sql.DataSource接口,并重写了close方法,事务模块在提交关闭以后TxClient连接池将执行"假关闭"操作,等待TxManager协调完成事务以后在关闭连接。 对于代理连接池的优化 自动超时机制 任何通讯都有最大超时限制,参与模块在等待通知的状态下也有最大超时限制,当超过时间限制以后事务模块将先确认事务状态

第一次有人把“分布式事务”讲的这么简单明了

谁都会走 提交于 2019-12-07 10:38:31
“ 不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付。 又或者在网上购物明明已经扣款,但是却告诉我没有发生交易。这一系列情况都是因为没有事务导致的。这说明了事务在生活中的一些重要性。 有了事务,你去小卖铺买东西,那就是一手交钱一手交货。有了事务,你去网上购物,扣款即产生订单交易。 事务的具体定义 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。 简单地说,事务提供一种“要么什么都不做,要么做全套(All or Nothing)”机制。 数据库本地事务 ACID 说到数据库事务就不得不说,数据库事务中的四大特性 ACID: A:原子性(Atomicity), 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。 事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 就像你买东西要么交钱收货一起都执行,要么发不出货,就退钱。 C:一致性(Consistency), 事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。 如果事务成功地完成

微服务架构下分布式事务解决方案——阿里GTS

笑着哭i 提交于 2019-12-07 10:23:31
1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成,NetFlix有大约600个服务。国内方面,阿里巴巴、 腾讯 、 360 、京东、58同城等很多互联网公司都进行了微服务化实践。当前微服务的开发框架也非常多,比较著名的有 Dubbo 、 SpringCloud 、 thrift 、 grpc 等。 2 微服务落地存在的问题 虽然微服务现在如火如荼,但对其实践其实仍处于探索阶段。很多中小型互联网公司,鉴于经验、技术实力等问题,微服务落地比较困难。如著名架构师Chris Richardson所言,目前存在的主要困难有如下几方面: 1)单体应用拆分为分布式系统后,进程间的通讯机制和故障处理措施变的更加复杂。 2)系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变的非常突出。 3)微服务数量众多,其测试、部署、监控等都变的更加困难。 随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如dubbo可以支持多种通讯协议,springcloud可以非常好的支持restful调用。对于第三个问题,随着docker

并发问题,锁,怎么处理死锁,脏数据处理

空扰寡人 提交于 2019-12-07 04:21:15
SQL Server死锁总结 1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 死锁的四个必要条件: 互斥条件 (Mutual exclusion) :资源不能被共享,只能由一个进程使用。 请求与保持条件 (Hold and wait) :已经得到资源的进程可以再次申请新的资源。 非剥夺条件 (No pre-emption) :已经分配的资源不能从相应的进程中被强制地剥夺。 循环等待条件 (Circular wait) :系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。 对应到 SQL Server 中,当在两个或多个任务中,如果每个任务锁定了其他任务试图锁定的资源,此时会造成这些任务永久阻塞,从而出现死锁;这些资源可能是 :单行 (RID ,堆中的单行 ) 、索引中的键 (KEY ,行锁 ) 、页 (PAG , 8KB) 、区结构 (EXT ,连续的 8 页 ) 、堆或 B 树 (HOBT) 、表 (TAB ,包括数据和索引 ) 、文件 (File ,数据库文件 ) 、应用程序专用资源 (APP) 、元数据 (METADATA) 、分配单元 (Allocation_Unit) 、整个数据库 (DB) 。 一个死锁示例如下图所示: 说明: T1 、

一文解读分布式事务 (转)

大城市里の小女人 提交于 2019-12-06 23:46:42
这篇文章将介绍什么是分布式事务,分布式事务解决什么问题,对分布式事务实现的难点,解决思路,不同场景下方案的选择,通过图解的方式进行梳理、总结和比较。 相信耐心看完这篇文章,谈到分布式事务,不再只是有“2PC”、“3PC”、“MQ的消息事务”、“最终一致性”、“TCC”等这些知识碎片,而是能够将知识连成一片,形成知识体系。 什么是事务 介绍分布式事务之前,先介绍什么是事务。 事务的具体定义 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。 简单地说,事务提供一种“ 要么什么都不做,要么做全套(All or Nothing)”机制。 数据库事务的 ACID 属性 事务是基于数据进行操作,需要保证事务的数据通常存储在数据库中,所以介绍到事务,就不得不介绍数据库事务的 ACID 特性。 ACID 指数据库事务正确执行的四个基本特性的缩写,包含: 原子性(Atomicity) 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。 事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 例如:银行转账,从 A 账户转 100 元至 B 账户,分为两个步骤: 从 A 账户取 100 元。