在9月22日举办的【墨天轮数据库沙龙第十期—国产中间件专场】中,SphereEx 解决方案专家 代野分享了Apache ShardingSphere:从中间件到分布式生态演进之路》主题演讲,本文为整理内容。

导读

而今,越来越多的国产数据库解决方案以分布式为支点,逐渐在此领域有所建树。Apache ShardingSphere 是其中的一个分布式数据库解决方案,也是目前 Apache 软件基金会中唯一的数据库中间件顶级项目。 【墨天轮数据库沙龙-中间件专场】邀请到SphereEx 解决方案专家代野,为大家带来《Apache ShardingSphere:从中间件到分布式生态演进之路》主题分享,以下为演讲实录。



代野——SphereEx 解决方案专家,ShardingSphere Contributor、OCM、RHCE

印象中间件

1、中间件的印象

中间件是什么?我搜集了大家对于中间件的常见印象标签,它们是否和你心中所想相匹配?



图1 中间件的常见标签

第一个标签是“分库分表”,一提到数据库中间件,有朋友会认为数据库中间件是做分库分表的,这也是选型阶段,长期与分布式数据库pk的方案。第二个标签是“Sharding”,即分库分表的另一种说法。在部分材料中提到分库分表方案会“对业务有入侵”,但这主要取决于业务情况。随着分布式数据库快速发展,这几年也有人把中间件的架构称为“过时架构”。除此之外,“互联网”也是数据库中间件的标签之一,Web 2.0的蓬勃发展给传统集中数据库带来扩展的能力。不仅如此,还有从产品角度对中间件定义标签:例如Cobar、Vitess、Mycat等等。

大家对于中间件有不同的印象与理解,不同的特色也是它的价值所在。在我看来,给下游数据库赋能,给上游应用程序提供更好的体验,都可以称之为数据库中间件。

2、分布式数据库分类

分布式数据库的解决方案是中间件应用最多的场景。2022年7月,国家工信信息安全发展研究中心发布了《分布式数据库发展趋势研究报告》。报告中提出,当前处在数据量增速非常大的阶段,传统数据库表现出了明显的瓶颈,很多用户会考虑向分布式数据库架构去靠拢,以解决计算以及存储瓶颈的问题。报告中把分布式数据库分为了三种路线

  • 分布式中间件+单机数据库。 这种路线是在单机数据库系统上进行改造,主要解决了计算和存储的扩展性的问题。按照两层来看,上一层分为无状态的计算节点,基于分片规则,提供SQL解析,具有请求转发和结果归并等能力。下一层为DBA所熟悉的单机数据库,提供单机数据库的存储和执行能力。这一层架构可以在逻辑层对数据进行切割,几乎是可以线性的提供计算和存储能力的扩展,达到规模化的扩展能力。

  • 非对称计算节点+分布式存储。 它采用非对称节点解决扩展性问题。跨地域的数据一致性主要依赖于分布式的存储,共享存储还能够跨多个节点提供读写。上层计算的部分由无状态的一组节点来组成,当写节点出现故障,它会自动从可以读的节点中选举出一个节点作为写的节点,实现写能力的高可用。

  • 原生分布式数据库。 它的各个节点提供对等的读写服务。这条路线是根据分布式一致性做底层设计,它和传统的数据库有本质性的区别。原生分布数据库可以将分布式存储、事务包括计算能力实现紧密结合。数据是由系统自动打散并存储为多个副本,通过一致性的协议保证多个副本以及事务之间实现一致性,对分布式事务和全局MVCC的支持更为彻底。

以上三种路线各自有哪些优势和不足,大家可以参考下图。



图2 《报告》对于三种路线的优劣势对比

中间件技术趋势

1、行业现状与趋势

随着各类业务的数据体量越来越大以及场景逐渐细化,数据库技术栈以及DBA路线也呈现出了多样性的发展。当前我们正处在一个数据库碎片化的趋势中,传统数据库管理、应用挑战严峻,催生数据库上层生态标准转型。架构选型困难、技术挑战众多、运维复杂度高、数据库间缺乏协作能力都是问题与挑战。



图3 数据库碎片化下的痛点与挑战

2、最优解:统一的数据平台中间件

基于以上提到的痛点,我们能否通过统一的数据平台来解决?基于数据库中间件的统一数据平台便是企业大数据时代的最优解

