Comments (3)
有小伙伴已经对 ShardingSphere JTA 部分相了相对应的源码分析。以下内容,作为个人观点,对 ShardingSphere 为什么会这样实现做相对应的分析。
ShardingSphere 作为一个数据库层面的中间件,其关注点在于:
● 灵活适配数据库协议,如 MySQL、MariaDB、PostgreSQL 等;
● 连接应用程序和异构数据库;
● 数据库访问入口的能力增强,如数据安全、数据治理以及可观测性能力的增强;
● 微内核以及可插拔模式,开发者可根据自身需求高度定制。
其目标愿景决定了其产品的特点。
● 多数据库协议的兼容
从多数据库协议的适配兼容上来说,决定了其代码需要具备高度可扩展性,或者说需要提供可配制化的能力,而所谓的配置化,将选择权交给了用户。其对 Java 原生 SPI 增强的 TypedSPILoader 为用户提供了这样选择权,选择什么样的数据库在于用户。
X/Open XA 作为标准的分布式事务协议,像 MySQL 实现了这样的能力。JTA 规范也有针对 XA 事务的实现提供了 API 约定,不同的厂商针对 JTA 提供了不同的产品实现,ShardingSphere 本身并不实现 JTA 标准,但其提供了对 JTA 能力的支持,如 Atomikos,ShardingSphere 定义了其内部统一的 ShardingSphereTransactionManager 接口,对应的有 XAShardingSphereTransactionManager,ShardingSphere 本身并没有像 Spring 那样对 JTA 事务的集成做相对应的模板封装,其意在提供原生 JTA XA 事务能力的一对一映射,只将相对应的事务操作委派给对应的 XA 实现 Provider,如 Atomikos。
Spring 意在使 Java 应用开发本身变得更简单,让开发者更关注于业务逻辑本身,而不是将重心放在如何将应用程序与基础软件如中间件等进行集成。
以上,是个人对 ShardingSphere 对 JTA 能力支持最终呈现形态的分析,主要从其产品定位出发,探讨其与 Spring JTA 实现的差异。
from java-training-camp.
https://github.com/liqi19950722/Work/tree/master/work-2-05
我的理解:
只要把任何资源实现为XAResource
,比如OSS存储,NoSQL,Message等等
再通过javax.transaction.Transaction#enlistResource
和javax.transaction.Transaction#delistResource
,把XAResource
交由JTA管理,即可实现通用事务管理
我的理解没错的话ShardingSphere其实没必要DecoratorJTA的实现,实现XAResource
即可
JTA4.2Transaction Association and Connection RequestFlow
说句题外话 通过学习EJB JDBC JTA规范有如下感受:
- 在Java领域,分布式事务从EJB出现之后一直都存在,解决了EJB分开部署的问题,但是不好理解,也有IBM和Oracle等厂商提供实现(付费)
- 在之后的某一段时间内(可能是硬件高速发展), 所有的Bean都能在一个容器下部署,分布式事务变成本地事务(Spring)
- 现阶段,面对数据量大幅增长的情况,又不得不通过微服务等方式分开部署,分布式事务又重新回到开发的视野中
- 根据文献,JTA实现需要事务状态与线程绑定,可能没法应对高并发场景,,或者像大多数文章说的,可能有单点问题,需要通过别的方式解决
article
其实还有一个比较有意思的事情:
我曾经在海澜之家买过衣服,场景很简单就是我买完衣服3天内送积分。
如果按照JTA事务,是不是会发生下完单等支付,支付完等积分发送(最多3天),最后才完成整个流程。这样是不是有点傻呢~~~可能缓存双写用JTA还适合一点
我觉得开发要做的是合理划分事务边界,而不是扯怎么去实现分布式事务
from java-training-camp.
from java-training-camp.
Related Issues (20)
- 第二期 作业六:RPC 框架新增分布式事务支持 HOT 3
- 第二期 作业七:配置验证 HOT 4
- 第二期 作业八:学习 antlr4 并编写 MySQL DML 语句解析 HOT 3
- 第二期 作业九:基于 Redisson 实现分布式服务容错 HOT 2
- 第三期 作业一:Eureka Server 支持 JGroup 广播复制(已注册服务实例) HOT 1
- 第三期 作业二:搭建 MySQL Group Replication 集群 HOT 1
- 第三期 作业三:将 Shopizer 项目中的数据表 LANGUAGE 分表
- 第三期 作业四:部署 Apache Kafka 多实例集群 HOT 1
- 第三期 作业五:完成 Spring Cloud Gateway 与 gRPC 整合
- 第三期 作业六:完成 Istio 官方示例 Bookinfo 本地部署 HOT 1
- 第三期 作业七:完成 Apache Dubbo Mesh 官方示例
- 第三期 作业八:完成 etcd 集群本地部署
- 第三期 作业九:完成 ELK Cluster + Spring Boot 应用日志 + Kafka HOT 1
- 第三期 作业十:完成 VictoriaMetrics 集群版本收集 Spring Boot 应用 HOT 1
- 第四期 作业一:回顾第二期 JRAFT RPC 框架和第三期 Eureka Server Group 复制实现
- 第四期 作业二:回顾 Spring Cloud Commons 服务注册与发现通用逻辑
- 第四期 作业三:本地部署 K8s 服务 MongoDB
- 第四期 作业四:基于 Spring 6.0+ HTTP Interface 实现通用同区域优先以及 Zone 多活架构 HOT 3
- 第四期 作业五:基于MySQL Replication Connection 实现通用同区域优先以及 Zone 多活架构 HOT 2
- 第四期 作业六:使用 Docker 本地搭建一套 Redis Cluster 集群 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from java-training-camp.