客户说|PolarDB 分布式版助力韵达“客户管家”全面上线
韵达物流作为国内快递行业第一梯队的领军企业之一,在全国拥有近 5 千个加盟商、超过 3 万个门店网点,随着公司在枢纽转运中心、设备自动化智能化、运力运能提升。数字化信息化建设等核心资产方面的投入逐渐完善,客户管家便是其中的一个典型。
客户管家已于今年年初正式上线,借助后台强大的计算能力以及以客户体验为中心的产品设计,得到用户的一致好评,客户管家是韵达物流提供的一站式、全新数字化管理工具,客户管家系统从已揽收、运输中、派件中、已签收等多维度,对客户发出快件进行全链路跟踪和数据可视化展示,协助客户实现对店铺快件全流程的可视、可控,提高运单管理效率。
庞大的运单量,让客户管家的设计面临挑战
客户管家存储的是韵达全量的运单数据和客户数据以及售后工单数据,在立项之初就被定义为我们的核心的业务系统,面对这样核心业务,我们在设计时需要解决下面几个最基本的问题:
如何存
韵达目前日增运单量超过数千万,预计总量接近数百亿,工单数据也接近数十亿的量级。将这些信息存储并进行关联,才能为客户提供丰富的业务服务。按我们的以往的惯例会采用分库分表方案,按照我们以往使用的经验,我们后续将面临扩容、运维管理、代码侵入等一系列的问题。
如何管
按监管要求,我们需要保存数年的数据,面临日增千万的数据量,存在任何一个数据库哪怕是分布式数据库内,也是一个极大的挑战,即便我们的 DBA 可以定期的人肉备份、清理,绝大部分数据库也不能及时地回收空间,需要 DBA 额外的介入,整个管理流程繁琐且效率低下,还很容易影响系统的稳定性。
如何容灾
运单数据对物流公司的意义不亚于账单数据对银行的意义。核心业务按照要求需要有完整的异地容灾方案,传统分库分表意味着每一个分库就需要维护一条同步链路,管理的复杂度随着分库数的增加而指数级上涨,同时数据一致性和完整性也很难得到保证。
跟分库分表说拜拜
借助阿里云瑶池旗下的云原生数据库 PolarDB 分布式版(PolarDB for Xscale,以下简称 PolarDB-X)和韵达成立的物流行业创新实验室的机会,我们在这个项目中成功引入了 PolarDB-X 作为我们的核心数据库。
一体化
PolarDB-X 通过一体化的分布式设计和一体化的运维管理方案,让我们不再需要额外管理海量的 MySQL 实例。从维护多套转变成维护一套,彻底摆脱了分库分表带来的运维困扰。
兼容性
同时与单机 MySQL 高度兼容的使用体验,也大大解放了业务层的代码设计,让我们不再去顾虑之前传统分库分表给我们带来的各种限制。更重要的一点,PolarDB-X 提供的 Binlog 协议兼容,完美匹配了我们公司内部的数据同步方案,让我们的体感更多的是我们只是引入了一个超级大的 MySQL 而已,原公司内部 MySQL 的周边生态包括基于 Binlog 的上下游同步机制都被完整地继承了下来。
TTL 让运单“滚”起来
TTL-数据的生命周期管理也是我们选择 PolarDB-X 很重要的原因,运单数据有着明显的时间周期属性,通常 1 年内的数据对客户是有意义的,太久远的运单大部分情况不会被高频地访问。按照以往的做法,我们会定期将过期数据备份导出后原地进行删除,由于 MySQL 的特性 delete 之后不会回收空间,还需要在业务低峰执行 optimize 回收空间。有多少套 MySQL 就需要重复多少次这样的管理动作,DBA 毫无幸福感可言。
PolarDB-X 提供了 TTL 功能,在建表时除了指定按照运单打散之外,还可以指定时间分区,并指定分区过期策略:
以我们真实的表结构为例,这里可以理解为是一个 2 级分区表,第一级分区是已运单号,第二级分区是时间,每个月一个分区,12 个月后过期。到第 13 个月时,自动会将第 1 个月的数据进行 detach 后删除处理。如果结合云上的数据归档功能一起用的话,PolarDB-X 还可以帮我们把过期的数据 detach 之后自动转储到 OSS 上,我们随时可以进行查询操作,体验与普通表一致,唯一的限制就是不能修改。而且整套动作内核自动完成,DBA 只需要在建表时指定规则即可,DBA 的幸福感瞬间爆棚。
CDC 让异地容灾更加简单
因为我们抛弃了分库分表的方案,借助 PolarDB-X 一体化的架构,异地容灾的架构也相应地变得简单,存储节点提供的 Paxos 协议多副本能力,每个 DN 自行可以完成跨地域数据同步。然后我们又遇到了另一个现实问题,我们的备机房规格要比主机房规格相对较低一些,如果直接采用 Paxos 协议多副本同步方案,我们的备机房的资源略显吃紧,就在我们打算放弃多副本方案采用 canal 双向同步的时候,阿里云的同学为我们同步了 PolarDB-X 的另一个最新的能力,PolarDB-X 可以通过 CDC 节点自行实现 2 个实例间的双向同步,看起来就像两个单机 MySQL 在通过 Binlog 同步一样。这下我们的备机房资源不但节省了,连同步工具都不需要了。
结语
继去年打标业务投产成功之后,客户管家是运行在 PolarDB-X 上的首个核心业务场景,自上线以来,PolarDB-X 数据库运行平稳,整体 QPS 峰值接近 10 万,而 SQL 的响应时间稳定在 5 毫秒以内,很好的支撑了整个管家平台的平稳运行。平稳的性能加上轻量的运维让我们可以把更多的工作重心放在了业务设计上,大大提高了我们的业务迭代效率。我们也相信 PolarDB-X 凭借出色的分布式能力和极致的单机体验,未来在物流行业的其他领域如轨迹、仓储、物流等都会有它的一席之地。
评论