大数跨境
0
0

他俩在分布式事务领域牵手了

他俩在分布式事务领域牵手了 阿里巴巴中间件
2019-07-04
1
导读:在BASE 柔性事务方面,ShardingSphere 提供的接入分布式事务的SPI,只适用于对性能要求较高,对一致性要求比较低的业务。

分布式数据库中间件 ShardingSphere Seata 分布式事务能力进行整合,旨在打造一致性更强的分布式数据库中间件


背景



数据库领域,分布式事务的实现主要包含:两阶段的 XA 和 BASE 柔性事务。


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


但在 BASE 柔性事务方面,ShardingSphere 提供的接入分布式事务的 SPI,只适用于对性能要求较高,对一致性要求比较低的业务。


Seata 核心的 AT 模式适用于构建于支持本地 ACID 事务的关系型数据库。通过整合 Seata,其AT 在一阶段提交+补偿的基础上,通过 TC 的全局锁实现了RC隔离级别的支持,可提高 ShardingSphere 的分布式事务的一致性。



整合方案



整合 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



ShardingSphere 已经实现了 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即可。

 

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

 

3、Run YamlConfigurationTransactionExample.java



关于 ShardingSphere

ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。目前,已经拥有超过 8000 的 Star,57位 Contributors。


关于 Seata

Seata 是阿里巴巴和蚂蚁金服共同开源的分布式事务中间件,融合了双方在分布式事务技术上的积累,并沉淀了新零售、云计算和新金融等场景下丰富的实践经验,以高效并且对业务 0 侵入的方式,解决微服务场景下面临的分布式事务问题。目前,已经拥有超过 9900 的 Star,83位 Contributors。


本文缩略图:icon by 新830313

©每周一推

第一时间获得下期分享


Tips:

# 点下“看”❤️

# 然后,公众号对话框内发送“肥皂”,试试手气?😆

# 本期奖品是来自淘宝心选的手工保湿滋润冷凝洁面古方皂

【声明】内容源于网络
0
0
阿里巴巴中间件
Aliware阿里巴巴中间件官方账号
内容 920
粉丝 0
阿里巴巴中间件 Aliware阿里巴巴中间件官方账号
总阅读371
粉丝0
内容920