Java 跨服务器事务管理的完美解决方案 (java跨服务器事务管理)
AB资源网 2023-09-19 09:22 4000 浏览 0 评论
随着互联网技术的不断发展,分布式系统已经成为了很多企业的标配架构,而 Java 作为一种被广泛应用在分布式系统中的编程语言,在面对分布式事务的管理上也成为了一个重要的问题。由于分布式事务面临着跨网络、跨进程甚至跨语言的复杂情况,因此会涉及到很多挑战和困难。针对这一问题,一些研究者开发了一些跨服务器事务管理的完美解决方案,本文将一一阐述。

传统的分布式事务方案——两阶段提交协议
在介绍跨服务器事务管理的完美解决方案之前,我们先来看一下传统的分布式事务方案——两阶段提交协议。该协议主要包括两个阶段:
之一阶段:
事务协调者向所有参与者发起 prepare 请求,要求参与者准备提交事务。
第二阶段:
事务协调者根据参与者的响应情况决定是否提交事务,具体流程如下图所示:

需要注意的是,两阶段提交协议有着一些缺点,如存在单点故障,所有的事务协调者都是串行处理事务等。因此,研究者们开始发现两阶段提交协议并不是一个完美的解决方案。
XA 协议——跨服务器事务管理的一次尝试
XA 协议是为了解决两阶段提交协议的一些局限性而提出的一种新型协议。XA 协议在事务管理中引入了一个新的参与者角色——XA 协议参与者,以及一个协调者角色——事务管理器。具体流程如下:
1. 事务管理器向所有 XA 协议参与者发送 XA START 消息,要求参与者开始准备事务。
2. 所有的 XA 协议参与者接受 XA START 消息后,将自己纳入一个独立的事务中,然后开始执行事务。
3. 当一个 XA 协议参与者需要准备提交时,会向事务管理器发送 XA END 消息。
4. 当所有的 XA 协议参与者都发送了 XA END 消息之后,事务管理器向每个 XA 协议参与者发送 XA PREPARE 消息,询问参与者是否准备提交事务。
5. 如果所有的 XA 协议参与者都准备提交事务,则事务管理器会向每个参与者发送 XA COMMIT 消息。
6. 如果任何一个 XA 协议参与者没有准备提交,则事务管理器会向每个参与者发送 XA ROLLBACK 消息。
XA 协议相比于两阶段提交协议而言,具有更好的性能和可用性,但仍然存在一些缺点,如参与者之间的通讯代价较高、参与者需要额外实现 XA 接口、不支持网络分区等。
基于消息队列的分布式事务解决方案——Seata
近年来,随着云原生和微服务架构的兴起,基于消息队列的分布式事务解决方案也逐渐成为了一种新兴的方案。著名的开源项目 Seata 就是一种支持基于消息队列的分布式事务解决方案。与传统的两阶段提交协议或 XA 协议相比,Seata 解决了许多跨服务器事务管理的瓶颈,如服务间调用的幂等性问题、网络分区容错、横向扩展等。
Seata 的基本架构如下所示:

