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 的助力下,数字化升级将会更加便捷和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/64925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM解密: 解构类加载与GC垃圾回收机制

文章目录 一. JVM内存划分二. 类加载机制1. 类加载过程2. 双亲委派模型 三. GC垃圾回收机制1. 找到需要回收的内存1.1 哪些内存需要回收?1.2 基于引用计数找垃圾(Java不采取该方案)1.3 基于可达性分析找垃圾(Java采取方案) 2. 垃圾回收算法2.1 标记-清除算法2.2 标记…

Hugging Face--Transformers

pipeline 在这里插入图片描述 AutoClass AutoClass 是一个能够通过预训练模型的名称或路径自动查找其架构的快捷方式. 你只需要为你的任务选择合适的 AutoClass 和它关联的预处理类。 AutoTokenizer AutoModel 保存模型 自定义模型构建 Trainer - PyTorch优化训练循环 参考资…

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…

鸿鹄企业工程项目管理系统 Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统源代码

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展,企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,公司对内部工程管…

如何在 iPhone 上检索已删除的短信

我厌倦了垃圾短信。当我例行公事地删除 iPhone 上的这些不需要的消息时,当我分散注意力时,我通过点击错误的按钮清除了所有消息。这些被删除的消息中包含两条团购验证信息。有什么办法可以从 iPhone 检索我的消息吗? 有时我们可能会不小心删…

jupyter常用的方法以及快捷键

选中状态 蓝色 按enter 进入编辑状态 编辑状态 绿色 按Esc 进入选中状态 Code模式运行是运行代码 Markdown模式运行是进入预览状态 - - - 是文本格式的一种精简的语法形式 Raw NBConvert 是默认文本状态 - - - 输入什么样 展示什么样 Y - - - 切换code模式 M - - - 切换Markdo…

9、监测数据采集物联网应用开发步骤(7)

源码将于最后一遍文章给出下载 监测数据采集物联网应用开发步骤(6) 串口(COM)通讯开发 本章节测试使用了 Configure Virtual Serial Port Driver虚拟串口工具和本人自写的串口调试工具,请自行baidu下载对应工具 在com.zxy.common.Com_Para.py中添加如下内容 #RS…

[CISCN 2019初赛]Love Math

文章目录 前言考点解题过程 前言 感慨自己实力不够,心浮气躁根本做不来难题。难得这题对我还很有吸引力,也涉及很多知识。只能说我是受益匪浅,总的来说加油吧ctfer。 考点 利用php动态函数的特性利用php中的数学函数实现命令执行利用php7的特…

音频——I2S 标准模式(二)

I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 I2S format时序图逻辑分析仪抓包 I2S format 飞利浦 (I2S) 标准模式 数据在跟随 LRCLK 传输的 BCLK 的第二个上升沿时传输 MSB,其他位一直到 LSB 按顺序传传输依…

Linux(实操篇三)

Linux实操篇 Linux(实操篇三)1. 常用基本命令1.7 搜索查找类1.7.1 find查找文件或目录1.7.2 locate快速定位文件路径1.7.3 grep过滤查找及"|"管道符 1.8 压缩和解压类1.8.1 gzip/gunzip压缩1.8.2 zip/unzip压缩1.8.3 tar打包 1.9 磁盘查看和分区类1.9.1 du查看文件和…

【C#】泛型

【C#】泛型 泛型是什么 泛型是将类型作为参数传递给类、结构、接口和方法,这些参数相当于类型占位符。当我们定义类或方法时使用占位符代替变量类型,真正使用时再具体指定数据类型,以此来达到代码重用目的。 泛型特点 提高代码重用性一定…

高阶MySQL语句

数据准备 create table ky30 (id int,name varchar(10) primary key not null ,score decimal(5,2),address varchar(20),hobbid int(5)); insert into ky30 values(1,liuyi,80,beijing,2); insert into ky30 values(2,wangwu,90,shengzheng,2); insert into ky30 values(3,lis…

3D步进式漫游能够在哪些行业应用?

VR技术一直以来都是宣传展示领域中的热门话题,在VR全景技术的不断发展下,3D步进式漫游技术也逐渐覆盖各行各业,特别是在建筑、房产、博物馆、企业等领域应用更加广泛,用户通过这种技术能够获得更加直观、生动、详细的展示体验&…

【大数据】Apache Iceberg 概述和源代码的构建

Apache Iceberg 概述和源代码的构建 1.数据湖的解决方案 - Iceberg1.1 Iceberg 是什么1.2 Iceberg 的 Table Format 介绍1.3 Iceberg 的核心思想1.4 Iceberg 的元数据管理1.5 Iceberg 的重要特性1.5.1 丰富的计算引擎1.5.2 灵活的文件组织形式1.5.3 优化数据入湖流程1.5.4 增量…

零基础学Python:元组(Tuple)详细教程

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 Python的元组与列表类似, 不同之处在于元组的元素不能修改, 元组使用小括号,列表使用方括号, 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 👇 👇 👇 更…

数据结构--树4.2.1(二叉树)

目录 一、二叉树的存储结构 二、二叉树的遍历 一、二叉树的存储结构 顺序存储结构:二叉树的顺序存储结构就是用一维数组存储二叉树中的各个结点,并且结点的存储位置能体现结点之间的逻辑关系。 链式存储结构:二叉树每个结点最多只有两个孩…

渗透测试漏洞原理之---【任意文件上传漏洞】

文章目录 1、任意文件上传概述1.1、漏洞成因1.2、漏洞危害 2、WebShell解析2.1、Shell2.2、WebShell2.2.1、大马2.2.2、小马2.2.3、GetShell 3、任意文件上传攻防3.1、毫无检测3.1.1、源代码3.1.2、代码审计3.1.3、靶场试炼 3.2、黑白名单策略3.2.1、文件检测3.2.2、后缀名黑名…

论文阅读_扩散模型_LDM

英文名称: High-Resolution Image Synthesis with Latent Diffusion Models 中文名称: 使用潜空间扩散模型合成高分辨率图像 地址: https://ieeexplore.ieee.org/document/9878449/ 代码: https://github.com/CompVis/latent-diffusion 作者:Robin Rombach 日期: 20…

.netcore grpc日志记录配置

一、日志记录配置概述 通过配置文件appsettings.json进行配置通过Program.cs进行配置通过环境变量进行配置客户端通过日志通道进行配置 二、实战案例 配置环境变量:Logging__LogLevel__GrpcDebug配置Appsettings.json配置Program.cs配置客户端工厂以上截图是目前为止已知的可…

【操作系统】一文快速入门,很适合JAVA后端看

作者简介: 目录 1.概述 2.CPU管理 3.内存管理 4.IO管理 1.概述 操作系统可以看作一个计算机的管理系统,对计算机的硬件资源提供了一套完整的管理解决方案。计算机的硬件组成有五大模块:运算器、控制器、存储器、输入设备、输出设备。操作…