Apache ShardingSphere 如何实现分布式事务

陆敬尚,Apache ShardingSphere Committer,SphereEx 基础设施研发工程师,热爱开源,热爱数据库技术,目前专注于 Apache ShardingSphere 事务模块的开发。

背景

随着业务的快速发展,数据的不断膨胀,流量负载的增加,业务系统遇到了强烈的挑战,对数据库系统可扩展性提出了强烈的诉求。Oracle、MySQL、SQL Server、PostgreSQL 传统单机数据库在线扩展上的问题日益凸显。为了解决扩展问题,出现了可水平扩展的分布式数据库,于是分布式事务问题成为了必须面对的问题。

在这种背景下,ShardingSphere 提供了一套分布式数据库增强计算引擎,通过可插拔架构构建基于数据库之上的生态系统,提供了分布式事务的能力。

事务介绍

事务语义

事务语义定义了四个特性:原子性(Atomicity)、持久性(Durability)、一致性(Consistency)、隔离性(Isolatation)。

原子性(Atomicity)

在分布式场景下,一个事务的操作可能分布在多个物理节点上,保证在多个节点上的操作都成功,或都不成功。

持久性(Durability)

事务提交后,即使断电,事务的操作也是有效的。

一致性(Consistency)

注意:不是 CAP 理论中 C,CAP 中的 C 指的是多副本之间的数据一致问题,这里是不同层次的抽象。

站在用户的角度,数据从一个状态,转移到另外一个状态,两个状态都满足一定的约束。比如:

银行账户数据,账户 A 有 500 元,账户 B 有 500 元,总额 1000,在一个事务中,执行完 A 和 B 的转账操作后,A 和 B 的账户总额还是 1000。

隔离性(Isolatation)

事务并发执行时,保证并发时数据的正确性。比如:两个事务同时修改一条数据,保证两个事务按一定顺序执行,使数据保持在一个正确的状态。

面临的挑战

分布式事务相对单机事务来说面临下面的挑战:

  1. 原子性,对于单机事务来说,使用 undo log 和 redo log 就可以保证全部提交或者全部回滚。而分布式事务涉及多个物理节点,每个节点情况是不同的,有的节点日志写成功,有的节点日志写不成功。

  2. 网络的不稳定,对于单机来说,通讯是稳定的,任何操作都可以得到回复,不论成功与失败。而分布式场景下,网络是不稳定的,有可能一个操作是得不到回复的,怎样保证分布式事务的可用性(异常事务的清理、恢复等)是一个问题。

  3. 并发控制,随着 MVCC 的出现,操作的可线性化(linearizable)成为了刚需。在单机数据库中,可以很容易地产生全局单调递增的事务号,在分布式场景中则不然。

解决方案

原子提交

针对原子性和网络不稳定问题,目前主流的解决方案是 2PC,2PC 定义了两个角色 TM(Transaction Manager)、RM(Resource Manager)。

在分布式场景下,一个事务的操作可能分布在多个节点上,整个事务分两个阶段。

  1. 第一阶段,RM 锁定相关资源并执行具体操作,返回成功与否给 TM。

  2. 第二阶段,TM 更具第一阶段 RM 返回的结果,如果全部成功,执行最后的提交操作(事务状态的更改,锁状态删除等),如果有失败的,则回滚。

说明:当然会有一些优化点,比如不涉及多节点的事务转化为一阶段提交等。

注意:两阶段提交协议只解决了提交的问题,要么提交成功,要么不成功,不存在部分成功的中间状态。和事务隔离级别没有必然关系。

并发控制

并发控制,就是保证并发执行的事务在某一种隔离级别上的执行策略。自从多版本控制(MVCC)出现,主流数据库基本抛弃了以前的两阶段锁模型。

并发控制本质是对数据读和写的并发的控制。并发控制的策略决定了隔离级别,并发控制要解决两个问题。

  1. 决定并发的粒度,比如 MySQL 有行锁(粒度为一行),表锁(粒度为一个表)等

  2. 三种并发场景的行为:

