jta

分布式事务

安稳与你 提交于 2020-10-08 04:22:58
https://mp.weixin.qq.com/s/XknegP66mnYboiBx556Kzw 分布式事务 收录于话题 #程序员 1558 #程序人生 664 #分布式事务 25 因为之前版本图有丢失和乱序,出了这个修订版本 前言 上一篇文章已经讲完分布式了,那暖男说要讲分布式事务那就一定会讲,只是我估计大家没料到暖男这么快就肝好了吧? 事务想必大家并不陌生,至于什么是 ACID,也是老生常谈了。不过暖男为了保证文章的完整性确保所有人都听得懂,我还是得先说说 ACID,然后再来介绍下什么是分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知。 事务 严格意义上的事务实现应该是 具备原子性、一致性、隔离性和持久性 ,简称 ACID。 原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。 一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你账上有400,我账上有100,你给我打200块,此时你账上的钱应该是200,我账上的钱应该是300,不会存在我账上钱加了,你账上钱没扣的 中间状态 。 隔离性(Isolation),指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。 持久性(Durability)

spring事务详解(三)源码详解

独自空忆成欢 提交于 2020-10-02 20:25:47
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一、引子 在Spring中,事务有 两种 实现方式: 编程式事务管理 : 编程式事务管理使用TransactionTemplate可实现更细粒度的事务控制。 申明式事务管理 : 基于Spring AOP实现。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。 申明式事务管理不需要入侵代码,通过@Transactional就可以进行事务操作,更快捷而且简单(尤其是配合spring boot自动配置,可以说是精简至极!),且大部分业务都可以满足,推荐使用。 其实不管是编程式事务还是申明式事务,最终调用的底层核心代码是一致的。本章分别从编程式、申明式入手,再进入核心源码贯穿式讲解。 二、事务源码 2.1 编程式事务TransactionTemplate 编程式事务,Spring已经给我们提供好了模板类TransactionTemplate,可以很方便的使用,如下图: TransactionTemplate全路径名是:org.springframework.transaction.support

Spring事务的传播行为案例分析

别说谁变了你拦得住时间么 提交于 2020-08-18 12:48:34
网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习。 1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解 2、spring事务传播特性的定义以及案例分析 一、事务的特性ACID 这四个英文单词拼写我一直记不住,求记忆方法 原子性(Atomicity):事务是一系列原子操作,要么全部成功,要么全部失败。 一致性(Consistency):一旦完成(不管是成功还是失败),确保它所在的一系列业务状态保持一致,状态都是成功,或者都是失败,不能一部分成功一部分失败。 隔离性(Isolation):不同事务同时进行某项业务,处理相同的数据时候,需要保证事务之间相互独立,互相之间数据不影响。 持久性(Durability):一旦事务完成,无论发生什么系统性错误,事务执行后的数据都被持久化了,不会因为重启或其他操作对数据进行更改。 二、spring事务传播特性的定义以及案例分析 我们先给出定义再分别进行简单的代码分析 给出百度图片,请大家参考,首先生命力如果想在工程中运用事务spring 的xml必须开启事务,以下这些特性一般都是在xml属性中进行配置。 <bean id="transactionManager" class="org

女朋友问敖丙:什么是分布式事务?

China☆狼群 提交于 2020-08-16 10:11:33
本文转载自微信公众号「三太子敖丙」,作者三太子敖丙。转载本文请联系三太子敖丙公众号。 前言 上一篇文章已经讲完分布式了,那暖男说要讲分布式事务那就一定会讲,只是我估计大家没料到暖男这么快就肝好了吧? 事务想必大家并不陌生,至于什么是 ACID,也是老生常谈了。不过暖男为了保证文章的完整性确保所有人都听得懂,我还是得先说说 ACID,然后再来介绍下什么是分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知。 事务 严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。 原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。 一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你账上有400,我账上有100,你给我打200块,此时你账上的钱应该是200,我账上的钱应该是300,不会存在我账上钱加了,你账上钱没扣的中间状态。 隔离性(Isolation),指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。 持久性(Durability),指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。 而通俗意义上事务就是为了使得一些更新操作要么都成功,要么都失败。

