Apache ShardingSphere 简单易用且成熟稳定,当当自研 WMS 如虎添翼,在供应链系统改革中起到了至关重要的作用,是我们的杀手锏。

——李勇,当当 WMS 技术负责人

Apache ShardingSphere 5.0.0 GA 已于 2021 年 11 月发布,5.1.0 版本也于上周发布。历经两年的迭代与打磨,可插拔生态趋近成熟,标志着 Apache ShardingSphere 从分库分表中间件蜕变为以 Database Plus 为理念的分布式数据库生态系统。

近年来,随着“建设社会主义文化强国”政策的持续落实,全民阅读在移动互联快速发展中得到大力倡导,阅读给当代人提供了丰富的精神食粮。当当成立于 1999 年底,作为新技术与传统行业的结合体,当当融合了互联网新技术和传统图书行业,二十余年深耕图书领域助力全民阅读。

当当在刚成立的几年,也是中国互联网腾飞的阶段,电商逐渐多元化发展的趋势迎来了行业野蛮生长期,各电商平台的发展如逆水行舟,不进则退。当当对战略和管理等方面进行调整的同时,也对技术架构层进行了硬核升级。

当当成立之初的仓储物流系统并非自研,随着业务体量、技术实力等多方面的变化,为了满足业务快速发展需要,当当决定重构 WMS(Warehouse Management System)和 TMS(Transportation Management System)。硬件层使用 x86 取代小机,数据层由传统集中式转型为更灵活的分布式架构。如何解决海量仓储货品信息问题,是重构待解决的核心问题之一。互联网技术栈比较常用的分库分表被率先尝试使用,但由于当时开源数据库中间件的成熟度及功能方面不满足预期,当当决定自研分库分表产品,Sharding-JDBC 就这样应运而生,为“连接”带来更多可能。

自研 WMS 的上线完成了仓储层智能改革,五年、十余仓,Apache ShardingSphere 同 WMS 完美支撑了数个“读书节”、“618”和“11.11”等大型促销活动。

业务挑战

当当在自研 WMS 之前使用的是第三方仓储管理系统,其数据库是基于 IBM 小机的 Oracle,结合当当业务体量以及电商仓储物流在促销期间密集请求的业务特点,传统集中式数据库架构给 WMS 带来了极大的挑战。

在业务快速发展的冲击下,数据库计算和存储能力的上限越发明显,Scale-up 方案难以满足超级促销期间的业务需求,技术团队需要对业务层多次做拆分调整来缓解“存算”瓶颈,产能存在受限的风险。

  • 计算、存储能力双受限

传统集中式架构扩展能力相对较差,数据库的计算和存储能力成为明显瓶颈;

  • 业务开发维护成本高昂

在扩展能力相对差的基础上,业务侧需要不断的去让步做拆分,开发和维护成本持续攀升;

  • 系统架构开放度不足

系统架构开放度不足将会使系统面临灵活度欠佳、功能缺失以及转型难度高等问题,基于现有架构难以快速响应新业务的开展及相关政策的调整,如云原生、SQL 审计、数据脱敏以及分布式治理等多方面需求。

解决方案

当当技术部结合现状及未来发展等多维度的调研,最终确定了自研 WMS 的方案。在硬件方面全面采用通用的 x86 设备替换 IBM 小型机,数据库层面引入开源数据库 MySQL 来替换 Oracle。当时已有多个开源数据库中间件,但成熟度和功能方面与预期不符,因此选择了自研数据库中间件,Sharding-JDBC 闪亮登场。

ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供额外服务。具备轻量、高效、易用以及高兼容等特点。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

  • 适用于任何基于 JDBC 的 ORM 框架,如:JPA、Hibernate、Mybatis、Spring JDBC Template 或直接使用 JDBC;     
  • 支持任何第三方的数据库连接池,如:DBCP、C3P0、BoneCP、HikariCP 等;
  • 支持任意实现 JDBC 规范的数据库,目前支持 MySQL、PostgreSQL、Oracle、SQL Server 以及任何可使用 JDBC 访问的数据库。
    ShardingSphere-JDBC 方案

目前 Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成,在当当自研 WMS 中使用的是 ShardingSphere-JDBC。

那么 ShardingSphere-JDBC 在 WMS 中具体是如何应用的呢?

在 WMS 系统中,城市的“仓”就是仓储系统的管理单位,每个仓有对应的业务系统和数据库,单个仓使用 3 套 MySQL 主从集群承载指定城市仓库的数据。目前,当当在全国各地设有十余个自建的仓库,主要分布在订单量较大的城市,这种自建仓库模式在具备灵活管理等特性的同时,也可以降低企业的长期仓储成本。

在架构规划上,WMS 通过 ShardingSphere-JDBC 按业务类型进行分库, 每套集群负责存储指定的业务数据,单个仓的 3 套 MySQL 集群分工如下:

  • 基础库集群:User,Area,Menu;
  • 业务库集群:Order,Package;
  • 库存库集群:Stock,Working。

上线前,系统会根据仓库的基础数据进行初始化,如货位等信息,这里不做深入讨论。

