韵达主要面向国内外提供快递、快运、供应链、仓储服务等,目前拥有4万多家快递服务网点,3000多家快运服务网点,200多家加盟商,以及100多家分拣中心,其中包括4200条快递干线,1000多条快运干线,150家城市配送站,业务覆盖了100多家重点城市,遍布全球30万个国家和地区,拥有200万平米仓储面积,从业人员30多万。
韵达每日订单量高达几千万,每个订单有多种标签信息,因此数据量巨大。其中上游业务方有各大电商平台、订单中心、大客户、智橙网、财务中心、店配团、物流团等。
打标平台主要提供了订单标签基础服务、查询统计服务、消息推送、CSV文件推送、订单标签处理等。其中数据存储是核心业务,数据量较大,而且是高并发访问场景。数据存储涉及到Kafka、CSV、Redis、MySQL分库分表。
下游主要为业务赋能,有韵图、智能外联、大掌柜、数据中台、结算团、韵达超市、揽派系统等一共30多个系统。
韵达原先的业务架构存在较多痛点:
因此,韵达采用了阿里云开源PolarDB-X云原生分布式数据库对业务架构进行了升级,使架构性能得到了极大的提升:
上图为升级后的基于分布式数据库的业务架构。与老架构的主要差别在于,将原先基于MySQL的人工分库分表使用PolarDB-X进行了替换,架构上并未有大调整。
此外,开发团队并不需要理解CN节点,也不需要与CN节点打交道,他们看到的只是一个PolarDB-X数据库,可以理解为一个大型的MySQL实例,不存在额外的学习成本。
PolarDB-X提供了两种数据库模式,分别是Auto模式和DRDS模式。官方推荐使用Auto模式,它具有较好的功能特性,我们也采用了该模式。
Auto模式分区灵活,支持自动、手动分区,单机DDL语法无需改动,可以直接在PolarDB-X上使用。高度兼容了MySQL,无需额外的学习成本。支持分区级分裂合并,解决了数据热点问题。
Auto模式下的数据库建表语法与MySQL的建表语法完全一致,无需指定分区定义,自动采用PrimaryKey做分区,非常方便。另外,PolarDB-X支持多种表类型,比如传统单表、广播表、分区表,且可以通过简单DDL语句进行灵活的转换,比如分区表通过partition-by即可做哈希分区,可通过pratition参数指定分区数,可以创建broadcast广播表,也可以通过outtable将单表转换为分区表,非常方便快捷。
PolarDB-X也提供了数据生命周期管理。
TTL在PolarDB-X后台通过定时任务来自动处理,节省了开发与运维的成本。
韵达订单打标项目为双活部署,每天订单打标数据量2亿+,接口查询量8000多万。目前标签分类有80多种,随着业务发展和用户需求,标签分类可轻松扩展。赋能30+业务应用,提供了API查询、统计分析、消息推送、CSV等。
数据进行了温热分级存储,其中Redis存储三个月数据量,PolarDB-X存储一年的数据量。有些数据除了统计分析用途以外,还有财务对账等回溯需求,因此会被导入PolarDB-X,以便进行方便快捷地查询。因为数据量较大,我们采用ProtoBuf对数据进行了压缩。
PolarDB-X为韵达订单打标项目带来了诸多好处:
PolarDB-X提供了很多优秀的功能特性,在韵达的很多场景里可以进行推广使用。韵达存在大量高并发、海量数据存储的业务场景,因此,后续会在韵达公司内部进一步做PolarDB-X的推广使用。
另外,也会进一步在HTAP领域进行探索。PolarDB-X提供了TP和AP的处理能力,因此我们计划使用PolarDB-X替换原先MySQL+Elasticsearch提供的能力。同时,也会将PolarDB-X与韵达已有的周边生态进行融合。
社区建设方面,PolarDB-X官方推荐部署在K8s平台上,提供了开源的数据库,也提供了开源的监控能力。后续韵达将基于Prometheus与Grafana做监控能力的进一步提升,比如与公司金融平台、钉钉等打通,及时了解系统运行的健康状况。