常见混淆名词

萝らか妹 提交于 2020-08-14 03:50:07
对常见名词的总结 业务逻辑 统称,功能性逻辑 状态机 状态之间的切换流转,以及约束 设计模式 设计最佳实践,会深入到代码层面 工作流 分成:顺序工作流,状态工作流 外部参数,外部事件作为数据交换 saga 事务模型,又叫做长时间运行的事务(Long-running-transaction) 规则引擎 状态机的增强版,一堆堆的规则、但是不体现step步骤关联性 分布式事务 JTA 2阶段提交 TCC TRY/CONFIRM/CANCEL saga 见上 领域事件 带业务色彩的事件(领域层面) 消息机制 消息的发送接收(框架层面) 状态机、工作流、SAGA 区别: 状态机:更偏向瞬时的(尽管没有限制说必须瞬时,但是一般用在瞬时) 工作流:没有状态,也能成为工作流,工作流里的step(步骤)很重要,就是工作流更注重步骤的体现(即便没有状态机也可以,有也可以) SAGA:长事务模型,底层为状态机工作流,其实是建立在上述两者之上的 JTA、TCC、SAGA 区别: JTA:java事务API,有多种不同的实现,一般为两阶段提交,特点:底层持久层必须支持事务特性、改造工作量小 TCC:try、confirm、cancel模型,每一个业务接口需要多写2个接口,代码量大,特点:底层不支持事务特性也可以、改造工作量大 SAGA:多用于三方系统接口多的事务流程,需要给每个业务点多写1个错误时触发的函数

Spring事务的传播行为案例分析

断了今生、忘了曾经 提交于 2020-08-11 13:43:17
网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习。 1、spring给出经常面试的考点Spring事务的4个特性含义---这个很容易理解 2、spring事务传播特性的定义以及案例分析 一、事务的特性ACID 这四个英文单词拼写我一直记不住,求记忆方法 原子性(Atomicity):事务是一系列原子操作,要么全部成功,要么全部失败。 一致性(Consistency):一旦完成(不管是成功还是失败),确保它所在的一系列业务状态保持一致,状态都是成功,或者都是失败,不能一部分成功一部分失败。 隔离性(Isolation):不同事务同时进行某项业务,处理相同的数据时候,需要保证事务之间相互独立,互相之间数据不影响。 持久性(Durability):一旦事务完成,无论发生什么系统性错误,事务执行后的数据都被持久化了,不会因为重启或其他操作对数据进行更改。 二、spring事务传播特性的定义以及案例分析 我们先给出定义再分别进行简单的代码分析 给出百度图片,请大家参考,首先生命力如果想在工程中运用事务spring 的xml必须开启事务,以下这些特性一般都是在xml属性中进行配置。 <bean id="transactionManager" class="org

SpringBoot2 整合JTA组件,多数据源事务管理

一笑奈何 提交于 2020-08-11 13:01:34
本文源码: GitHub·点这里 || GitEE·点这里 一、JTA组件简介 1、JTA基本概念 JTA即Java-Transaction-API,JTA允许应用程序执行分布式事务处理,即在两个或多个网络计算机资源上访问并且更新数据。JDBC驱动程序对JTA的支持极大地增强了数据访问能力。 XA协议是数据库层面的一套分布式事务管理的规范,JTA是XA协议在Java中的实现,多个数据库或是消息厂商实现JTA接口,开发人员只需要调用SpringJTA接口即可实现JTA事务管理功能。 JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。下列任一个Java平台的组件都可以参与到一个JTA事务中 2、分布式事务 分布式事务(DistributedTransaction)包括事务管理器(TransactionManager)和一个或多个支持 XA 协议的资源管理器 ( Resource Manager )。 资源管理器是任意类型的持久化数据存储容器,例如在开发中常用的关系型数据库:MySQL,Oracle等,消息中间件RocketMQ、RabbitMQ等。 事务管理器提供事务声明,事务资源管理,同步,事务上下文传播等功能,并且负责着所有事务参与单元者的相互通讯的责任。JTA规范定义了事务管理器与其他事务参与者交互的接口