a. 读读并发,不需要特殊处理,因为不涉及数据的变更。

b. 写写并发,不能同时并发,否则会产生数据混乱。

c. 读写并发,性能优化主要在这里做,有多种并发控制机制,基本都选择了多版本并发控制(MVCC)。

MVCC 并发控制模型

现有主流实现方式有两种:

  • 基于事务 ID 和 ReadView

每次事务获取事务 ID,标识事务的开启顺序,通过活跃事务列表来获取快照,存储多个以事务 ID 为版本的数据,从而达到并发控制的效果。MySQL、Postgres-XL 都是采取的这种方案。

  • 基于 timestamp

引入 timestamp,通过在数据中添加 timestamp 相关属性,通过对比数据的 commitTs(commit timestamp) 和 Snapshot timestamp 来判断可见性,从而达到可线性化的并发控制效果。Spanner 采用的这种方案。

上面两种方案都离不开全局事务号的生成,常见的全局事务号生成机制有 TrueTime(Spanner 采用),HLC(CockroachDB 采用有误差的 HLC),TSO(Timestamp Oracle),详细原理见参考文献。

ShardingSphere 事务设计

ShardingSphere 事务功能建立在存储 DB 的本地事务之上,提供 LOCAL、XA、BASE 三种模式事务,使用者只需使用原生事务方式(begin/commit/rollback),就可以使用三种模式,在一致性和性能做合适的权衡。

LOCAL

LOCAL 模式直接建立在存储 DB 的本地事务上的,会存在一定的原子性问题,当然性能是最高的,如果可以容忍这个问题,这将是一个不错的选择。

XA

XA 模式,XA 协议是基于 2PC 定义的一套交互协议,定义了 xa start/prepare/end/commit/rollback 等接口,常用的实现有 Narayana、Atomics, ShardingSphere 集成了 Narayana、Atomics 的 XA 实现。

  1. app 连接到 Proxy 上,Proxy 创建一个 session 的对象和这个 connection 绑定。

  2. app 执行 begin,Proxy 通过 Narayana TM 新建一个逻辑 transaction,和当前 session 绑定。

  3. app 执行具体 SQL,session 负责建立到存储 DB 的 connection,并把 connection 通过 Transaction.enlistResource() 接口把 connection 注册到 transaction,执行 XA START {XID} 开启事务,并执行路由改写后的 SQL。

  4. app 执行 commit 命令,transaction 中注册的连接存储 DB 的 connection,分别执行 xa prepare,当所有 connection 返回 ok,更新 transaction 状态为 prepared,每个 connection 执行 xa commit,都返回 ok 更新 transaction 状态为 commited,提交成功。如果 prepare 过程部分失败,用户可以通过 rollback 命令出发回滚,不处理则有后台进程进行清理。

  5. app 执行 rollback 命令,transaction 中注册的连接存储 DB 的 connection,分别执行 xa rollback,进行回滚。

BASE

Base(Basically Available, Soft State, Eventually Consistent)模式,BASE 事务是 CAP 理论中 C 和 A 权衡的结果,Seata 的 AT 模式是 Base 事务的一种实现,ShardingSphere 集成了 Seata 的 AT 实现。

  1. app 连接到 Proxy 上,Proxy 创建一个 session 的对象和这个 connection 绑定。

  2. app 执行 begin,Proxy 通过 Seata TM 新建一个逻辑 transaction,和当前 session 绑定,并注册到 Seata Server。

  3. app 执行一条逻辑 SQL,session 负责建立到存储 DB 的 connection,每个 connection 是 Seata 的 ConnectionProxy 实例,对路由改写后的 actual sql 进行解析, 做一些拦截,比如:如果是修改操作,执行 begin 获取本地锁,执行一条 SQL, 执行 commit 释放本地锁,上报分支事务结果到 Seata Server。

  4. app 执行 commit 命令,Proxy 中的 Seata TM 通知 Seata Server 后,直接返回 app,Seata Server 异步和 Proxy 交互,进行删除事务日志。

  5. app 执行 rollback 命令,Proxy 中的 Seata TM 通知 Seata Server 后,直接返回 app,Seata Server 异步和 Proxy 交互,执行补偿操作,删除事务日志。