在国产化进程中,业务系统对数据库有着很多的需求:基于现有单机数据库如何构建出一个分布式解决方案?如何能够实现可观察性?如何保证数据安全?如何满足不定期的由于业务变化而产生新的需求?这些需求其实在业务中来实现,只是需要不断地重构,也就是重复“造轮子”。那么将这些需求放入数据库中实现,难度更较高,尤其在协作方面,例如MySQL无法管理PG,反之PG也无法管理MySQL。

中间件架构则能够相对容易满足这些需求,它既开放又稳定,它不会颠覆数据库,反而是做更多的增强和连接。因此中间件相较于分布式数据库,并不是一个PK的概念,而是其在上层做增强。



图4 中间件架构满足不同的业务需求

开源生态

1、SphereEx 及产品发展历程

墨天轮社区中间中间件流行度排行榜中,Sharding-JDBC排在第二位,在数据库中间件中位于第一。其次是 ShardingSphere、SphereEx 、Sharding-Proxy以及Sharding-Sidecar 。

ShardingSphere是开源项目的名称,其中包括Sharding-JDBC的接入端和Sharding-Proxy接入端。Sharding-Sidecar定为是云原生数据库代理,是曾经规划的接入端。SphereEx是Apache ShardingSphere核心团队创立的公司,基于ShardingSphere内核为企业提供新一代分布式数据计算增强平台。



图5 SphereEx 及产品在中国中间件流行度中的排名

ShardingSphere最初的名字为Sharding-JDBC,这也是很多朋友习惯称它为Sharding-JDBC的原因。2015年在当当网上写下了ShardingSphere的第一行代码,它是为解决电商场景下分库分表的问题而诞生的一个组件。2016年Sharding-JDBC正式开源,2018年项目发生了较大的变化,在JDBC基础之上,推出了基于服务端的Proxy接入形态,项目也更名为 ShardingSphere。同年,它进入了Apache的孵化器。2020年,ShardingSphere项目毕业,成为了Apache顶级项目2021年,SphereEx公司成立



图6 ShardingSphere 发展历程

2、开源生态建设

作为Apache软件基金会的顶级项目,ShardingSphere在2021年代码提交量是整个基金会的Top 10,目前社区已经有400多位贡献者。

ShardingSphere项目在学术上表现不俗。今年上半年,在数据库三大顶会之一的ICDE发布了论文《A Holistic and Pluggable Platform for Data Sharding》。近期,我们在海外出版了《Apache ShardingSphere权威指南》。ShardingSphere也被收录至CNCF基金会中。生态建设方面,2022 年上半年,中国信通院联合Apache ShardingSphere 成立了金融用户社区,在快速发展中倾听更多金融用户的声音。



图7 开源项目概览

产品&解决方案

1、ShardingSphere设计哲学:Database Plus

首先,我将介绍一下ShardingSphere的设计哲学 —— Database Plus。它是一种分布式数据库系统的设计理念,旨在碎片化的异构数据库上层构建标准和生态,在最大限度地复用数据库原生存算能力的前提下,进一步提供面向全局的扩展和叠加计算能力,使应用和数据库间的交互面向 Database Plus 构建的标准,从而屏蔽数据库碎片化对上层业务带来的差异化影响。Database Plus具有连接、增强、可插拔三个特点:

  • 连接。 我们希望通过这一层可以连接更多的数据库,比如在国产化替换过程中,能通过双引擎能力同时连接Oracle和信创库,实现数据库的双轨运行。然后通过中间层再逐步地切流,确保置换过程相对无感、无缝、低风险。

  • 增强。 我们希望能够在各种数据库之上提供比如分布式的能力、加密等等这种增强的能力。

  • 可插拔。 随着连接和增强能力不断的提升,中间的一层一定是越来越大。我们希望在扩展过程中能够做到可扩展、可收敛,保证中间层小而美、轻量化。

2、 ShardingSphere产品设计

根据 Database Plus 理念的指导,这部分将介绍工程化实现。

内核层中可见分布式相关的能力,功能层如数据分片、数据加密、弹性扩容、数据迁移等能力,对应的商业化产品为SphereEx-DBPlusEngine,即数据库增强引擎。下图左侧展现了可提供数据库的管理能力,通过中间件的平台层基于成熟单机产品构建出多种方案,为国产化替代做准备;协议上已实现MySQL和PG支持,此外还可与兼容MySQL和PG协议的国产数据库直接对接;语法方面,在Oracle、SQL Server可以兼容。



图8 DBPlusEngine 工程化面貌

