Spring Cloud与分布式事务

SpringCloud分布式事务 我是猿人,一个热爱技术、热爱编程的IT猿。技术是开源的,知识是共享的!写作是对自己学习的总结和记录,如果您对 Java、分布式、微服务、中间件、Spring Boot、Spring Clo... 阅读详情

X/Open DTP模型

DTP: Distributed Transaction Processing模型,用来规范全局事务处理。

DTP模型组件视图

如上图所示,它定义了几个组件,分别如下:

  • AP:Application Program,应用程序。即需要使用分布式事务的应用服务。
  • RM:Resource Manager,资源管理器。比如数据库或文件系统,通过对共享资源的访问,保障资源的ACID特性。
  • TM:Transaction Manager,事务管理器。主要给事务分配唯一标识,负责事务的启动、提交及回滚,保障全局事务的原子性。
  • CRMs: Communication Resource Managers,通信资源管理器。负责控制分布式应用在TM domain(一组使用同一个TM的实例集合)之内或跨TM domain之间的通信,该通信使用的是OSI TP服务。
  • 通信协议:即由通信资源管理器支持,在分布式应用使用的通信协议。

OSI TP与2PC

OSI TP提出了2PC协议。该协议具体内容如下:

  • 阶段一,TM请求所有的RM预提交各自的事务分支。RM如果能提交,则会记录相关端点事务日志;RM如果不能提交,则返回失败,同时回滚已经处理的操作,然后释放该事务分支的资源。
  • 阶段二,TM向所有的RM发送提交或回滚事务分支的请求。如果第一阶段RM返回的都是成功,则发送提交事务请求;否则只要有一个RM返回失败,就发送回滚事务请求。最后将反馈执行结果给TM,然后TM释放占用的相关资源。

2PC缺点如下:

  • 两阶段的工程都是同步阻塞的,需要等待各个参与者的响应,这会影响分布式事务的操作性能。
  • 单点故障:TM在整个过程中负载协调管理,如果它自身发生故障,那么RM就会阻塞状态,事务无法进行下去。
  • 在数据一致性方面,如果阶段二有部分RM在收到提交请求后提交了事务,部分RM由于网络异常等原因无法收到提交事务请求,就会造成数据不一致的问题。

XA接口与JTA

XA接口是X/Open DTP在2PC的基础上给TM与RM之间通信定义的接口。

在Java领域,J2EE(Java Enterprise Edition)定义了JTA(Java Transaction API)规范,具体见JSR 907,它遵循X/open XA接口,是高级版本的API规范。

JTS(Java Transaction Service):定义更底层的实现TM的相关接口,其中包括支持高级别的JTA接口以及标准的CORBA Object Transaction Service到Java的映射。JTS对于Java的XA事务规范,类似于JMS对于Java的消息中间件规范。

CAP与BASE定理

ACID的C主要关注的是数据在跨节点操作情况下的操作原子性,CAP的C关注的是同一份数据在多个副本之间同步的一致性。

BASE是Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)这几个单纯的缩写。
数据一致性要做到满足ACID特性往往比较可能,于是BASE理论就提出在一些非严格要求强一致的应用场景下面,应用可以根据实际情况来达到最终一致性,其宗旨是通过牺牲强一致性来获取可用性。

使用XA事务来实现分布式事务,其可用性就比较差,于是业界提出了TCC及SAGA等解决方案,其思想和BASE定理类似,通过打破ACID特性中的一个或结果来提升分布式事务的可用性。

Java事务编程接口JTA

满足J2EE规范的容器支持了JTA规范,在纯J2SE领域,Spring Boot官方文档推荐了atomiskos、bitronix、narayana这三个组件。

  • atomitos:原子性。相应的spring-boot组件为spring-boot-starter-jta-atomikos。
  • bitronix: 是一款简单但是完整地实现了JTA1.1规范的事务管理器。相应的组件为spring-boot-starter-jta-bitronix。
  • arayana:它是jboss提供的一款分布式事务管理器,目前实现了JTA1.2版本的规范。

分布式事务TCC模式

