TiDB x 安能物流丨打造一栈式物流数据平台

作者:李家林 安能物流数据库团队负责人

本文以安能物流作为案例,探讨了在数字化转型中,企业如何利用 TiDB 分布式数据库来应对复杂的业务需求和挑战。

安能物流作为中国领先的综合型物流集团,需要应对大规模的业务流程,面临着核心结算系统所带来的数据库挑战。安能将结算系统 all in TiDB,克服传统 MySQL 数据库所面临的瓶颈,实现平稳迁移和性能提升的同时,打造一栈式物流数据平台,加速数字化升级。

关于安能物流

安能物流(简称:安能)成立于 2010年,是中国领先的综合型物流集团,为企业组织及消费者提供安全、便捷、优质、高效的物流服务。截止到目前安能物流自有员工 20,000 多名,自建 136 个分拨转运中心,乡镇覆盖高达 98%以上,服务范围遍及全国。安能自 2010 年成立开始,前后经历了七轮国际顶级资本的融资,于 2021 年双 11 在港交所成功上市,成为"港股快运第一股"。在快运行业,安能拥有中国零担快运市场最大的加盟网络,全网有 30,000 多家末端加盟商网点,自营车头和车挂数量高达 9,000多台。在产品服务方面,安能提供多样化的产品和特色业务,以满足不同用户的需求 。


TiDB 在安能结算系统的应用

安能结算系统作为公司最核心的业务系统,承载了总部 与末端 加盟商网点所有费用结算业务,包括: 账户管理、充值、开票、交易、调账、对账、代收、代付、税差等全费用结算业务流程处理。 从系统的逻辑架构图来看,其功能及业务处理流程也是相对复杂的,目前该套系统承载业务量: 日均 450,000 票,出货量 48,000 吨,支持末端 36,000 家网点实时开单算费扣款和定时批处理调账,日均用户数 3,800,调用量 5,000 万以上。

安能在 2017 年对结算系统进行了重构,选择了当时较为通用主流的 MySQL+ 数据库代理中间件分库分表的数据库架构,截止到 2023 年切换到 TiDB 之前,这套 MySQL 伪分布式数据库集群已经运行了 6 年。在数据量方面:核心业务表 4 张,单表字段 360+,共分了 8 个库;单表数据 3 亿+,2TB 大小。系统并发情况:30,000 多家网点开单高峰期集中在 16:30 -19:30 三小时内完成,数据库 QPS 均值为每秒 20,000,系统平均响应时间在 80-100ms 内。

为了避免同一个网点查询或处理数据时出现跨库问题,采用以网点编码作为分库分表的路由规则。为了保证单库单表数据量的均衡,安能还将产粮区如华东、华南和非产粮区如东北、西北区域的网点进行相互组合后放在同一个库同一个表中。即便如此,由于业务的不断增长,地区产业布局的变化,网点货量的变化导致原结算系统 MySQL 数据库面临越来越大的挑战,主要表现在:基于网点编码的分库分表路由规则,导致单库单表数据分布不均,存在数据热点问题;基于网点编码的分库分表路由规则,当数据量不断增长,数据库主库节点扩展复杂度高;MySQL 5.7 不支持表结构在线变更,系统变更停机时间长,导致业务可用性降低;Mycat 不完全支持标准 SQL 语法,导致研发侧代码改动较大;数据同步到下游进行分析时需要解决多库多表数据合并问题。

基于以上面临的诸多挑战,安能在 2020 年开始考虑将现有的这套结算的 MySQL 伪分布式集群找一个真正的分布式数据库进行替换。除了要考虑到结算系统复杂的业务处理流程外,还要考虑数据的实时性、准确性、高可用等诸多要求,经过一系列考察评估,最终安能选择了 TiDB 作为替换结算 MySQL 的最佳产品。