为了让大家更了解产品架构设计,大家可以参考下方微内核架构设计图。从最核心的中间红色部分来看,这一层与数据库非常相似。我我们在核心部分加入了可插拔的实现扩展点,从内到外分别是微内核层、可插拔接口层,以及最外层的可插拔生态。微内核处理流程包括标准的 SQL Parser 和 SQL Binder 模块,这两个模块用于SQL具体特征的识别。

SQL Parser负责将用户发出的SQL转化为抽象语法树,并最终转化为提取必要特征的 SQL Statement。SQL Binder结合Metadata与SQL Statement,生成完整的且符合数据库表结构的抽象语法树,确定是否需要跨库执行,再根据其结果将流程分为简单下推引擎和SQL Federation引擎。当SQL可以经过逻辑表修改、执行信息补全等操作即可以全文下推至数据库存储节点时,它所使用的是左侧的简单下推引擎,以便保证SQL的最大兼容度;反之,当SQL需要跨节点和跨库子查询时,就需要走右侧的SQL Federation 引擎。



图9 ShardingSphere 微内核设计

3、 DBPlusEngine运维工具

接下来为大家介绍DBPlusEngine相关运维工具。

Boot 是快速构建 SphereEx-DBPlusEngine 集群的命令行工具,主要功能是对 SphereEx-DBPlusEngine 进行安装、启动、停止、查看运行状态、卸载等操作。



图10 DBPlusEngine运维工具:SphereEx-Boot

Console 是对 SphereEx 企业数据服务平台进行管理监控的可视化操作平台,提供更为易用的使用体验;同时,构建起以 SphereEx-DBPlusEngine 为核心的整体解决方案,包括针对资源、实例、插件等多种功能封装,为用户带来一站式的使用体验。





图11、12 DBPlusEngine运维工具:SphereEx-Console及部分监控页面

4、 DBPlusEngine 物理部署架构

DBPlusEngine物理部署架构有两种形态。如图,我们可以把最下面的Proxy当成数据库来使用,它对DBA友好,可以使用客户端直接访问,Proxy也可以对接多种开发语言的程序,比如Java、PHP等。

另外一种形态是Driver,它和Proxy内核是一样的,只不过外壳不一样。它比较适合于性能极致的场景,因为它靠近应用侧,到数据库少了网络一跳。同时也不需要单独再去采购服务器,就可以实现分布式的能力。这一部分就是对多种接入端选择的说明。我们当然可以混合使用这两种接入端,取各自优点,中间使用注册中心做元数据同步。



图13 ShardingSphere 物理部署架构

5、 ShardingSphere 性能优势与适用场景

下图展示了 ShardingSphere的极致性能优势。Sysbench点查场景中,数据库单点性能是4.8w的 QPS,通过中间件扩展后,底层使用5个数据库节点做了分片,整体吞吐量提升了4~5倍,呈线性增长。读写场景优势更明显。

我们今年联合openGauss社区进行了TPC-C测试,一共是16台鲲鹏设备,其中8台部署了openGauss,通过7个JDBC测出了1000万tpmC,现在我们也在做更进一步的优化提升。



图14 ShardingSphere 极致性能体现

6、 ShardingSphere 适用场景

  • 海量存储数据分片。数据库容量达到单体瓶颈场景下,通过横向水平扩展,可以有效解决单体数据存储容量问题,并可实现平滑数据迁移。

  • 异构数据计算。面临数据库碎片化现状,打通异构数据库计算壁垒,提供联邦查询计算能力。降低异构数据库使用成本,提升计算效率。

  • 数据安全。面临日益严重数据安全问题,通过多维度的数据加密能力,解决数据存储安全问题;并通过完善的数据行为的审计能力。

  • 大规模高并发。互联网化的核心场景下,数据库响应变慢等问题。提供弹性扩展能力,实时提升数据库响应和计算能力。



图15 ShardingSphere 适用场景

6、 ShardingSphere 解决方案

基于 SphereEx-DBPlusEngine 的可插拔架构底座,将分布式数据库的核心能力中,与企业业务贴近的垂直功能排列组合,在数据库替换,海量数据存储,高并发访问与数据安全存储等场景,提供对应的解决方案。

  • 分布式数据库解决方案: 为解决原有方案的技术瓶颈,降低更换架构带来的复杂性风险,在不更换原有架构前提下,实现数据库同步,管理多个异构数据库集群,线性提升数据存储容量及并发吞吐。为用户提供基于数据分片,分布式事务、弹性伸缩的分布式数据库解决方案,兼具单机交易型数据库稳定性和分布式数据库的扩展能力。



