QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:0021923

评论

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

如何通过OpenHarmony的音频模块实现录音变速功能?

OpenHarmony开发者

OpenHarmony

【数据结构实践】简单实现Python自定义队列

迷彩

数据结构 算法 队列 8月月更

泛谈传统运营商借鉴电商模式

鲸品堂

电商 运营商 通信运营商 电信运营商

团队管理之不轻易责备

蛋先生DX

管理 团队 团队氛围

升哲科技荣获2022年“中国IC设计成就奖”

SENSORO

物联网 芯片

数字藏品APP开发定制

开源直播系统源码

软件开发 数字藏品 数字藏品开发 数字藏品系统

华为云CDN同舟计划

科技云未来

狂刷《Java权威面试指南(阿里版)》,冲击“金九银十”有望了

Geek_Yin

阿里 Java 面试 架构师 #java 程序员面试、

大数据培训机构学习会不会有点难?

小谷哥

秋招!面试十次字节/美团失败总结的《520道LeetCode题Java版答案》

退休的汤姆

Java 程序员 面经 Java工程师 秋招

2022年密码测评理论与关键技术前沿论坛|海泰方圆分享密码应用改造典型方案

电子信息发烧客

数字无限 云领未来 | 华为云&赛意信息线上直播约定您

Geek_2d6073

开源一夏 |log4j2漏洞复现及修复

六月的雨在InfoQ

开源 Log4j 2 Log4j2 漏洞 8月月更

2021年中国智能驾驶行业洞察

易观分析

自动化 智能驾驶

低学历能通过Java培训学习吗?

小谷哥

绿色数据中心案例介绍:阿里巴巴、华为、电信、移动……

GPU算力

TDengine 3.0 三大创新详解

TDengine

数据库 tdengine 时序数据库

MobTech MobLink功能说明及应用创建

MobTech袤博科技

开发 短链接 跳转访问网页

RT-Thread记录(十五、I/O 设备模型之SPI设备)

矜辰所致

RT-Thread 8月月更 I/O设备模型

太牛了!这份什么神仙级Spring Cloud Alibaba全套笔记,从入门到实战,全方位讲解微服务技术栈!

Geek_Yin

程序员 阿里 架构师 spring cloud alibaba #java

死磕它七年“腾讯限量版”Java架构笔记,要个40k不过分吧?

Geek_Yin

编程 程序员 涨薪 架构师 #java

测试 SAP 电商云 Spartacus UI 3.4.x 和 4.3.x 的 guest checkout 功能

汪子熙

typescript 前端 angular Spartacus 8月月更

阿里云 ACK One 多集群管理全面升级:多集群服务、多集群监控、两地三中心应用容灾

阿里巴巴云原生

阿里云 容器 分布式 云原生 集群

向量数据库公司 Zilliz 完成 6000 万美元 B+ 轮融资

Zilliz

融资 数据库·

2022秋招,Java岗最全面试攻略,吃透25个技术栈Offer拿到手软

Geek_Yin

程序人生 java面试 程序猿 #java Java面试八股文

怎么选择合适自己的web编程培训机构?

小谷哥

牛客网论坛最具争议的Java面试成神笔记,GitHub已下载量已过百万

Geek_Yin

编程 程序员 牛客网 #java Java面试八股文

长阳土家族自治县政府与升哲科技达成战略合作

SENSORO

新基建 智慧城市 AIOT

“智慧”有为!AntDB数据库助力某省高速率先完成自主可控建设

亚信AntDB数据库

AntDB 国产数据库 aisware antdb

Java基础知识总结--事务失效的12种场景

阿婷

Java 后端 事务 8月月更

一箭双雕!刷完阿里P8架构师spring学习笔记+源码剖析,涨薪8K

Geek_Yin

编程 程序员 springboot #java Spring Java

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