突击Java分布式面试-事务解决方案解析

不羁岁月 提交于 2020-08-07 21:10:12
1 面试题 分布式事务了解吗?你们如何解决分布式事务问题的? 2 考点分析 只要聊到做了分布式系统,必问分布式事务,若你对分布式事务一无所知的话,确实很坑,起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。 现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配. 你做系统肯定要用事务,那你用事务的话,分布式系统之后肯定要用分布式事务. 先不说你搞过没有,起码你得明白有哪几种方案,每种方案可能有啥坑? 比如TCC方案的网络问题、XA方案的一致性问题. 单块系统里的事务 分布式系统里的事务 3 XA方案也叫做两阶段提交事务方案. 举个例子,比如公司经常团建,然后一般会有个主席(就是负责组织团建的那个人)。 tb,team building,团建 第一个阶段,一般tb主席会提前问团队里的每个人,说,大家伙,下周六我们去滑雪+烧烤,去吗? 这个时候tb主席开始等待每个人的回答,如果所有人都说ok,那么就可以决定一起去这次tb 如果这个阶段里,任何一个人回答说,我有事不去了,那么tb主席就会取消这次活动 第二个阶段,那下周六大家就一起去滑雪+烧烤了 这就是所谓的XA事务,两阶段提交. 有一个事务管理器,负责协调多个数据库(资源管理器)的事务,事务管理器先问各个数据库你准备好了吗? 如果每个数据库都回复ok,那么就正式提交事务,在各个数据库上执行操作

Spring系列.事务管理

こ雲淡風輕ζ 提交于 2020-08-06 20:09:41
Spring提供了一致的事务管理抽象。这个抽象是Spring最重要的抽象之一, 它有如下的优点: 为不同的事务API提供一致的编程模型,如JTA、JDBC、Hibernate和MyBatis数据库层 等; 提供比大多数事务API更简单的,易于使用的编程式事务管理API; 完美整合Spring数据访问抽象; 支持Spring声明式事务管理; 这篇博客就来介绍Spring事务管理相关的内容。 事务简介 什么是事务 事务(Transaction)一般是指对数据库的一个或一组操作单元。 事务的作用 1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。 当一个事务被提交给了DBMS(数据库管理系统),则DBMS需要确保该事务中的所有操作都成功完成且其结果被永久保存在数据库中,如果事务中有的操作没有成功完成,则事务中的所有操作都需要被回滚,回到事务执行前的状态(要么全执行,要么全都不执行);同时,该事务对数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。 事务的特点 事务具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(Atomicity):事务作为一个整体被执行

分布式

*爱你&永不变心* 提交于 2020-08-05 08:22:11
1. 首先说下要解决的内容 1. 1 分布式:分布式session会话、分布式锁、分布式存储、分布式事务 1.2 集群:集群管理、负载均衡、熔断 2. 消息中间件:rocketMQ、rabbitMQ、KAFKA、HIVE MQ、zookeeper、ACTIVE MQ 3.提供分布式事务的:rocketMQ/SEATA SAGA/JTA(spring Atomikos)/mongodb 2PC ( Mongo4.2 ) 4.分布式锁:Redis/zookeeper 5. 分布式存储搭建:可以使用云提供的存储、无需要考虑自己扩展的问题,必须使用MongoDB的云,它既提供了分布式事务,当然也提供了我们分布式存储的功能,当然如果往大的分布式存储的方向考虑就是使用大数据的分布式存储HIVE 和 HBASE 6. 集群管理:zookeeper,SPRING EUREKA 7. RPC调用: DUBBO、NETTY 、RMI(JAVA)/SPRING FEIGN、 8、 负载: NGINX 、 RIBBON 、 ZOOKEEPER , 基本上在中间件里都具备这些负载, 所以重点应该关注负载的一些基础原理: 9. 熔断/容错机制:既然在分布式中的各个中间件都是标榜给分布式带来高可用,就无比在每个中间件学习他们的熔断或者容错机制! 1. IP HASH 定向负载 2. 轮询 3. 随机负载 4.