图16 分布式数据库解决方案

  • 数据安全解决方案: 为了防止数据泄露,保护数据安全,提供基于产品的数据加密和数据脱敏功能。在不改动原有代码的前提下,为企业提供跨平台、异构环境的数据安全解决方案。



图17 面向数据控制的解决方案:数据安全



图18 全链路压测解决方案

  • 全链路压测解决方案: 基于内核的 SQL 解析能力,以及可插拔平台架构,实现压测数据与生产数据的隔离,帮助应用自动路由,支持全链路压测。帮助用户实现在生产环境进行压测,所获得较为准确地反映系统真实容量水平和性能的测试结果。

ShardingSphere 最佳实践

下面我们通过两个案例来了解ShardingSphere 的最佳实践:数据分片和异构双写。

1、案例一:千亿数据量级金融场景(分片场景)

这是目前已知最大规模使用ShardingSphere的案例。该场景中,ShardingSphere支撑了6400分片、超过 1000亿条交易记录。在早期业务规划阶段,已经考虑了它数据量比较大、并发比较高的情况,因此在业务代码中实现了数据分片逻辑。但随着业务不断迭代,研发人员需要不断的在分片的逻辑上耗费较多的精力。

基于这样的情况,我们采用了下图右侧中的架构模式,业务通过ShardingSphere-JDBC来完成数据Sharding,基于客户端的模式可以最大化地发挥性能,代理端Proxy为DBA提供维护入口。通过改造,系统的扩展性得到了极大地改善,更重要的是业务人员也可以更专注于业务研发。



图19 ShardingSphere 在京东白条中的实践(信创场景)

2、案例二:异构数据双写场景

在某国企信息系统替“O”改造中,客户的核心诉求是系统稳定,相比上线时间的deadline,切换过程的平滑、稳定和完善的回退机制是客户最为关注的。基于这样的要求,我们的解决方案如下:一是双轨运行,应用请求会通过Driver组件向异构库分发,从应用到数据库全流程打通,确保可回退;第二是要实现逐步的切流,即在正式切换前的一段时间,Oracle只做写备份,国产DB把所有的读流量都承担过来,各项指标满足要求后再考虑下线Oracle。

实施中,首先需要对异构库做一次存量数据迁移,当两端存量数据同步完成之后,开始启用DBPlusEngine的这一层的双写能力,以XA的方式去保证两端数据的一致性,整个流程均为在线完成。

中间层具备底层数据库节点角色的捕获能力,以此来确定信创库HA的状态。极端情况下,当信创库出现集群级别异常,XA会自动退化为local事务,当故障处理完毕后,重新追齐数据,再人工启用双写。ShardingSphere 通过自身强有力的异构数据双写能力,助力国产基础软件走好信创落地“最后一公里”。



图20 DBPlusEngine 在某国企信息系统中的实践

随着应用场景的多样化,ShardingSphere 正在被推向更广的应用平台以及更深的技术场景,在实践中持续验证并优化自身的能力,同各路合作伙伴一起打造标准化的数据生态服务体系。



图21 ShardingSphere 部分生态合作伙伴

更多精彩内容,欢迎大家观看现场视频回放与会议资料

视频回放:https://www.modb.pro/video/7305

会议资料:https://www.modb.pro/doc/77274


墨天轮技术社区正在举办【墨力原创作者计划】长期征文活动,首次参与活动即有机会获得定制护腰靠枕;参与月更挑战,还可以获得定制U盘、罗技鼠标、华为手环、100-300元现金奖励等奖品,期待您的参与!

活动收录了数百篇Oracle、MySQL、PostgreSQL以及国产数据库相关的文章,包含数据库安装配置、性能调优、故障处理、高可用搭建等主题,此外也有K8s、Java、VUE等优质稿件。大家点击此处可查看有所技术文章。

具体活动规则可以查看:https://www.modb.pro/db/513210,欢迎大家积极投稿!