分布式数据库中间件的架构解决了 WMS 存算受限、开发维护成本高以及系统灵活度不足的问题,以成熟的底座和熟悉的技术栈去承载业务,架构相对透明化,兼容度良好且没有入侵性。

当当网的IT基础架构 当当网基本介绍_中间件

当当网的IT基础架构 当当网基本介绍_数据库_02

当当 WMS 系统拓扑图(单仓)

用户收益

在当当自研 WMS 的过程中发挥了非常重要的作用,带来了五方面的收益如下:

1、性能极致

ShardingSphere-JDBC 轻量级的框架使其性能接近原生 JDBC,提供分库能力的同时性能可发挥极致,WMS 产能不再有受限的风险;

2、系统稳定

自 2016 年 WMS 上线至今,数年来系统一直稳定运行;

3、低风险、零侵入

当当底层系统为 2000 年演进而来,Apache ShardingSphere 凭借自身零侵入性的特点,用很小的改动就即完成了兼容适配,满足了业务需求;

4、专注业务开发

研发团队无需再关心业务拆分的工作,可将更多的精力聚焦于业务需求;

5、降本增效

  • 高兼容的特点可以在无需大量的重构和改造前提下满足业务增长的需求,改造迁移成本低;     
  • 通过仓店智能化、入库商品自动匹配最优货位的设计,仓店订单效率提升了 30%,人力成本节约上千万。

Apache ShardingSphere 的前世今生

有人说 ShardingSphere 是当当的产品,其实更准确的说:ShardingSphere 起源于当当,在 2018 年 11 月 10 日捐赠给 Apache,经 17 个月的孵化于 2020 年 4 月 15 毕业,是 2020 年度第一个从 Apache 孵化器毕业的顶级项目。

前段时间,在 ShardingSphere 进入 Apache 基金会三周年的纪念日(2021/11/10)里,社区发布了期待已久的 5.0 正式版,借着这个机会,一起回顾 Apache ShardingSphere 的前世今生。

  • 2014 年,当当针对电商平台推出了统一开发框架 dd-frame,目的是通过分离业务和技术代码,实现开发框架统一化、技术组件标准化以及跨组沟通高效化,使研发人员的精力最大化的聚焦在业务开发上。开发框架中名为 dd-rdb 的关系型数据库模块专门用于负责数据访问,可实现简单的分库分表功能,它就是 Sharding-JDBC 的前身,也是 dd-frame 2.x 中重点规划的部分。     
  • 2015 年,当当决定重构 WMS 和 TMS,设计上需要引用分库分表方案,天时地利人和,当当架构部在 9 月正式启动了项目,同年 12 月份 Sharding-JDBC 1.0.0 在当当内部发布,正式开启了 ShardingSphere 的征途。
  • 2016 年初,Sharding-JDBC 从 dd-rdb 中剥离,向社区开源,产品形态是增强版 JDBC 驱动,以 jar 包形式提供服务。
  • 2017 年底,发布 2.0.0 版本,打开了数据库治理功能。
  • 2018 年,进入 Apache 软件基金会。3.0.0 版本是一个华丽的转身,独立服务形态的 Sharding-Proxy 面世,实现了异构开发语言的需求,同时项目名称从 Sharding-JDBC 更名为 ShardingSphere,迈出了构建数据库上层标准和生态的第一步。     
  • 2019 年,发布 4.0.0 版本,可支持更多的数据库产品。
  • 2020 年,毕业成为 Apache 软件基金会的顶级项目。    
  • 2021 年 11 月 10 日,发布 5.0.0 GA 版,作为加入 Apache 软件基金会三周年纪念日的礼物,呈现给社区及整个分布式数据库和安全生态领域。     

当当网的IT基础架构 当当网基本介绍_中间件_03

 Apache ShardingSphere - RoadMap

从 5.0.0 版本开始,Apache ShardingSphere 正式开启了以可插拔架构为核心的全新阶段,实现了由过去数据分片单一应用场景到现在复杂应用环境下综合数据治理的身份转变与能力提升。在新版本中,Apache ShardingSphere 具备了更多新特性,并拥有了更加成熟的大数据解决方案。

首先,基于可插拔架构对内核进行了全面改造,内核中的各个功能可以任意组合并叠加使用。其次,为了提升 SQL 分布式查询能力,5.0.0 GA 版打造了全新的 Federation 执行引擎,来满足用户复杂的业务场景。此外,5.0.0 GA 版在内核功能 API 层面也进行了大量优化,旨在降低用户使用这些功能的成本。

写在结尾

全链条数字化驱动着当当高质量发展,让全民阅读触手可及。在必不可少的自研 WMS 一环中,ShardingSphere 在数据层提供了强力支撑。

Apache ShardingSphere 历经两年的迭代与打磨,5.0.0 GA 版本已面世。趋近成熟的可插拔生态,标志着 Apache ShardingSphere 从分库分表中间件工具蜕变为以 Database Plus 理念为新航标。重塑分布式可插拔体系,助力整个数据库行业带来新风向和更有价值的解决方案。