HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Apache ShardingSphere 整合 Seata AT 分布式事务

  • 2019-07-01
  • 本文字数:1695 字

    阅读完需:约 6 分钟

Apache ShardingSphere整合Seata AT分布式事务

Seata是阿里集团和蚂蚁金服联合打造的分布式事务框架,目前版本包含了 AT 事务和 TCC 事务。其中 AT 事务的目标是在微服务架构下,提供增量的事务 ACID 语意,让用户像使用本地事务一样,使用分布式事务,核心理念同 ShardingSphere 一脉相承。

Seata AT 模型

Seata AT 事务模型包含 TM(事务管理器),RM(资源管理器),TC(事务协调器)。


其中 TC 是一个独立的服务需要单独部署,TM 和 RM 以 jar 包的方式同业务应用部署在一起,它们同 TC 建立长连接,在整个事务生命周期内,保持 RPC 通信。


其中全局事务的发起方作为 TM,全局事务的参与者作为 RM ; TM 负责全局事务的 begin 和 commit/rollback,RM 负责分支事务的执行和 commit/rollback。


ShardingSphere 分布式事务 SPI

ShardingSphere 提供了一套接入分布式事务的 SPI,设计的目标是保证数据分片后,事务的 ACID 语意。分布式事务的实现目前主要包含两阶段的 XA 和 BASE 柔性事务。Seata AT 事务作为 BASE 柔性事务的一种实现,可以无缝接入到 ShardingSphere 生态中。



两阶段 XA 事务方面,我们已经整合了 Atomikos,Narayana,Bitronix 事务管理器,XA 事务底层依赖具体的数据库厂商对 XA 两阶段提交协议的支持,通常 XA 协议通过在 Prepare 和 Commit 阶段进行 2PL(2 阶段锁),保证了分布式事务的 ACID,通常适用于短事务及非云化环境(云化环境下一次 IO 操作大概需要 20ms,两阶段锁会锁住资源长达 40ms,因此事务的 TPS 会降到 25/s 左右,非云化环境通常一次 IO 只需几毫秒,因此锁热点数据的时间相对较低)[1]。


BASE 柔性事务方面,目前我们已经完成了对 ServiceComb Saga 的整合,Saga 通过一阶段提交+补偿的方式提高了整体事务的性能,其中补偿的方式同 Seata 大致相同,即对分片后的物理 SQL 进行 revert 来生成补偿的 SQL,但 Saga 模型在理论上不支持隔离级别,适用于对性能要求较高,对一致性要求比较低的业务。Seata AT 事务在一阶段提交+补偿的基础上,通过 TC 的全局锁实现了 RC 隔离级别的支持,是介于 XA 和 Saga 之间的另一种实现。消息柔性事务方面,也欢迎大家参考我们的 SPI 提供整合的方案。

整合方案

整合 Seata AT 事务时,需要把 TM,RM,TC 的模型融入到 ShardingSphere 分布式事务的 SPI 的生态中。在数据库资源上,Seata 通过对接 DataSource 接口,让 JDBC 操作可以同 TC 进行 RPC 通信。同样,ShardingSphere 也是面向 DataSource 接口对用户配置的物理 DataSource 进行了聚合,因此把物理 DataSource 二次包装为 Seata 的 DataSource 后,就可以把 Seata AT 事务融入到 ShardingSphere 的分片中。


在 Seata 模型中,全局事务的上下文存放在线程变量中,通过扩展服务间的 transport,可以完成线程变量的传递,分支事务通过线程变量判断是否加入到整个 Seata 全局事务中。而 ShardingSphere 的分片执行引擎通常是按多线程执行,因此整合 Seata AT 事务时,需要扩展主线程和子线程的事务上下文传递,这同服务间的上下文传递思路完全相同。


Quick Start

我们已经实现了 base-seata-raw-jdbc-example,大家可以自行进行尝试。


https://github.com/apache/incubator-shardingsphere-example/tree/dev/sharding-jdbc-example/transaction-example/transaction-base-seata-example/transaction-base-seata-raw-jdbc-example


操作手册:


  1. 按照 seata-work-shop 中的步骤,下载并启动 seata server。


https://github.com/seata/seata-workshop


参考 Step6 和 Step7 即可


  1. 在每一个分片数据库实例中执行 resources/sql/undo_log.sql 脚本,创建 undo_log 表

  2. Run YamlConfigurationTransactionExample.java

待优化项

Seata AT 事务在 Revert SQL 时,需要对 ShardingSphere 分片后的物理 SQL 进行二次的解析,这里我们需要设计一个 SPI,避免 SQL 二次解析的性能损耗。