墨天轮沙龙 | SphereEx代野:Apache ShardingSphere-从中间件到分布式生态演进之路的更多相关文章

  1. SQL 居然还能在 Apache ShardingSphere 上实现这些功能?

    在去年 10 月 5.0.0-alpha 版本发布之后,Apache ShardingSphere 经历了长达 8 个多月的持续开发与优化,终于在 6 月 25 日正式迎来了 5.0.0-beta 版 ...

  2. SphereEx 公司成立,推动 Apache ShardingSphere 社区加速发展

    近日,SphereEx 商业公司在中国红杉种子基金及初心资本助力下,已完成公司及团队组建.各大媒体平台及公众号已相继报道,并抢占新闻头条.作为以 Apache ShardingSphere 核心团队组 ...

  3. Apache ShardingSphere:由开源驱动的分布式数据库中间件生态

    2021 年 7 月 21 日 2021 亚马逊云科技中国峰会现场,SphereEx 联合创始人.Apache ShardingSphere PMC 潘娟受邀参与此次峰会,以<Apache Sh ...

  4. DistSQL:像数据库一样使用 Apache ShardingSphere

    Apache ShardingSphere 5.0.0-beta 深度解析的第一篇文章和大家一起重温了 ShardingSphere 的内核原理,并详细阐述了此版本在内核层面,特别是 SQL 能力方面 ...

  5. 重磅|Apache ShardingSphere 5.0.0 即将正式发布

    Apache ShardingSphere 5.0.0 GA 版在经历 5.0.0-alpha 及 5.0.0-beta 接近两年时间的研发和打磨,终于将在 11 月份与大家正式见面! 11 月 10 ...

  6. Apache ShardingSphere 5.0.0 内核优化及升级指南

    经过近两年时间的优化和打磨,Apache ShardingSphere 5.0.0 GA 版终于在本月正式发布,相比于 4.1.1 GA 版,5.0.0 GA 版在内核层面进行了大量的优化.首先,基于 ...

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

    在 Apache ShardingSphere 5.1.1 发布后,ShardingSphere 合并了来自全球的团队或个人的累计 1028 个 PR,为大家带来 5.1.2 新版本.该版本在功能.性 ...

  8. 提名 Apache ShardingSphere Committer,说说方法

    文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 就在前几天,收到了 Apache ShardingSphere Vote 我成为 Committer 的邮件 ...

  9. Apache Sharding-Sphere

    Sharding-Sphere 正式步入 Apache 基金会孵化器 - 开源中国 https://www.oschina.net/news/101691/sharding-sphere-enter- ...

  10. Apache ShardingSphere 在京东白条场景的落地之旅

    京东白条使用 Apache ShardingSphere 解决了千亿数据存储和扩容的问题,为大促活动奠定了基础. 2014 年初,"京东白条"作为业内互联网信用支付产品,数据量爆发 ...

随机推荐

  1. 亚马逊 vpc 子网 路由表 互联网网关 弹性ip

    创建vpc,子网,路由表,互联网网关,弹性ip等网络资源 vpc和子网 创建互联网网关 附加到vpc 创建路由表 路由表编辑路由 此路由通过这个网关出去 编辑子网关联 保存关联 有关云主机 创建属于那 ...

  2. 从pytest源码的角度分析pytest工作原理

    从pytest源码的角度分析pytest工作原理 从 pytest 源代码的角度来分析其工作原理,我们需要关注几个关键的部分,特别是 pytest 的启动过程以及测试的收集与执行.下面是基于 pyte ...

  3. 飞书Webhook触发操作指南,实现事件驱动型工作流自动化

    本文提供了利用数据触发Feishu Webhook的具体操作指南,包括Webhook的设置以及编写触发代码的方法,为读者提供了实践参考,希望能帮助解决你目前遇到的问题. 描述 用于使用数据触发 Fei ...

  4. python调用第三方java包实例

    先看结果: 对于python与java的互调,我一开始是用的py4j,但是后来发现在使用方法的时候,不知道如何在python中导入jar包,然后网上的资料也比较少.后来想不出来办法,又看到有Jpype ...

  5. spring创建 JavaWeb

  6. double四舍五入保留两位小数的方法

    1,DecimalFormat DecimalFormat decimalFormat = new DecimalFormat(".00"); 意思就是规定保留几位小数 使用时 d ...

  7. 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛)

    2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(国赛) 前言 补题只补了前四道,第五题打个暴力都有 \(24\) 分,我这死活只有 \(22\) 分 \(QAQ\) RC-u1 大家一起查 ...

  8. win32 对话框模板添加加速键

    今天想在菜单中添加加速键的时候,因是用的对话框模板,不能接受WM_KEYDOWN消息, 在网上收了半天,都不理想,最后在看WM_COMMAND的时候发现有个 wparam的低位有个加速键标识 最后把这 ...

  9. .NET 开源实时监控系统 - WatchDog

    前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要.实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间. 本文将介绍一个名为Wa ...

  10. Element-UI 中使用rules验证

    第一种:写在data中进行验证 <el-form>:代表这是一个表单 <el-form> -> ref:表单被引用时的名称,标识 <el-form> -> ...