详细流程参考 Seata 官网。

使用示例

安装包准备

以支持较好的 XA,集成 Narayana 的实现为例,进行介绍。由于 Narayana 的 License 问题,不能直接打包到安装包内,需要添加额外的依赖。

根据官网下载好安装包,解压到 ${ShardingSphere} 目录,往 ${ShardingSphere}/lib 目录下添加以下 jar 包。(下载地址:https://mvnrepository.com/)

jta-5.12.4.Final.jar
arjuna-5.12.4.Final.jar
common-5.12.4.Final.jar
jboss-connector-api_1.7_spec-1.0.0.Final.jar                                             | ------------------------------------------------------------------------------------------------------------------------------------
jboss-logging-3.2.1.Final.jar                                                    | ------------------------------------------------------------------------------------------------------------------------------------
jboss-transaction-api_1.2_spec-1.0.0.Alpha3.jar                                           | ------------------------------------------------------------------------------------------------------------------------------------
jboss-transaction-spi-7.6.0.Final.jar
mysql-connector-java-5.1.47.jar                                                   | ------------------------------------------------------------------------------------------------------------------------------------
narayana-jts-integration-5.12.4.Final.jar
shardingsphere-transaction-xa-narayana-5.1.1-SNAPSHOT.jar

MySQL 实例准备

  1. 准备两个 MySQL 实例,127.0.0.1:3306,127.0.0.1:3307。

  2. 两个 MySQL 实例分别创建用户 root, 密码为 12345678。

  3. 两个 MySQL 实例分别创建 test 库。

ShardingSphere-Proxy 配置

修改 server.yaml 事务配置

rules:
  - !AUTHORITY
    users:
      - root@%:root
      - sharding@:sharding
    provider:
      type: ALL_PRIVILEGES_PERMITTED
  - !TRANSACTION
    defaultType: XA
    providerType: Narayana

修改 conf/conf-sharding.yaml

dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
    username: root
    password: 12345678
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
  ds_1:
    url: jdbc:mysql://127.0.0.1:3307/test?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false
    username: root
    password: 12345678
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

rules:
  - !SHARDING
    tables:
      account:
        actualDataNodes: ds_${0..1}.account${0..1}
        tableStrategy:
          standard:
            shardingColumn: id
            shardingAlgorithmName: account_inline
        keyGenerateStrategy:
          column: id
          keyGeneratorName: snowflake
    defaultDatabaseStrategy:
      standard:
        shardingColumn: id
        shardingAlgorithmName: database_inline
    defaultTableStrategy:
      none:

    shardingAlgorithms:
      database_inline:
        type: INLINE
        props:
          algorithm-expression: ds_${id % 2}
      account_inline:
        type: INLINE
        props:
          algorithm-expression: account${id % 2}

    keyGenerators:
      snowflake:
        type: SNOWFLAKE
        props:
          worker-id: 123

启动ShardingSphere-Proxy

参考如下命令启动 Proxy:

cd ${ShardingSphere}
./bin/start.sh

使用 ShardingSphere-Proxy

使用 MySQL Client 连接 ShardingSphere-Proxy 进行测试,参考如下命令。

mysql -h127.0.0.1 -P3307 -uroot -proot
mysql> use sharding_db;
Database changed
mysql> create table account(id int, balance float ,transaction_id int);
Query OK, 0 rows affected (0.12 sec)

mysql> select * from account;
Empty set (0.02 sec)

mysql> begin;
Query OK, 0 rows affected (0.09 sec)

mysql> insert into account(id, balance, transaction_id) values(1,1,1),(2,2,2);
Query OK, 2 rows affected (0.53 sec)

mysql> select * from account;
+------+---------+----------------+
| id  | balance | transaction_id |
+------+---------+----------------+
|  2 |   2.0 |       2 |
|  1 |   1.0 |       1 |
+------+---------+----------------+
2 rows in set (0.03 sec)

mysql> commit;
Query OK, 0 rows affected (0.05 sec)

mysql> select * from account;
+------+---------+----------------+
| id  | balance | transaction_id |
+------+---------+----------------+
|  2 |   2.0 |       2 |
|  1 |   1.0 |       1 |
+------+---------+----------------+
2 rows in set (0.02 sec)

未来规划

现在 ShardingSphere 的分布式事务集成了第三方的 2PC 实现方案,提供了原子性的保证,隔离性依赖于存储 DB 的隔离保证,提供了可用的事务功能。未来基于全局 Timestamp 实现 MVCC,结合 2PC,对事务隔离语义提供更好的支持。欢迎大家关注 ShardingSphere 的成长。

如果大家对 Apache ShardingSphere 有任何疑问或建议,欢迎在 GitHub issue 列表提出,或可前往中文社区交流讨论。

GitHub issue:https://github.com/apache/shardingsphere/issues

贡献指南:参与和贡献 :: ShardingSphere

中文社区:OpenSEC - SphereEx 中文社区

参考文献

1.ACID wiki:https://en.wikipedia.org/wiki/ACID

2.ANSI isolation levels:SQL: Isolation level

3.《Distributed Transactions Are Evil》:https://wiki.c2.com/?DistributedTransactionsAreEvil

4.《Distributed transactions and why you should care》:https://towardsdatascience.com/distributed-transactions-and-why-you-should-care-116b6da8d72

5.《Fault-Tolerant Stream Processing at Internet Scale》:http://static.googleusercontent.com/media/research.google.com/en/us/pubs/archive/41378.pdf

6.《Oracle Two Phase Commit 2PC Tips》:http://www.dba-oracle.com/ttwophasecommit2pc.htm

7.《2PC: Concurrency Control and Recovery in Database Systems》:https://courses.cs.washington.edu/courses/cse551/09au/papers/CSE550BHG-Ch7.pdf

8.《An Empirical Evaluation of In-Memory Multi-Version Concurrency Control》:https://15721.courses.cs.cmu.edu/spring2018/papers/05-mvcc1/wu-vldb2017.pdf

9.《Concurrency Control And Recovery In Database Systems》:https://courses.cs.washington.edu/courses/cse551/09au/papers/CSE550BHG-Ch7.pdf

10.《Optimistic Concurrency Control》:https://15721.courses.cs.cmu.edu/spring2018/slides/04-occ.pdf)

11.《Base: An Acid Alternative》:BASE: An Acid Alternative - ACM Queue

12.《Jepsen: CockroachDB beta-20160829》:Jepsen: CockroachDB beta-20160829

13.《Spanner: Google’s Globally-Distributed Database》:https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf

欢迎添加社区经理微信(ss_assistant_1)加入交流群,与众多 ShardingSphere 爱好者一同交流。

相关推荐

官宣|Apache ShardingSphere 5.0.0 正式发布

11 月 10 日,是 Apache ShardingSphere 进入 Apache 基金会的三周年纪念日。在这特殊的一天,我们很高兴的宣布 Apache ShardingSphere 迎来了 5.0.0 GA 版本的正式发布。经过近两年的优化和打磨,ShardingSphere 5.0.0 GA 版正式开启了以可插拔架构为核心的全新阶段,实现了由过去数据分片单一应用场景到现在复杂应用环境下综合数据治理的身份转变与能力提升。5.0.0 具体版本发布信息如下:1 新特性 支持注释解析 .

SphereEX的博客 733

SphereEx 获数百万美元天使融资,接力 ShardingSphere 开启 Database Plus 新篇章

5月14日,数据前沿技术领域初创公司 SphereEx 获得来自红杉中国种子基金、初心资本的数百万美元天使轮融资。SphereEx是一家致力于构建新型分布式数据基础设施的公司,秉承开源、共享、生态、平台理念,致力于数据领域前沿技术创新。其研发的分布式中间件ShardingSphere,具备“平台化、可插拔、云原生”等核心技术特点,是大规模数据应用、数据增值应用的理想解决方案。SphereEx的核心创始团队来自Apache顶级项目 ShardingSphere、头部互联网公司、及知名基础设施软件提供商。.

SphereEX的博客 644

DBPlusEngine 1.7.2 发布:数据安全闭环与联邦查询突破

ShardingSphere 原厂企业版,支撑企业核心系统安全治理与联邦查询升级。

SphereEX的博客 390

SphereEx-DBPlusEngine 1.5.0 功能解读:CDC

数据库日志(以 MySQL 为例) binlog 是 MySQL 记录变更数据的"二进制日志",它可以看做是一个消息队列,队列中按顺序保存了 MySQL 中详细的增量变更信息,通过消费队列中的变更条目,下游系统或工具实现了与 MySQL 的实时数据同步。前一段时间,面向新一代数据架构的数据库增强引擎 SphereEx-DBPlusEngine 正式发布 1.5.0 版本,新增 CDC 和数据库防火墙两大重磅功能,本篇文章笔者就给大家详细介绍 CDC 功能的实现逻辑和技术细节。使用网络通道的情况下需要。

SphereEX的博客 472

SphereEx-DBPlusEngine 1.5.0 版本发布

近日,面向新一代数据架构的数据库增强引擎 SphereEx-DBPlusEngine 正式发布 1.5.0 版本,新增 CDC 和数据库防火墙两大重磅功能,并在数据安全方面做了重要的增强。增加了对实时数据变更的捕获和管理能力,并增强了对数据访问的监控和拦截能力,帮助企业降低业务风险,提升效率。

SphereEX的博客 365

【版本更新】Apache ShardingSphere 5.4.0 版本正式发布!

SphereEX的博客 580

畅聊新版本!尽在本周六 ShardingSphere 线上圆桌会!

👏 欢迎大家「预约」直播,提前锁定精彩内容,与三位资深社区贡献者一起共究 ShardingSphere 5.4.0 与 ShardingSphere-On-Cloud 0.3.0 的技术魅力!😉 就在本周六(7 月 1 日), ShardingSphere 线上圆桌(第二期)栏目内容即将播出啦!👋 嗨~ ShardingSphere 社区的小伙伴们下午好!🤩 转载议程海报还能赢取「互动福利」!惊喜多多,详情见下方海报哦~👇 👇。

SphereEX的博客 203

围“桌”详谈|本周六直播,一起聊聊「发版」那些事儿!

🎉围“桌”详谈|本周六,来一起聊聊「发版」那些事儿!⏰7 月 1 日下午两点,我们邀请了 ShardingSphere PMC 端正强、ShardingSphere Committer 江龙滔、ShardingSphere Committer 苗立尧三位资深的社区贡献者做客「社区线上直播间」,将为大家详细解答新版本带来的重点功能更新及对应的性能突破!🌟 活动还设有「技术实战」、「有奖问答」等趣味环节,期待与大家一起解锁!

SphereEX的博客 245

倒计时 1 天 | SphereEx 在 2023 亚马逊云科技中国峰会等你来打卡!

📢倒计时 1 天 | SphereEx 即将亮相 2023 亚马逊云科技中国峰会!✨SphereEx 联合创始人 & CTO 潘娟 将在大会期间将向业界介绍如何充分发挥弹性伸缩、自动备份、容错处理等云计算的优势,提高分布式数据库的可靠性和性能。同时,也将分享在分布式数据库应用中安全性的重要性和实践方法,从多个方面保护数据的安全性。👏扫描下方二维码预约参观,通过二维码进行预约的小伙伴在上海展会现场可凭借手机号领取精美礼品一份!还可以在现场参与抽奖,更多好礼等你拿!

SphereEX的博客 300

倒计时2天,解锁亚马逊云科技中国峰会 Dev Lounge 玩法

在此次圆桌讨论中,ShardingSphere PMC & SphereEx 联合创始人兼 CTO 潘娟受邀与多位行业专家共同分享他们在利用开源进行数据分析和挖掘方面的研究成果、经验和启示。开发者们将有机会与专家面对面交流,同时了解最新的数据分析和挖掘技术洞察,掌握趋势和机遇。数据对于企业和个人来说都至关重要,而大数据和人工智能的不断发展,为各种应用场景带来了更多的机会。那么,如何利用开源分析和挖掘数据价值,成为了许多开发者关注的话题。海报二维码扫码报名,6月27-28日,我们上海等你,不见不散!

SphereEX的博客 281

逛开发者集市啦,ShardingSphere 在亚马逊云科技中国峰会等你!

2023亚马逊云科技中国峰会将于6月27日-28日在上海世博中心盛大开幕。本次峰会以“共见·价值成就”为主题,与合作伙伴展望云计算趋势及合作发展战略,分享行业解决方案,共同探讨协同销售策略和全新的 APN 计划,助力合作伙伴成就更多价值。同时,峰会将聚焦构建新技术加速的产品创新、新架构提升的业务弹性、云计算引领的创新模式,围绕价值加速实现,企业敏捷稳健,行业全新机遇等热门话题,携手众多业内技术领导者,践行者一同,把握时代机遇。本次峰会特设开发者会客厅区域,为开发者提供一站式等丰富体验。

SphereEX的博客 399

ShardingSphere 荣获一等奖!2022 年中国开源创新大赛成绩单公布

2022年中国开源创新大赛”在国家中央网信办信息化发展局的指导下,由中国互联网发展基金会、中国网络空间研究院、中国互联网投资基金联合主办,大赛以“开源创新,共建生态”为主题,围绕国家在开源人才培养和开源生态建设方面的重大战略需求,聚焦“卡脖子”相关技术领域,旨在助力开源生态的高质量发展,激发开源创新活力,推动我国科技创新及产业转型升级。5 月 31 日,“2022 年中国开源创新大赛”正式颁奖。

SphereEX的博客 309

创新能力加速产业发展,SphereEx 荣获“中关村银行杯”『大数据与云计算』领域 TOP1

SphereEx 凭借自身在数据库领域产品与理念的双重创新优势,荣获2022 中关村国际前沿科技创新大赛“中关村银行杯”『大数据与云计算』领域的第一名。

SphereEX的博客 348

Pisanix v0.2.0 发布|新增动态读写分离支持

Pisanix 于今天发布了 v0.2.0 版本,在此前版本基础上,本次更新新增了动态读写分离支持,下面将进行详细介绍。

SphereEX的博客 375

Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案

作为 Database Plus 设计哲学的最佳实践,Apache 顶级开源项目 ShardingSphere 通过各行业多年的生产环境检验,受到了众多社区爱好者的关注和追捧。而随着 Kubernetes 成为容器编排的事实标准,其引领的云原生风暴迅速席卷了技术世界。Apache ShardingSphere 作为一个拥有开放生态的数据库增强引擎,其设计理念和 Kubernetes 有着诸多相似之处,而在这股云原生浪潮之下,社区对 ShardingSphere 上云的呼声也越来越高,于是 **SphereE

SphereEX的博客 303

DistSQL 深度解析:打造动态化的分布式数据库

本文将以数据分片为例,深度解析 Sharding 相关 DistSQL 的应用场景和使用技巧。同时,通过实践案例将一系列 DistSQL 语句进行串联,为读者展现一套完整实用的 DistSQL 分片管理方案。

SphereEX的博客 409

Pisa-Proxy SQL 解析之 Lex & Yacc

在上篇文章《Pisa-Proxy 之 SQL 解析实践》中介绍了 Pisa-Proxy 的核心模块之一 SQL 解析器的相关内容。在 MySQL 和 PostgreSQL 中 SQL 解析是通过 Yacc 实现的,同样 Pisa- Proxy 的 SQL 解析器是由类似 Yacc 这样的工具实现的,所以本篇文章会围绕 SQL 解析器为大家介绍一些编译原理和 Lex & Yacc 的使用,同时也会为读者展示如何通过 Lex & Yacc 实现一个简单的 SQL 解析器。从而帮助大家更好地理解 Pisa-Pro

SphereEX的博客 993

终于可以一行代码也不用改了!ShardingSphere 原生驱动问世

ShardingSphere-JDBC 驱动的出现,使 ShardingSphere 的易用性获得了前所未有的加强

SphereEX的博客 827

开源者的自我修养|为 ShardingSphere 贡献了千万行代码的程序员,后来当了 CEO

浅谈开源人的17年成长路线,热爱才能坚持

SphereEX的博客 376

开源二三事|ShardingSphere 与 Database Mesh 之间不得不说的那些事

前段时间,以 Apache ShardingSphere 核心团队组建的创业公司 SphereEx,正式对外推出了 Database Mesh 2.0 概念以及与之相配套的开源产品 Pisanix,这引发了社区间对于 ShardingSphere 和 Database Mesh 的不少争论与思考。许多用户都很清楚,SphereEx 是由 Apache ShardingSphere 核心团队创立的。那么有部分用户就提出了疑问,既然已经有了 Apache ShardingSphere 这样一个如此成功的开源项目

SphereEX的博客 366

Pisa-Proxy 之 SQL 解析实践

本文将以 Pisa-Proxy 实践为例,为大家展现 Pisa-Proxy 中的 SQL 解析实现,遇到的问题及优化

SphereEX的博客 543

基于 ShardingSphere 的得物数据库中间件平台“彩虹桥”演进之路

得物与 ShardingSphere 的完美结合实践

SphereEX的博客 571

Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

此次更新带来 ShardingSphere 原生驱动、Helm Chart、SQL 翻译等全新功能,打造极具生产力的数据网关

SphereEX的博客 600

在 Pisa-Proxy 中,如何利用 Rust 实现 MySQL 代理

在 Database Mesh 中,Pisanix 是一套以数据库为中心的治理框架,为用户提供了诸多治理能力

SphereEX的博客 779

ShardingSphere 异构迁移最佳实践:将3.5亿量级的顾客系统 RTO 减少60倍

Apache ShardingSphere 助力当当 3.5 亿用户量级顾客系统重构,由 PHP+SQL Server 技术栈无缝转型为 Java+ShardingSphere+MySQL,性能、可用性及维护性均得到显著提升,是 ShardingSphere 异构迁移最佳实践。

SphereEX的博客 329

SphereEx 正式开源面向 Database Mesh 的解决方案 Pisanix

今天,SphereEx 正式对外推出了面向 Database Mesh 的开源解决方案-- Pisanix v0.1.0 版本。Pisanix 从设计之初就吸收了 Database Mesh 的核心思想:通过可编程实现高性能扩展,应对云上数据库治理挑战。这标志着 Database Mesh 不再停留于纸上,而成为了一个真正可以实现和落地的框架。.........

SphereEX的博客 523

做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

SphereEX的博客 255

数据库治理的云原生之道 —— Database Mesh 2.0

本文将带领各位读者回顾 Database Mesh 诞生的背景,重新审视 Database Mesh 1.0 的价值,并为大家介绍 Database Mesh 2.0 的新概念、新思路和新特性,共同探讨 Database Mesh 的未来之路。

SphereEX的博客 508

ShardingSphere 在东南亚|与科技保险公司 Fuse 的技术融合

ShardingSphere 在东南亚|与科技保险公司 Fuse 的技术融合

SphereEX的博客 247

SphereEx 正式成为 CNCF 会员,持续完善云原生环境下的数据库基础设施

近日,SphereEx 正式成为全球知名开源组织 CNCF(云原生计算基金会,Cloud Native Computing Foundation)银牌会员。

SphereEX的博客 285
上一篇: Apache ShardingSphere 5.1.1 正式发布
下一篇: Amazon Aurora 的读写能力扩展之 ShardingSphere-Proxy 篇
SphereEx
SphereEx 企业官方账号 企业官方账号
博客等级 码龄6年 69粉丝 137原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值