阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

评论

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

ClickHouse分析效率翻倍提升,揭秘奇点云对归因分析场景的优化实践

奇点云

奇点云 clickhosue DataKun

利用Python实现科学式占卜

二哈侠

《设计模式:可复用面向对象软件的基础》PDF

程序员李木子

《设计模式之美》PDF

程序员李木子

一起畅玩!幻兽帕鲁服务器华为云搭建教程(Windows平台)

YG科技

鸿蒙开发:于前端开发而言是福音还是挑战?

EquatorCoco

华为 前端开发 HarmonyOS 鸿蒙开发

IPQ9554 and IPQ9574 difference - the biggest difference point?

wifi6-yiyi

2024 年入局大模型:是否为时已晚?

快乐非自愿限量之名

人工智能 AI技术 GPT

2024年值得推荐的 API 开发工具

快乐非自愿限量之名

推荐 测试 开发工具 API

Atlassian为Jira、Confluence引入AI新功能,进一步释放团队潜能

龙智—DevSecOps解决方案

AI Atlassian

独立站的客户支持体系:提高客户满意度的秘密武器

技术冰糖葫芦

API

C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析

小万哥

C# 程序人生 编程语言 软件工程 后端开发

解密三维CAD选择难题,谁是企业研发设计的「最佳拍档」?

ToB行业头条

reptimeAI + Xinference 联合方案:高效部署并监控你的 LLM 应用

Greptime 格睿科技

监控 openai LLM模型 Greptime GreptimeDB

Go 定时器:Timer 和 Ticker

陈明勇

Go golang Go定时器

媒体声音|PolarDB再升级:欢迎来到云数据库 x AI新时代

阿里云瑶池数据库

人工智能 数据库 云计算 阿里云 云原生

山寨币发展的崛起:随着比特币 ETF 重新定义市场动态,山寨币激增

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

如何降低微服务复杂度丨云栖大会微服务主题分享实录

阿里巴巴云原生

阿里云 微服务 云原生

WorkPlus开启高效沟通新时代,领先的IM工具之选

WorkPlus

【教程】如何在苹果手机上查看系统文件?

雪奈椰子

🛠 Open Source Instant Messaging (IM) Project OpenIM Source Code

Geek_1ef48b

低代码开发视角下的大模型时代:探索“新思维”技术管理

不在线第一只蜗牛

人工智能 低代码 大模型 AI模型

WorkPlus打造高效协作的即时通讯工具,提升工作效率

WorkPlus

目标主力能源:华为智能光伏的时代指南针

脑极体

AI 能源

链路传播(Propagate)机制及使用场景

观测云

APM 链路

追求成长还是追求“高薪”?

老张

个人成长 能力提升

演讲回顾 | 清晖资深讲师分析敏捷实践的最新趋势,帮助大型企业落地敏捷开发

龙智—DevSecOps解决方案

敏捷 Atlassian

2024 年最新版Java面试题及答案整理(纯干货,超详细)

架构师之道

程序员 java面试

深度解析Android APP加固中的必备手段——代码混淆技术

雪奈椰子

构建端到端可观测全景丨云栖大会可观测分享实录

阿里巴巴云原生

阿里云 Serverless Kubernetes 云原生

存内计算技术打破常规算力局限性

小明Java问道之路

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