定义

  • Tentative Operation: 为了在多个实体之间达成一致,要求一个实体必须能够接受另一个实体对请求执行的不确定性。比如,在发出执行操作请求之后又发出取消该操作的请求。这类后续可能取消的操作,就称为Tentative Operation。
  • Confirmation: 如果请求方认为Tentative Operation没问题,就可用发出Confirmation的执行请求,最终确定这个操作。
  • Cancellation:如果请求方决定撤回Tentative Operation,那么就可用发出Cancellation请求,取消这个操作。

在这里插入图片描述
TCC事务模型的三种状态:

  • Initial状态:最初始的状态,接到Try请求时变成Reserved状态。
  • Reserved状态:接到Confirm请求时变成Final状态,如果接受Cancel请求或等待超时则返回Initial状态。
  • Final状态:TCC事务成功状态。

TCC与2PC

将分布式事务场景,委托给各个业务场景去实现,将业务服务纳入到整个分布式事务当中。在出现不一致的场景的时候可以通过手工等方式介入。

TCC与ACID

TCC模式不满足Isolation特性,即TCC采用预留资源的方式来做try以及cancel操作,那么在达到final状态之前,其他事务读取处于中间状态资源的时候,读到的时“脏数据”。

TCC要求confirm、cancel操作必须是幂等的,因为实际场景会因为网络等原因导致这些操作被重试,因此TCC实现的是最终一致性的分布式事务。

分布式事务SAGA模式

LLT:Long Lived Transaction,指的是持有数据库资源相对较长的长活事务。

如果一个LLT可以被拆分为一序列可以跟其他事务交错执行(interleaved with)的子事务。

SpringCloud:分布式事务Seata Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。Seata托管分布式事务的典型生命周期:TM 开启分布式事务(TM 向 TC 注册全局事务记录);按业务场景,编排数据库、服务等事务内资源(RM 向 TC 汇报资源准备状态 );TM 结束分布式事务,事务一阶段结束(TM 通知 TC 提交/回滚分布式事务);TC 汇总事务信息,决定分布式事务是提交还是回滚;TC 通知所有 RM 阅读详情

相关推荐

Spring Cloud分布式事务终极解决方案探讨

一 前言本话题已收入视频讲座《Spring Cloud分布式事务解决方案》大家不妨围观下阿里2017云栖大会《破解世界性技术难题!GTS让分布式事务简单高效》中,阿里声称提出了一种破解世界性难题之分布式事务的终极解决方案,无论是可靠性、还是处理速率都领先于市面上所有的技术。但令人遗憾的是一来项目未开源,二来还必须依赖阿里云的分布式数据库。毕竟,吃饭的家伙可不能轻易示人嘛。虽然如此,但《世界难题..

1万+

SpringCloud(12)— 分布式事务(Seata)

在分布式系统下,一个业务跨越多个服务或数据源,每一个服务都是一个事务。要保证所有分支事务的最终状态一致,这样的事务就是分布式事务。

shaopengjie的博客 2702

Java开发运用Spring Cloud实现分布式事务

在当今的软件开发领域,微服务架构已经成为一种主流的架构模式。Spring Cloud作为微服务架构的优秀解决方案,为开发者提供了一系列的工具和组件,帮助他们构建分布式系统。然而,在分布式系统中,事务管理是一个非常复杂的问题。因为在微服务架构中,一个业务操作可能会涉及多个服务的调用,如何保证这些服务的操作要么全部成功,要么全部失败,就需要引入分布式事务的概念。本文的目的就是详细介绍在Java开发中如何运用Spring Cloud来实现分布式事务。

Java大师兄的博客 1026

spring cloud之分布式事务

参考。

wang0907的博客 1990

基于Spring Cloud的两阶段提交分布式事务框架

缘起 现在用的比较多的分布式事务方案主要有TCC和可靠消息。TCC需要对业务进行改造,分别实现try/confirm/cancel方法,侵入性太强,工作量大。而可靠消息主要适合可以异步调用的业务,对于需要跨服务同步调用的业务,实现困难。以订机票为例,从深圳->新疆乌鲁木齐,假设没有直达,第一步先要确定中转地,选择一家航空公司订票,假设这步的订票结果是成功调用南航的服务订到了深圳->西...

