主题:分布式数据库中间件Apache ShardingSphere架构演进
大纲:
1、我们知道ShardingSphere已经成为Apache的顶级项目,那相较于之前,有没有新的挑战呢?
2、ShardingSphere作为客户端分库分表模型的代表,相较于传统Proxy模型的分库分表有什么优势吗?
3、你们团队最近在忙什么呢,有没有在研究秘密武器?
4、可以大概介绍下ShardingSphere典型的客户以及他们的规模吗?
kimmking 真名秦金卫,Apache Dubbo PMC/ShardingSphere Committer,前阿里巴巴架构师、某集团高级技术总监,阿里云MVP、腾讯TVP,《高可用可伸缩微服务架构:基于Dubbo和Spring Cloud》与《深入了解JVM 32讲》的合著作者,目前主要的工作是发展和建设ShardingSphere开源项目。
01
我们知道ShardingSphere已经成为Apache的顶级项目,那相较于之前,有没有新的挑战
Apache ShardingSphere (官网:https://shardingsphere.apache.org/)是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。
ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。
ShardingSphere已经在2020年4月16日毕业成为Apache顶级项目(Apache官方发布从4.0.0版本开始),不仅作为Apache基金会的唯一一个数据库中间件项目,同时也是国人开源走向世界技术舞台的一面旗帜。
目前4.1.0版本是成为顶级项目后发布的第一个版本,最大的特性是引入了动态迁移,使得异构的系统不仅可以在线同步历史数据,还能够实时地迁移增量数据。这个功能对于目前的ShardingSphere生态体系来说,补充了非常重要的一环。从应用场景来看,对于那些想要从传统的单机或主从数据库迁移到分库分表的技术人员来说,也带来了福音,进一步简化了迁移成本和操作风险,能更快捷、更平滑地在现有系统里应用ShardingSphere,改善既有的数据库架构,从而提升数据库的容量、稳定性,以及治理能力。即将发布4.1.1版本还有进一步的完善和增强。
下一步,我们将吸收更多分布式数据库、云原生/Service Mesh等领域的概念与思想,依托着Apache顶级项目的社区资源和品牌影响力,朝着下一代数据库中间件的基础平台、标准制定者和最佳实践者的方向发展。
我们目前正在设计和实现5.0.0版本,这个版本将是一个新的里程碑。ShardingSphere的内核、API和SPI将被重新设计和重构,变成一个100%的组件化、模块化的可插拔微内核结构。这样从底层的数据存储、到中间层的事务,到上层的SQL接入和查询优化,数据库的高可用治理,以及这些模块里保护的具体功能特性都变成了一个个可以动态插拔和装配的组件。如果大家玩过乐高,就会知道可以用乐高搭出来任何东西。我们就是朝着设计一个数据库中间件的乐高机制和最小粒度的组件实现。这样,可以在某种程度上说,ShardingSphere的用户和二次开发者,可以基于这套体系,创造出任何充满想象力的数据库中间件。
02
ShardingSphere作为客户端分库分表模型的代表,相较于传统Proxy模型的分库分表有什么优势吗
首先需要说明的是,这是一个典型的误解:ShardingSphere不仅仅有客户端分库分表框架Sharding-JDBC,也有Proxy模型的服务端数据库中间件Sharding-Proxy。
从2016年于当当开源开始,Sharding-JDBC作为业界最好的开源客户端分库分表框架广为人知。客户端模型的目标在于“更好地使用数据库”,在JDBC接口的基础上做一层增强性的封装,将API和配置暴露给开发者,不仅实现了多种分库分表的功能,而且引入了读写分离,加密解密,分布式事务和APM支持等。应用程序直接通过JDBC操作数据库,对性能的影响最小,给与开发者的控制空间最大。一个不足之处就是,Java only,只能在Java环境(或JVM平台上的其他语言)使用,例如开发者要是用C# ADO.NET或者NodeJS、Python就无法用。
2018年随着张亮,落地到京东数科,Sharding-Proxy的第一个版本3.0.0发布。Proxy模型的目标则是“更像一个好用的数据库”,通过内部实现的MySQL/PostgreSQL协议接口,模拟一个MySQL/PostgreSQL server。这样用户就可以更方便的使用Proxy中间件,而不用关心具体的API和配置,对业务系统实现零侵入,同时各种编程语言和平台环境只要是有MySQL驱动,就能使用原来的Sharding-JDBC功能。同年年底,成为Apache孵化器项目。
2020年4月份,ShardingSphere正式毕业。毕业后的第一个版本4.1.0引入了Sharding-Scaling做自动化的动态迁移,加速用户从分库分表中间件或者其他中间件转化到Sharding-Proxy。
目前正在打磨下一代的5.0.0版本计划今年发布,目标是“一个更好的数据库体系”,朝着一个完善的乐高体系发展。
同时计划中的第三个产品Sharding-Sidecar也有望在今年发布,目标是实现“Database Mesh”,进而更方便地在云原生和Service Mesh/微服务体系下使用数据。
03
你们团队最近在忙什么呢?有没有在研究秘密武器
通过上面的信息,大家可以发现,ShardingSphere项目每年发布一个大版本;每个双数年,发布一个新产品。
一方面,最近团队正在紧锣密鼓地对4.x整体进行重新设计,达到5.0.0的第一个可用版本。用最短时间把核心和功能拆解成乐高的小积木,每一个都可以独立使用,但是按不同的方式拼装到一起,就会实现不同的效果。另一方便,在原有的MySQL/PostgreSQL的数据存储层和Proxy的计算层的基础上,通过完善分布式治理,引入“控制面板”设计,进一步完善Sharding-Proxy的整体集群管理,实现数据库和中间件的高可用治理,最终达到可以利用这个最新的架构设计,具备像搭积木一样去实现类似分布式数据库和云原生Database Mesh产品的这种能力。
另一方面,我们也在投入大量的资源去进一步优化现有的功能本身,特别是SQL的解析引擎,MySQL的兼容性和查询优化,分布式事务,可观测性等等。通过这些工作的不断推进,ShardingSphere将成为功能最完善、使用最方便、性能最高效的数据库解决方案,也终将使得现有的MySQL用户轻松一键迁入到ShardingSphere技术体系。
如果说有秘密武器的话,那么这两块工作应该就是我们的秘密武器。
04
可以大概介绍下ShardingSphere典型的客户以及他们的规模吗
目前登记在册的ShardingSphere用户包括京东商城,京东云,京东支付,搜狐,滴滴,B站,中国电信翼支付,中国民生银行,58同城,每日优鲜,首汽约车、海尔消费金融,马上消费金融,科大讯飞,拍拍贷,海康威视,唯品会,TCL,客如云,马蜂窝,好未来,斗鱼TV,携程、爱奇艺、汽车之家等等,涵盖了互联网电商、金融支付,生活服务,出行旅游,在线教育和文娱视频等多个行业领域的头部企业。
其中在京东集团有数百个应用系统使用了ShardingSphere,最大的使用场景在京东支付,涉及到700亿的数据。
且随着ShardingSpere的持续发展,这个名单和这些数字,都在不断的更新,ShardingSphere应用到更多的场景,作为支撑在业务系统之下的基础设施,服务于广大人民群众的衣食住行的方方面面,发挥着巨大的作用。
详细清单参见:https://shardingsphere.apache.org/community/cn/powered-by/