本文作者 张亮
京东数科数据研发负责人,Apache ShardingSphere发起人兼PPMC。
热爱分享,拥抱开源,目前主导开源项目ShardingSphere(原Sharding-JDBC)和Elastic-Job。擅长方向为以Java为主分布式架构,以及以Kubernetes和Mesos为主的云平台构建,推崇代码优雅化,对如何编写具有展现力的代码有较多研究,目前致力于将ShardingSphere打造为业界一流的金融级数据解决方案。
ShardingSphere已经进入Apache孵化器,是京东集团首个进入Apache基金会的开源项目,也是Apache基金会首个分布式数据库中间件。
分布式数据库中间件生态圈ShardingSphere是由分布式数据库中间件解决方案Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar组成的,它们均提供了标准化的数据分片、分布式事务和数据库治理功能,适用于Java同构、异构语言,容器、云原生等各式各样的应用场景。
ShardingSphere的初衷是,充分合理地在分布式的场景下利用关系型数据库的计算能力和存储能力,而非实现一个全新的数据库。ShardingSphere遵循的理念是,通过观察不常发生改变的事物来获取其本质。如今,关系型数据库依然占有巨大的市场份额,是各个公司的核心业务基石,未来也难于被撼动。ShardingSphere在目前阶段的关注点是在原有基础上扩展功能,而非完全颠覆传统数据库的功能。
ShardingSphere已于2018年11月10日正式进入Apache软件基金会孵化器,并正式被命名为Apache ShardingSphere。
ShardingSphere从开源至今,悄然地完成了从默默无闻到进入Apache软件基金会成为知名项目的进阶。目前,已经有70多家公司声明,在生产环境中使用了Apache ShardingSphere。那么,它究竟起源于何处,又经历了怎样的发展历程呢?下面我们就一起回顾一下ShardingSphere这两年来所走过的路。
ShardingSphere的前身是Sharding-JDBC,它最初是当当网架构部开发的内部应用框架dd-frame的其中一个模块,名为dd-rdb。这个模块专门用于数据库访问以及简单的分库和分表。当当网的应用框架缘起于2014年,定位是针对整个电商平台提供的统一开发框架,它的主要目标如下。
dd-frame的模块组成如下图所示。
dd-frame的模块组成
dd-frame的核心模块dd-container的使用方式与Spring Boot类似,只是在2014年时,Spring Boot还未十分流行,因此才出现了“重复造轮子”的情况。
最初,开发dd-rdb只是为了使当当网内部的MyBatis的使用、数据库访问代码的生成以及基于Spring的多数据源路由等功能更加标准化。然而,随着对数据分片需求的不断增加,单纯的动态多数据源路由已经无法满足应用开发方的需求了,因此当当网决定在dd-frame的dd-rdb模块中实现一套完善的数据分片框架。
由于数据分片功能相对独立,因此当当网于2016年年初将此模块从dd-rdb中剥离,向社区开源,并将其命名为Sharding-JDBC,表明它是一个在Java的JDBC层实现分库和分表的数据库中间层框架。
开源之后,社区讨论最多的经典话题之一是,Sharding-JDBC为何选择在JDBC层实现数据分片,而不开启一个独立的代理层进行数据分片。其实原因很简单,因为Sharding-JDBC是由基于Java开发的应用框架dd-frame演化而来的,它本身就是Java框架,而非独立部署的中间件。
值得一提的是,除了Sharding-JDBC,dd-frame中还开源了另外的两个项目——DubboX与Elastic-Job。
DubboX是服务化模块dd-soa的核心组件,是在阿里巴巴开源的Dubbo的基础上进行的扩展及二次开源,目前DubboX已捐献回Dubbo,Dubbo已进入Apache孵化阶段。
Elastic-Job是作业模块dd-job的核心组件,是一个分布式的作业调度框架,分为可以通过jar提供轻量级服务的Elastic-Job-Lite,以及可以通过Mesos提供一站式资源调度与弹性作业的Elastic-Job-Cloud。
ShardingSphere的前身Sharding-JDBC,是dd-frame 2.x版本中的重点规划模块,于2015年9月进入开发阶段,历经3个月的紧张开发与测试,于2015年12月正式完成,其1.0.0版本在当当网内部正式发布。
由于采用dd-frame作为Java应用脚手架的项目非常多(当时当当网70%以上的Java项目中都用到dd-frame),因此凭借着对dd-frame 1.x的完全兼容,Sharding-JDBC迅速在公司内部推广开来。由于之前开源的DubboX和Elastic-Job都收获了良好的口碑,因此Sharding-JDBC自然而然地走上了开源之路。
不少国内的优秀开源产品都是先在公司内部经受时间的充分验证,然后再剥离业务逻辑和内部环境依赖,最终开源贡献给社区的。这样做的好处是产品相对成熟,但也有一些缺憾,具体如下。
为了弥补这些缺憾,当当网采用了全新的开源策略,在Sharding-JDBC完成初版的时候即向社区和公司内部同时推广,这样做的好处如下。
坚定了与社区共谋发展的开源路线之后,Sharding-JDBC又经过了两个月的解耦和精炼,于2016年2月在GitHub上发布了首个版本。从首次开源至今,Sharding-JDBC经历了许多“关键时刻”。