前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用服务器的分布式事务支持和Seata的对比分析

应用服务器的分布式事务支持和Seata的对比分析

作者头像
mazhen
发布2023-11-24 15:45:18
1970
发布2023-11-24 15:45:18
举报
文章被收录于专栏:mazhen.techmazhen.tech

应用服务器的分布式事务支持

我们先看一下分布式事务的需求是如何产生的,以及应用服务器是如何支持分布式事务管理的。

  • 单体应用

首先看单体应用,所有的模块部署在一个应用服务器上,业务数据都保存在单个数据库中,这种场景本地事务就可以满足需求。

local-transaction
local-transaction
  • 数据库水平拆分

如果数据库按照业务模块进行水平拆分,完成一个业务请求会涉及到跨库的资源访问和更新,这时候就需要使用应用服务器的JTA进行两阶段提交,保证跨库操作的事务完整性。

jta
jta
  • 应用模块拆分

应用按照业务模块进一步拆分,每一个模块都作为EJB,部署在独立的应用服务器中。完成一个业务请求会跨越多个应用服务器节点和资源,如何在这种场景保证业务操作的事务呢?当访问入口EJBJTA会自动开启全局事务,事务上下文随着EJB的远程调用在应用服务器之间传播,让被调用的EJB也加入到全局事务中。

jts
jts

这就是应用因拆分而遇到分布式事务的问题,以及应用服务器是如何解决这个问题的。

分布式事务中间件

微服务时代,没人再使用沉重的EJB,都是将Spring Bean直接暴露为远程服务。完成一个业务请求需要跨越多个微服务,同样需要面对分布式事务的问题。这时就需要引入分布式事务中间件。我们以蚂蚁金服开源的Seata为例,看看它是怎么解决微服务场景下的分布式事务问题。

将上一小节跑在应用服务器上的业务,使用微服务 + Seata的重构后,部署架构如下:

seata-microservices
seata-microservices

上图中黄色方框(RMTMTC)是Seata的核心组件,它们配合完成对微服务的分布式事务支持。可以看出,和应用服务器的EJB方案架构上类似,只是多了一个独立运行的TC组件。

我们再看看Seata各组件的具体作用。

Seata的架构

seata-architecture
seata-architecture

Seata由三个组件构成:

  • Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
  • Transaction Manager (TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
  • Resource Manager (RM): 控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。

Seata vs. 应用服务器

Seata和应用服务器的分布式事务支持主要有以下四个差异:

  1. Seata和应用服务器都可以实现业务无侵入分布式事务支持。但应用服务器的XA方案实现的是实时一致性,而SeataAT 模式实现的是最终一致性
  2. Seata引入了独立运行的Transaction Coordinator,维护全局事务的运行状态。而应用服务器的访问入口节点承担了维护全局事务状态的职责。
  3. Seata自己实现了Resource Manager,不需要依赖数据库的XA driver。这样就有可能将没有实现XA接口的资源加入的分布式事务中,例如NoSQL。同时,RM的实现要比JTA中的XAResource复杂很多。RM需要拦截并解析SQL,生成回滚语句,在事务rollback时自动进行数据还原。XAResource是对XA driver的包装,资源参与分布式事务的能力,都是由数据库提供的。
  4. 事务上下文的传播机制不同。应用服务器使用标准的RMI-IIOP协议进行事务上下文的跨节点传播。Seata是对各种RPC框架提供了插件,拦截请求和响应,事务上下文随着RPC调用进行跨节点传播。目前Seata已经支持了dubbogRPCMotansofa-rpc等多种RPC框架。

Seata和应用服务器都支持在分布式场景下的全局事务,都可以做到对业务无侵入。Seata实现的是最终一致性,因此性能比应用服务器的XA方案好很多,具备海量并发处理能力,这也是互联网公司选择它的原因。由于Seata不依赖数据库的XA driver,只使用数据库的本地事务,就完成了对分布式事务的支持,相当于承担了部分数据库的职责,因此Seata的实现难度要比应用服务器的JTA大。

应用服务器进入微服务时代

那么应用服务器的分布式事务支持在微服务时代还有用吗?或者说我们应该怎样改进,才能让应用服务器进入微服务时代?

首先我们要看到JTA/XA的优势:支持数据的实时一致性,对业务开发更加友好。客户对原有的系统进行微服务改造时,如果把业务模型假定成数据最终一致性,客户就不得不做出很大的妥协和变更。特别是有些金融客户对一致性的要求会比较高。

我们可以学习Seata的架构,抛弃掉沉重的EJB/RMI-IIOP,让Spring Bean通过dubboRPC框架直接对外暴露服务,同时事务上下文可以在RPC调用时进行传递:

jta-microservices
jta-microservices

我们甚至可以将JTA独立出来,和Tomcat这样的Web容器整合,为微服务架构提供分布式事务支持。相信通过这样的改造,应用服务器的分布式事务能力在微服务时代又能焕发第二春。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 应用服务器的分布式事务支持
  • 分布式事务中间件
    • Seata的架构
    • Seata vs. 应用服务器
    • 应用服务器进入微服务时代
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档