参考论文


[1]: Transactions for Distributed Actors in the Cloud


https://www.microsoft.com/en-us/research/wp-content/uploads/2016/10/EldeebBernstein-TransactionalActors-MSR-TR-1.pdf


本文转载自公众号 ShardingSphere 官微(ID:Sharding-Sphere)


原文链接


https://mp.weixin.qq.com/s/xfUGep5XMcIqRTGY3WFpgA


2019-07-01 08:0021891

评论

发布
暂无评论
发现更多内容

软件复杂度的思考与解决之道

阿里技术

技术成长 软件复杂度

浅谈离线数据倾斜

京东科技开发者

hive sql 数据倾斜 Spark java 企业号 4 月 PK 榜

Apifox 更新 | WebSocket 接口调试功能上线!

Apifox

程序员 开发工具 Apifox API 接口工具

火山引擎DataTester:让企业“无代码”也能用起来的A/B实验平台

字节跳动数据平台

AB testing实战 无代码 A/B 测试 企业号 4 月 PK 榜 企业增长

百度CTO王海峰做客《中国经济大讲堂》:文心一言,读书破万亿

飞桨PaddlePaddle

飞桨 文心一言

网络编程懒人入门(十五):外行也能读懂的网络硬件设备功能原理速成

JackJiang

网络编程 即时通讯 IM

4 月 22 日丨【云数据库技术沙龙】技术进化,让数据更智能

NineData

MySQL 数据库 程序员 开发者 Clickhouse

接口设计文档的12个注意点

做梦都在改BUG

Java 后端开发 接口设计

JDK8到JDK17有哪些吸引人的新特性?

京东科技开发者

Java jdk8 jdk17 java 8 的新特性 企业号 4 月 PK 榜

“淄”味当道,工赋十足

Openlab_cosmoplat

开源社区 双碳

Scrum敏捷研发和项目管理

顿顿顿

Scrum 敏捷开发 敏捷开发流程 leangoo 敏捷开发管理工具

剖析多利熊业务如何基于分布式架构实践稳定性建设

百度Geek说

分布式 稳定性 多利熊 企业号 4 月 PK 榜

最近,我们做了一次“实景”容灾演练

云布道师

阿里云

面试了个985毕业的大佬,回答“性能调优”题时表情令我毕生难忘

做梦都在改BUG

Java 性能优化 性能调优

Kubernetes集群调度增强之超容量扩容

京东科技开发者

Kubernetes k8s 集群 企业号 4 月 PK 榜 超容量扩容

字节面试官:你没有高并发、性能调优经验,为什么录取你?

做梦都在改BUG

Java 高并发 性能调优

安装Zookeeper和Kafka集群

Java你猿哥

Java kafka zookeeper SSM框架 Java工程师

带你一同认识和使用JPA框架进行开发你的应用服务

Java你猿哥

Java SSM框架 jpa Java工程师

如何用scrum敏捷工具做迭代规划及迭代执行。

顿顿顿

Scrum Sprint 敏捷开发管理工具 敏捷工具 迭代规划

华为云新一代iPaaS全域融合集成平台全新升级

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

InfluxDB vs TDengine,用数据“说”性能

TDengine

大数据 tdengine Influxdb 时序数据库 InfluxDB Cluster

深度学习基础5:交叉熵损失函数、MSE、CTC损失适用于字识别语音等序列问题、Balanced L1 Loss适用于目标检测

汀丶人工智能

人工智能 机器学习 深度学习 损失函数

白活了!谷歌架构师10年心血汇成的《24种设计模式》,这才是正解

做梦都在改BUG

Java 设计模式

阅读完synchronized和ReentrantLock的源码后,我竟发现其完全相似

做梦都在改BUG

Java 源码 synchronized ReentrantLock

从源码角度深入解析Callable接口

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

全量通过,华为云GaussDB首批完成信通院全密态数据库评测

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Groovy def关键字妙用

FunTester

Dock优化工具:HyperDock mac中文激活版

真大的脸盆

Mac Mac 软件 优化工具

测试环境治理之MYSQL索引优化篇

京东科技开发者

MySQL 性能优化 测试环境 企业号 4 月 PK 榜

清单推荐:常见的研发效能度量指标(科学管理版)

LigaAI

研发管理 技术管理 效能度量 研发效能度量 企业号 4 月 PK 榜

【架构与设计】常见微服务分层架构的区别和落地实践

京东科技开发者

架构 微服务 DDD 分层架构 企业号 4 月 PK 榜

Apache ShardingSphere整合Seata AT分布式事务_架构_分片生态圈_InfoQ精选文章