饭西饼 6190

探秘Java领域Spring Cloud的分布式事务管理框架

在微服务架构日益普及的今天,一个系统往往由多个独立的服务组成,这些服务可能部署在不同的服务器上,通过网络进行通信。当涉及到多个服务之间的业务操作时,如何保证数据的一致性成为了一个棘手的问题。本文章的目的就是深入探讨Spring Cloud中分布式事务管理框架,帮助开发者理解其原理、掌握使用方法,从而能够在实际项目中有效地处理分布式事务。文章的范围涵盖了Spring Cloud中常见的分布式事务管理框架的核心概念、算法原理、实际应用场景等方面。

Java大师兄的博客 1127

Spring Cloud 分布式事务 Seata

分布式事务是指事务的操作跨越多个独立的服务或数据库,要求所有操作要么全部成功,要么全部失败,以确保数据的一致性。Seata 提供了一种高效、易用的分布式事务解决方案,与 Spring Cloud 深度集成,能够满足大多数微服务架构中的事务一致性需求。通过合理地选择事务模式和优化配置,开发者可以在提升系统性能的同时,确保数据的一致性和可靠性。

Flying_Fish_roe的博客 2019

分布式事务TCC框架-hmily(spring cloud feign)

官网案例: 文档(springcloud):https://dromara.org/zh/projects/hmily/user-springcloud/ 官网示例:https://github.com/dromara/hmily/tree/master/hmily-demo/hmily-demo-springcloud 本示例:https://codechina.youkuaiyun.com/wwwzhouzy/zhouzy-hmily 一、说明 hmily是一个高性能异步分布式事务TCC框架,具有以下..

wwwzhouzy的专栏 3769

Spring Cloud整合Seata实现分布式事务

Spring Cloud整合Seata分布式事务框架 Seata:阿里巴巴开源的一款分布式解决方案,其前身是Fescar。官网:https://seata.io/zh-cn/index.html。 1. 添加依赖 <dependency> <groupId>com.alibaba.cloud</groupId> ...

XUDC的程序人生 5494

Java领域Spring Cloud分布式事务解决方案

本文旨在为Java开发者提供Spring Cloud环境下分布式事务的全面解决方案。内容涵盖理论基础、实现原理、实战案例和最佳实践,适用于需要解决微服务架构下数据一致性问题的技术团队。文章从基础概念入手,逐步深入到各种解决方案的实现细节,最后通过实战案例和对比分析帮助读者做出合理的技术选型。分布式事务:跨多个数据库或服务的事务操作,需要保证ACID特性CAP定理:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三者不可兼得。

Java大师兄的博客 1008

SpringCloud Alibaba - Seata 四种分布式事务解决方案(XA、AT)+ 实践部署(上)

TM 看到业务结束了,就会去通知 TC,那么 TC 就会判断是提交还是回滚. 如果分支事务的状态都是成功的,那就可以把第一阶段准备的快照给删了(删快照这个动作是异步的,因为第一阶段都成功了,也提交了,后面的事情就可以用一个线程独立去做,提高了效率). 如果第一阶段有人失败了,就要基于 undo log 恢复数据,恢复以后这个 log 也就没用了,最后也会删除.2. XA 依赖于数据库的机制来做回滚,而 AT 模式因为已经提交了,就不能回滚,他是通过给自己生成快照的方式来实现数据的恢复.

CYK_byte的博客 5622

Spring Cloud中集成分布式事务:Seata

Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,旨在为微服务架构中的分布式系统提供高效且一致的事务管理。

2501_92589102的博客 1214

Spring Cloud Alibaba系列之分布式事务Seata

Spring Cloud Alibaba系列之分布式事务Seata。Seata是Alibaba开源的一款分布式事务解决方案框架,致力于提供简单易用,高性能的服务。Seata支持多种分布式事务解决方法,比如常见的TCC、XA、SAGA,同时还有独创的AT模式

