ShardingSphere x Seata,一致性更强的分布式数据库中间件

标签: dev | 发表时间:2019-07-07 00:00 | 作者:
出处:http://itindex.net/relian

日前,分布式数据库中间件 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。


相关 [shardingsphere seata 一致性] 推荐:

ShardingSphere x Seata,一致性更强的分布式数据库中间件

- - IT瘾-dev
日前,分布式数据库中间件 ShardingSphere 将Seata 分布式事务能力进行整合,旨在打造一致性更强的分布式数据库中间件. 数据库领域,分布式事务的实现主要包含:两阶段的 XA 和 BASE 柔性事务. XA 事务底层,依赖于具体的数据库厂商对 XA 两阶段提交协议的支持. 通常,XA 协议通过在 Prepare 和 Commit 阶段进行 2PL(2 阶段锁),保证了分布式事务的 ACID,适用于短事务及非云化环境(云化环境下一次 IO 操作大概需要 20ms,两阶段锁会锁住资源长达 40ms,因此热点行上的事务的 TPS 会降到 25/s 左右,非云化环境通常一次 IO 只需几毫秒,因此锁热点数据的时间相对较低).

Seata-AT 如何保证分布式事务一致性

- - 掘金 后端
作者 | 陈健斌(funkye) github id: a364176773 来源| 阿里巴巴云原生公众号. Seata 是一款开源的分布式事务解决方案,star 高达 18100+,社区活跃度极高,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,本文将剖析 Seata-AT 的实现原理,让用户对 AT 模式有更深入的认识.

Apache ShardingSphere在转转亿级交易系统落地实践

- - 掘金 后端
这几年随着转转二手业务的快速发展,订单系统的基础性能问题也愈发严重,作为系统运转的基石,订单库压力不容小觑. 大促期间DB压力大,单库查询qps上万占用大量数据库资源,写性能大大降低;. 数据与日剧增,单库中包含非常多数据量过数亿的大表,占用空间接近服务器的容量上限;. 数据量太大,数据备份和恢复需要耗费很长时间,极端情况下丢失数据的风险越高.

分布式事务框架seata落地实践

- - 有道技术沙龙博客
seata是阿里巴巴研发的一套开源分布式事务框架,提供了AT、TCC、SAGA 和 XA 几种事务模式. 本文以精品课项目组的物流后台服务为例,介绍seata框架落地的过程,遇到的问题以及解决方案. 有道精品课教务系统是基于springcloud的分布式集群服务. 在实际业务中,存在许多分布式事务场景.

Seata分布式事务解决方案详解

- - 掘金 架构
什么是分布式事务,这里就不做解释了,介绍一下下面的常用分布式事务解决方案. Seata分布式事务框架:阿里巴巴2019年开源的分布式事务解决方案. 本文会详细分析AT和TCC原理以及对比,SAGA和XA暂时不在本文讨论中,后续会补上. 提一嘴,Saga不存在并发执行问题,因为Saga本质上是一个责任链模式,在同一个线程上有严格的先后执行驱动顺序.

Seata 在蚂蚁国际银行业务的落地实践

- - 掘金 架构
文|李乔(花名:南桥)、李宗杰(花名:白鹰). 李乔:蚂蚁集团高级开发工程师,负责蚂蚁境外银行支付结算系统开发. 李宗杰:蚂蚁集团技术专家,负责蚂蚁分布式事务中间件研发. 本文 11580 字 阅读 25 分钟. 蚂蚁国际境外银行业务正在部分迁移至阿里云,原内部使用的 SOFA 技术栈无法在阿里云上得到支持.

Apache ShardingSphere:刚柔并济的开源分布式事务解决方案

- - IT瘾-dev
成熟的XA事务管理器非常多,Apache ShardingSphere(Incubating)并未选择重新造轮子,而是寄望于打造一个生态,将合适的轮子有机地整合在一起,提供成熟稳定的分布式事务处理能力. 1.   复用成熟引擎,自动切换底层实现. Sharding-transaction-xa模块进一步定义了面向XA事务管理器开发者的SPI,开发者仅需实现SPI定义的接口,即可自动加入至Apache ShardingSphere(Incubating)生态,作为其XA事务管理器.

分库分表(5) ---SpringBoot + ShardingSphere 实现分库分表 - 雨点的名字 - 博客园

- -
分库分表(5)--- ShardingSphere实现分库分表. 有关分库分表前面写了四篇博客:. 分库分表(1) --- 理论. 分库分表(2) --- ShardingSphere(理论). 分库分表(3) ---SpringBoot + ShardingSphere实现读写分离. 分库分表(4) ---SpringBoot + ShardingSphere 实现分表.

一致性hash

- - 互联网 - ITeye博客
一致性hash算法 - consistent hashing. 分类:  算法艺术2010-02-02 09:19 69836人阅读  评论(97)  收藏  举报. 算法 cache object 服务器 存储 c. 一致性 hash 算法( consistent hashing ).

Spring Cloud Alibaba | 微服务分布式事务之Seata - 极客挖掘机 - 博客园

- -
Spring Cloud Alibaba | 微服务分布式事务之Seata. 本篇实战所使用Spring有关版本:. 在构建微服务的过程中,不管是使用什么框架、组件来构建,都绕不开一个问题,跨服务的业务操作如何保持数据一致性. 首先,设想一个传统的单体应用,无论多少内部调用,最后终归是在同一个数据库上进行操作来完成一向业务操作,如图:.