为什么选择 TiDB?这和其他选择 TiDB 用户的关注点类似。首先,TiDB 支持一键水平扩容。第二,TiDB 提供金融级高可用。第三, 增加了在线数据的生命周期,同时保证系统响应时长。第四,TiDB 高度兼容 MySQL,原来的这套 MySQL 数据库在代码侧不做改动,可以做到平滑迁移。第五,TiDB 支持表结构的在线变更,减少了系统的停机时间,提高了业务可用性。TiDB 6.5 版本的 Online DDL 离业务的需求还有一定差距,安能也高兴地看到 TiDB 7.1 版本 Online DDL 的效率有了显著提升。此外,TiDB 内置了丰富的图形监控界面,提供了完整的闭环运维能力,包括故障分析等,降低了运维成本。

即便如此,TiDB 在安能从测试到切换上线还是经历了 3 年左右的时间,主要分为测试和数据校验两个阶段。在测试阶段,安能从 TiDB 3.0 版本开始测试,持续到 5.4 版本,在这个过程中充分测试了 TiDB 每一个重要版本的核心特性和重要功能,也测试了 TiDB 推出的诸多工具,见证了 TiDB 产品成长和打磨过程。

具体测试方法是将生产数据通过消息队列 1:1 引流到 TiDB 来模拟真实结算业务数据写入效率,同时针对不同业务场景及多业务场景组合下进行数据新增、删除、修改、查询功能及性能压测。在测试阶段,发现两个主要的问题:第一,在 TiDB 4.0 版本,数据量 800GB 时,同表使用分区表和普通表,分区表的性能比普通表大概降低了 20%-30%。第二,在某些业务场景下,例如 "查询时间范围内,扫描下一站为网点"对 TiDB 进行压测,发现较严重的数据热点问题,初期的 TPS 较低。后期,DBA 通过调整主键解决了一些数据热点,也通过调整集群的配置,TPS 均值达到了 10,000+。

在数据校验阶段使用 DM 将结算 MySQL 8 个库的数据实时同步到 TiDB 中,按照生产环境 1:1 搭建了一套完整的结算系统仿真环境,进行了为期将近一年的数据校验工作,最终于 2023 年春节,将原有运行六年的 MySQL 集群无缝平滑切换到 TiDB 上。虽然安能不是快递物流行业第一个使用 TiDB 的用户,但是所有结算业务 all in TiDB,在行业内安能是第一个。

TiDB 上线投产后,给安能带来的收益主要有几个方面:第一,结算系统应用代码几乎无改动,平滑迁移至 TiDB,只是做了数据源的替换。第二,解决了使用 MySQL 数据库时所面临的所有挑战。第三,原来 MySQL 环境下,在线数据只能保存 6-8 个月的时间,使用 TiDB 的结算系统在线数据的生命周期翻倍,可以保存 1 年 8 个月,当然两年也没有问题。现在,单表的数据量大概是 35 亿,5 TB 大小。TiDB 数据库平均响应时长比原来 MySQL 降低了一倍,这是在业务高峰的时候,正常情况下是 25 毫秒。QPS 从原来 20,000 提升到了 45,000。运维成本方面,综合来看整体大概降低 30% 左右。

同样,在切换到 TiDB 后,也不是没有任何问题。从业务场景角度,安能希望 TiDB 在后期的版本中解决以下几个问题:第一,在多表交易的时候,TiDB 的 SQL 优化器会出现执行计划稳定性的问题。第二,业务数据导出场景下,容易出现 OOM 的问题,这个问题在 7.1 版本有了解决方案,后续我们会进行深入的验证。第三,分区表性能与普通表存在 10% 性能差距。升级到 6.5 版本之后又进行了测试,结果还是有性能的差异。最后,TiDB 子查询的性能比 MySQL 要差一些。

安能在系统建设过程中,经历了从垂直大集中模式到拆分数据库,再到微服务架构下数据分布式集中存储这样一个过程。目前,安能正将业务全链路环节运营操作系统切换到 TiDB 上,从而降低系统数据交互的复杂度。未来计划将结算业务和运营操作合并到同一个 TiDB 集群,安能在上海有两个数据中心,双机房之间通过万兆专线网络直连,可实现双数据中心部署,实现业务流量双活。可能大家会问,如果把结算业务与核心运营操作业务都放到一个集群会不会有问题?答案是没有问题,为什么?第一,安能结算业务与核心运营操作业务的时间点是分开的。第二,安能对核心运营操作业务的底层数据模型经过了全面的设计,不会出现多表关联复杂 SQL 查询等,所以可以这样做。

