前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式数据库中间件——Apache ShardingSphere

分布式数据库中间件——Apache ShardingSphere

作者头像
用户1682855
发布2019-03-19 17:36:56
2.5K0
发布2019-03-19 17:36:56
举报
文章被收录于专栏:前沿技墅前沿技墅

本文作者 张亮

京东数科数据研发负责人,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年,定位是针对整个电商平台提供的统一开发框架,它的主要目标如下。

  1. 分离技术与业务代码,封装技术细节,让应用开发人员将精力集中在业务开发上。
  2. 统一开发框架,使公司中所有项目的架构相似,降低跨组沟通及人员转组的成本。
  3. 提供工具箱,标准化技术组件。
  4. 组件可插拔,不强制业务开发人员使用框架的全部内容。
  5. 灵活地提供定制化功能,框架本身对引入其他第三方技术组件不做限制。
  6. 推动服务化。
  7. 提供统一的监控和日志标准。
  8. 模板代码自动化生成,降低书写难度。
  9. 为私有云和自动化运维做准备,将系统划分为业务、框架、云平台、治理几个层次。

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与当当网内部落地绑定,可以同时获得来自公司内部和社区的支持。虽然无法承诺社区的优先级高于公司内部的优先级,但开发团队会综合考虑社区与公司内部的需求,以更广阔的视角尽量整合与优化升级路线。
  • 完整开源。代码的snapshot版本将会首先出现在GitHub上。
  • 共同发展。Sharding-JDBC的初版代码相对简单,社区的开源爱好者可以非常轻松地理解其核心,为可持续发展奠定良好基础,并且Sharding-JDBC也会吸纳社区精华,让更多地爱好者参与代码贡献。

坚定了与社区共谋发展的开源路线之后,Sharding-JDBC又经过了两个月的解耦和精炼,于2016年2月在GitHub上发布了首个版本。从首次开源至今,Sharding-JDBC经历了许多“关键时刻”。

  1. 2016年2月,1.0.0版本发布,主要功能是分库和分表,实现了JDBC接口,并且完整实现了SQL解析、SQL改写、请求路由、结果归并的标准处理流程。
  2. 2016年3月,1.1.0版本发布,大幅提升了Sharding-JDBC配置的友好度,增加了YAML、Spring命名空间和行表达式的配置方式。
  3. 2016年5月,1.2.0版本发布,实现了最大努力送达型柔性事务,完成了对分布式事务的初步支持。
  4. 2016年6月,1.3.0版本发布,支持读写分离。
  5. 2016年11月,1.4.0版本发布,支持无中心化分布式自增主键。至此,数据分片功能已基本实现。
  6. 2017年7月,1.5.0版本发布,使用全新的自研SQL解析引擎替代了原有的Druid解析引擎,SQL兼容性大幅提升。
  7. 2017年12月,2.0.0版本发布,正式将com.dangdang的Maven坐标与包名改为io.shardingjdbc,当当网将Sharding-JDBC正式交给社区运作和托管。2.x版本主打数据库治理功能,同时与Apache SkyWalking达成合作,提供SkyWalking的自动探针,并加入OpenTracing组织。
  8. 2018年3月,3.0.0.M1版本发布。由于京东金融等公司加入开发,Sharding-JDBC经过社区投票,正式更名为ShardingSphere,将原Sharding-JDBC并入ShardingSphere生态圈,并且新开发了Sharding-Proxy,以透明化数据库中间层的新形态提供多样化服务。同时,PMC(项目管理委员会)成立,向实现社区化迈出了重要的一步。
  9. 2018年6月,ShardingSphere与Apache ServiceComb达成合作共识,将采用 Apache ServiceComb-saga作为ShardingSphere柔性事务的决策执行引擎。
  10. 2018年10月末,ShardingSphere的3.0.0稳定版本发布。
  11. 2018年“双11”的前一天,ShardingSphere通过Apache软件基金会的投票,正式成为Apache孵化项目,软件更名为Apache ShardingSphere。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前沿技墅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内部应用框架
  • 开源历程
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档