Seata 中主要涉及到三种角色:Transaction Coordinator(TC)、Transaction Manager(TM)以及 Resource Manager(RM)。其中,Transaction Coordinator 和 Transaction Manager 的作用类似于两阶段提交协议中的事务协调者;Resource Manager 则类似于两阶段提交协议中的参与者角色。
Seata 的整个事务过程如下所示:
1. 应用服务向 Seata 的 TM 发送开启全局事务请求(Begin)。
2. TM 向 TC 发送创建全局事务请求,生成对应的全局事务 ID 并返回。
3. TM 向参与全局事务的各个 RM 分别发送创建分支事务请求,并将其与全局事务 ID 关联。
4. 如果所有的 RM 都成功创建了分支事务,则回复 TM 注册成功。
5. TM 向应用服务返回全局事务 ID。
6. 应用服务在执行其业务逻辑并向 Seata 的 RM 发送执行分支事务请求。
7. 如果所有的 RM 执行成功,RM 向 TM 返回执行结果。
8. 当所有分支事务执行成功时,应用服务向 Seata 的 TM 发送提交全局事务请求(Commit)。
9、TM 接收到全局事务触发提交请求,根据分支事务的执行情况向 RM 发送提交分支事务请求。
10. 如果所有的 RM 都成功提交分支事务,则回复 TM 提交成功。
Seata 通过可插拔的架构设计,可以扩展到多种应用场景,同时支持各种常见框架和数据源,例如 Spring Boot、Mybatis 和 MySQL 等。Seata 引入了模块化的设计,提供了丰富的扩展点,所以可以通过开发新的模块、中间件或插件,扩展更多的组件来满足应用的需求。
本文介绍了传统的两阶段提交协议、XA 协议以及基于消息队列的分布式事务解决方案——Seata。可以发现,在跨服务器事务管理的过程中,每种解决方案都具有自身的优点和缺点,需要根据实际场景选择适合的方案。无论哪种方案,都需要考虑局限性和斟酌利弊,为企业应用系统提供更好的分布式事务管理方案。
相关问题拓展阅读:
- java中怎么控制事务的一致性
java中怎么控制事务的一致性
有看情况, 一般是自动提交, 你也可以 手动 自己控制, 有一个失败,提交就失败了
Java中为了控制事务的一致性,会使用插入回滚点、callback方法,保证数据不被篡改,示例如下:
public String delete(String id) {
String ID = id;
db = new getConnection();
Connection con = db.getConnection();
try {
con.setAutoCommit(false);
db.executeUpdate(“delete from helloworld where ID=” + ID); //更新操作1
茄歼丛db.executeUpdate(“delete from helloworld _book where ID=” + ID); //更新操作2
db.executeUpdate(“delete from helloworld_user where ID=” + ID); //更新操作3
con.commit();//提交改亩JDBC事务
con.setAutoCommit(true);
db.close();
return “success”;
}
catch (Exception e) {
con.rollBack();//回滚JDBC事务
e.printStackTrace();
db.close();
return “fail”;
颤樱}
}
不用控制.事务全部成功就一起提交,有一个失败就回滚.这样就保证事务一致性了.
使用spring的aop
Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。
1、JDBC事务
JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
2、JTA(Java Transaction API)事务
JTA是一种高层的,与实现闭御明无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。
JTA允许应用程序执行分布式事务处理–在两个或多个网络计算机资源问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。
如果计划用 JTA 界定拆胡事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。
您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序轿告的文档中可以了解到相关的指导。
J2EE 应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。
XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。
相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。
3、容器事务
容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现。相对编码实现JTA事 务管理,我们可以通过EJB容器提供的容器事务管理机制(CMT)完成同一个功能,这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方 法加入事务,一旦指定,容器将负责事务管理任务。这是我们土建的解决方式,因为通过这种方式我们可以将事务代码排除在逻辑编码之外,同时将所有困难交给J2EE容器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码,不过,理论上我们必须使用EJB。
总结:
事务控制是构建J2EE应用不可缺少的一部分,合理选择应用何种事务对整个应用系统来说至关重要。一般说来,在单个JDBC 连接连接的情况下可以选择JDBC事务,在跨多个连接或者数据库情况下,需要选择使用JTA事务,如果用到了EJB,则可以考虑使用EJB容器事务。
java跨服务器事务管理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java跨服务器事务管理,Java 跨服务器事务管理的完美解决方案,java中怎么控制事务的一致性的信息别忘了在本站进行查找喔。
相关推荐
- 云主机FTP软件:高效传输与安全管理的一站式解决方案
-
在云计算时代,云主机已成为企业和个人用户托管应用和存储数据的首选。为了方便文件传输,FTP(文件传输协议)软件在云主机环境中扮演着重要角色。本文将详细介绍如何在云主机上配置和使用FTP软件...
- 云主机FP:引领未来计算,解锁无限可能
-
云主机FP(FloatingPoint)是指在云计算环境中,针对浮点运算性能进行优化的虚拟机实例。浮点运算在科学计算、工程模拟、金融建模、图形处理等领域中占据重要地位,因此云主机FP的设计和配置...
- 云主机ECS:解锁企业数字化转型的新引擎,高效、安全、灵活的云计算解决方案
-
云主机ECS(ElasticComputeService)是阿里云提供的一种弹性计算服务,它允许用户在云端创建和管理虚拟机实例。ECS的核心优势在于其灵活性和可扩展性,能够满足各种规模和类型的业...
- 云主机D盘:解锁无限存储空间,轻松应对大数据挑战!
-
云主机是一种基于云计算技术的虚拟化服务器,它允许用户在云平台上创建、配置和管理虚拟机实例。在云主机中,磁盘分区是存储数据的关键部分,通常包括系统盘和数据盘。系统盘用于安装操作系统和运行应用...
- 云主机DNS解析:提升网站速度与稳定性的关键策略
-
云主机DNS(DomainNameSystem)是云计算环境中至关重要的一部分,它负责将域名转换为IP地址,从而使得用户能够通过易于记忆的域名访问云主机上的服务和应用。本文将深入探讨云主机DNS...
- 云主机C盘爆满?快速解决方法大揭秘,让你的服务器重获新生!
-
云主机C盘满了是一个常见但棘手的问题,尤其对于依赖云服务进行日常运营的企业和个人用户来说,这可能导致系统性能下降、应用程序崩溃,甚至数据丢失。本文将详细探讨云主机C盘满的原因、影响以及解决方法。...
- 云主机CPU选择指南:提升性能与效率的关键决策
-
在选择云主机的CPU时,用户需要考虑多个因素,以确保所选的CPU能够满足其应用的需求,同时优化成本效益。以下是一些关键点,帮助用户在云主机CPU选择过程中做出明智的决策。了解应用的性能需求...
- 云主机CPU性能大比拼:揭秘顶级云服务商的核心竞争力
-
云主机CPU是云计算环境中至关重要的组成部分,它直接影响着云服务的性能、稳定性和用户体验。CPU,即中央处理器,是计算机系统的核心,负责执行指令和处理数据。在云主机中,CPU的性能决定了虚...
- 云主机ASP:高效搭建动态网站,轻松实现业务扩展与性能优化
-
云主机ASP(ActiveServerPages)是一种在云环境中运行ASP应用程序的技术。ASP是一种由微软开发的动态网页技术,允许开发者使用VBScript或JScript等脚本语言编写服务...
- 云主机API:解锁无限可能,引领企业数字化转型新纪元
-
云主机API(ApplicationProgrammingInterface)是云计算服务提供商为用户提供的一种编程接口,允许开发者通过编程方式管理和操作云主机资源。这些API通常基于RESTf...
- 云主机99idc:高效稳定,轻松搭建您的专属云端空间,一键部署,畅享无限可能!
-
云主机99idc是一家专注于提供云计算服务的公司,其核心业务是为企业和个人用户提供高性能、高可靠性的云主机服务。随着数字化转型的加速,云计算已经成为企业IT基础设施的重要组成部分,而云主机99i...
- 云主机80端口:解锁无限可能,开启高效网络新时代!
-
云主机是一种基于云计算技术的虚拟化服务器,它通过互联网提供计算资源和服务。在云主机中,80端口是一个非常重要的端口,通常用于HTTP协议,即网页服务。本文将详细探讨云主机80端口的相关内容...
- 云主机403错误:解锁高效解决方案,提升网站性能与安全
-
云主机403错误是一个常见的网络问题,通常表示用户在尝试访问某个资源时被服务器拒绝。这种错误可能由多种原因引起,包括权限问题、配置错误、防火墙设置等。以下是关于云主机403错误的一些详细信...
- 云主机360:全方位云端解决方案,助力企业数字化转型无忧
-
云主机360是一种基于云计算技术的虚拟化服务器解决方案,它通过将物理服务器资源虚拟化,为用户提供灵活、高效、安全的计算服务。云主机360的核心优势在于其高度的可扩展性和弹性,用户可以根据业务需求...
- 云主机301:引领未来云计算的新纪元,高效稳定,助力企业数字化转型!
-
云主机301是一种常见的网络重定向状态码,通常用于指示用户请求的资源已被永久移动到新的URL。在云计算环境中,云主机301状态码的出现可能涉及到多种技术和管理策略,下面我们将详细探讨这一现象。...
你 发表评论:
欢迎- 一周热门
-
-
HostYun廉价洛杉矶三网回程CN2 GIA云服务器内测13元/月起(美国原生IP,去程10Gbps防御)
-
大网数据:双12秒杀聚惠,湖北100G高防云低至0元/月,湖北独服务器低至210元、200G高防+50Mbps带宽
-
HostYun洛杉矶大硬盘云服务器9折22.5元/月起(240G-500G硬盘/1Gbps/10G防御)
-
樊云香港双程CN2及洛杉矶50G高防三网CN2 GIA云服务器9折22.5元/月起
-
大网数据、湖北高防云服务器低至39元/月起、湖北高防独服务器低至245元起(200G硬防、金盾+傲盾防CC)
-
spinservers圣何塞/达拉斯10Gbps带宽高配服务器月付89美元起
-
高防服务器大网数据湖北独服务器低至210元、200G高防+50Mbps带宽
-
tmhhost美国高防云服务器8折_CeRaNetworks机房/三网cn2直连/适合建站
-
DogYun新上韩国独立服务器,E5/SSD+NVMe优惠后300元/月,自动化上架
-
初忆云 – 2020年中云聚惠全场五折 BGP云服务器低至88/年,抓紧上车
-
- 互动交流
- 标签列表
- 最新评论
-
您的文章条理清晰,论述有据,说服力强。您的文章情感真挚,能够触动人心,引起共鸣。https://www.renhehui.com/renhehui/1479.h
沉醉于月色 评论于:08-09虚拟机部署好后跟物理机一样当服务器的,只是它依赖了本地物理机不要关机为前提。对于外网访问内网场景,本地内网搭建服务器后需要提供到互联网上连接访问的,比较简便的
访客 评论于:03-01刘中宜 评论于:11-01
访客 评论于:06-03
AB资源网 评论于:05-08
AB资源网 评论于:11-22
AB资源网 评论于:11-22
頹廢了悲伤 评论于:11-15
南风知我意 评论于:11-15
心若冰凝 评论于:11-15