一栈式物流数据平台成为数字化升级的突破点

最后谈谈 TiDB 是如何助力安能数字化升级的。下图是安能快运业务的全链路流程。相对于快递而言,快运业务的流程节点更多,业务逻辑更复杂。在每一个业务环节,不但会涉及到业务操作,还会涉及到一些管理的动作,因此每个业务节点都会产生大量数据,而这些数据又环环相扣,这对数据的实时性和准确性要求非常高。安能今天已经做到了全链路业务流程的数据可视化,但是随着公司管理赋能动作的前移和下沉,接下来安能计划使用算法模型在现有的数据上进行人、车、场、货的各种预测。

安能自 2017 年开始走数据运营路线,到目前为止,自主研发 52 套 IT 系统,开发了一系列部署于整个业务流程的专有数字化工具,通过全链路数字化运营和智能化决策来实现效率升级。也正是因为如此,在今天数字化升级的背景下面临非常大的挑战,主要表现在:第一,业务系统多,功能分散,导致数据分散。第二,多个业务系统的数据采集到下游去做统计分析的时候,因口径差异,不同系统、相同时点、"同一个数据"不一致。第三,原先在不同的业务场景下缺乏顶层的设计,导致在不同的业务场景使用了不同的技术栈,从而造成了复杂的系统架构。

除此以外,当业务增长后系统无法承载高峰期负载并发,如何解决?结构化及非结构化数据快速增长,数据查询和处理请求无法响应,又该怎么办?今天,在物流快递行业内,安能整个 IT 团队的人员是最少的,在降本增效的背景下,IT 团队如何高效支撑业务的发展?这些都是接下来需要面临的问题。

基于当前所面临的挑战,首先要解决的问题就是数据交互和统一的问题,因此构建新一代一栈式物流数据平台成为了安能数字化升级的突破点。如何使用最简单、最灵活、最高效的技术体系和最少的成本构建新一代数据平台,从而实现货物从下单到签收及结算的全闭环实时状态追踪。基于 TiDB 的应用实践,后续安能将借助 TiDB 分布式、高可用性、弹性伸缩、大规模数据处理和实时 HTAP 等能力来构建新一代一栈式物流数据平台,加速数字化升级。

具体的设想是使用 TiDB 作为一栈式物流数据平台的底座,把安能源端业务系统所采集的所有数据,按照业务主题和数据域统一进行存储,降低不同系统之间数据交互的复杂度,解决数据统一的问题。在一栈式物流数据平台的基础上,可以做相应的数据服务,统一对外提供数据服务平台和 API 接口,以及更高阶的数据应用产品。安能相信在 TiDB 的助力下,数字化升级将会更加便捷和高效。

相关推荐
猿月亮3 小时前
MySQL自启动失败(MySQL不能开机自启)解决方案_MySQL开机自启疑难杂症解决,适用Win11/Win10
数据库·mysql
酷炫码神3 小时前
MySQL查询
数据库·mysql
大明湖的狗凯.3 小时前
MySQL 中的排序:索引排序与文件排序
数据库·mysql·oracle
XMYX-03 小时前
深入解析 Django 中数据删除的最佳实践:以动态管理镜像版本为例
数据库·django·sqlite
Lostgreen3 小时前
SQL on Hadoop
数据库·hadoop·笔记·分布式·sql·学习
Karoku0663 小时前
【docker集群应用】Docker常用命令
运维·数据库·docker·容器
小小宇宙中微子4 小时前
MySQL INSERT CRTATE DELETE DORP UPDATE WHERE 的用法
数据库·mysql
swiftlzk4 小时前
redmi 12c 刷机
android·数据库
人才程序员5 小时前
详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)
开发语言·数据库·c++·qt·计算机外设·界面·c语音
打你个大西瓜️5 小时前
单片机知识总结(完整)
数据库·单片机·mongodb