Nicky's blog 2856

Java面试实战:Spring Cloud、Redis与分布式事务的那些事

本次面试覆盖了Spring Boot、Spring Cloud、Redis、分布式事务、MyBatis分库分表、WebSocket等核心技术点。通过问答,可以看出候选人在基础技术上掌握良好,但在复杂场景下仍需深入学习。

杨不易呀 1107

Spring Cloud在Java领域的分布式事务处理

随着微服务架构在Java领域的广泛应用,分布式事务处理成为系统设计的核心挑战。本文旨在系统梳理Spring Cloud生态中分布式事务的解决方案,深入解析技术原理并提供可落地的实践经验。内容覆盖理论基础、框架实现、实战案例与性能优化,适用于中高级Java开发者、架构师及技术决策者。基础理论:解析分布式事务核心概念与理论模型框架解析:深入Seata架构及核心事务模式实现实战指南:完整演示微服务事务管理的开发过程应用分析:典型场景解决方案与最佳实践未来展望:探讨云原生时代的技术挑战与发展方向。

AI开发架构师 1021

Greenplum基础

CREATE DATABASE 是 SQL 命令,用于创建一个新的数据库。name 是你要创建的数据库的名称。这个名称是必须的,并且在同一个数据库服务器上必须是唯一的。可选项,OWNER 指定了新数据库的所有者,如果未指定,新数据库的所有者默认是执行该命令的用户。dbowner 是数据库所有者的用户名。可选项,TEMPLATE 指定了用于创建新数据库的模板。在 PostgreSQL 和 GreenPlum 中,通常有一个名为 template1 的默认模板。如果不指定,就会使用这个默认模板。

m0_57697768的博客 1206

在Spring Cloud中实现分布式事务

摘要:本文介绍了三种主流分布式事务实现方案。1)Seata AT模式:基于两阶段提交,通过全局事务协调器自动管理,只需添加注解即可实现无侵入式事务管理;2)可靠消息最终一致性:通过MQ消息队列实现,保证消息可靠投递和消费幂等性;3)TCC模式:通过Try-Confirm-Cancel三阶段接口实现资源预留和释放。文章详细说明了各方案的实现步骤、配置代码及适用场景,推荐Seata AT模式作为通用解决方案,同时针对不同业务场景给出了选型建议,并提供了常见问题的解决方法。

从技术实践立足,从项目管理方法论延伸思考 610

【传感器标定(三):激光雷达标定原理与实现详解】

本文系统介绍了激光雷达标定的基本原理与方法。主要内容包括:激光雷达标定的分类(内参标定和外参标定)、坐标系定义和刚体变换数学基础;详细阐述了测距误差和光束方向两种内参标定方法;重点分析了基于目标(平面标定板、三维标定物)和基于运动(手眼标定、点云配准)的外参标定方法;介绍了多传感器联合标定技术及非线性优化、鲁棒标定等实现方法;最后提出了定量和定性两种标定评估体系。为激光雷达在自动驾驶等领域的精确应用提供了系统的标定技术指导。

weixin_47429781的博客 3789

Spring Cloud高级教程:分布式事务与服务降级的完美实现

分布式事务是指跨越多个分布式节点的事务操作。在微服务架构中,每个服务通常拥有独立的数据库,因此需要协调多个服务之间的数据一致性。服务降级是指在系统压力过大或某些服务不可用时,通过降低服务质量或提供备用方案,保证系统的整体可用性。分布式事务和服务降级是微服务架构中的两大核心挑战。通过Spring Cloud与Seata、RocketMQ、Resilience4j等工具的集成,开发者可以轻松实现分布式事务和服务降级,构建高可用、高可靠的微服务系统。

小筱在线博客 1106

微信支付V2,jsapi支付拉起收银台报错:调用支付JSAPI缺少参数:total_fee

拉起收银台报错

m0_54355172的博客 3873

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 6954
上一篇: Spring Cloud认证和授权
下一篇: 注解@PostConstruct与@PreDestroy详解及实例
菜鸟=大神
博客等级 码龄11年 5粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值