京东物流仓储系统618大促保障背后的运维秘诀
时间:2025-11-05 09:35:07 出处:应用开发阅读(143)
前言
京东物流极速的京东诀购物体验背后隐藏着怎样的秘诀?仓储和配送时效是其中最为关键的一环。京东物流超强仓配体系,物流维秘特别是仓储在电商行业中独有的仓储系统,在其中起到了决定性的系统作用。
当前京东的大促的运库房已经遍布全国,京东仓储管理系统(简称WMS系统)是保障背后最核心的生产系统,涵盖了从入库,京东诀复核,物流维秘打包,仓储出库、系统库存和报表等等环节。大促的运
而作为系统最后端的保障背后数据库,不仅仅承担着存储数据的京东诀任务,还是物流维秘系统可用性的最后一道防线,如何保证仓储系统数据库的仓储高性能和高可用,直接决定了库房生产是否能顺畅进行。云南idc服务商
在本篇我们将会详细介绍京东物流仓储系统的数据库架构,以及如何通过运维自动化平台、性能优化、故障自愈和数据结转等步骤进行数据库运维架构的演进。

一、数据库架构
仓储系统的数据库架构,主要分为两种模式,一种是本地模式,一种是集中模式:
1. 本地模式
本地模式是指当前WMS系统的应用和数据库服务器都部署在本地库房,目的是减少网络延迟,提高作业效率。缺点是机房的电力和网络环境略差,运维难度较高。部署架构图如下:

2. 集中模式
集中模式是指在IDC机房部署一套WMS系统,多个区域的园区或库房都通过网络专线访问,优点是减少资源部署,架构更为合理,便于运维管理,缺点是b2b信息网部分区域网络延迟较高,一旦IDC发生故障影响范围较广。部署架构图如下:

以上是京东仓储系统数据库的两种主要部署模式,目前主要是园区部署模式,也就是一个或多个库房园区共用一个集群(属于本地模式的一种)。
但是随着业务规模的增长,全国各地库房建设日益增多,数据量也与日倍增,而对系统的高性能和高可用的要求却越来越高,如何在现有架构模式下,还能保障系统的高效稳定运行,故障及时恢复,都对仓储系统的运维带来极大的挑战。
以下章节就详细阐述一下我们是如何应对这些挑战的。
二、UDBA运维自动化平台
工欲善其事必先利其器,想要做好大规模系统的运维管理,一定需要有自动化的亿华云运维平台作为支持,同时也为了提高工作效率,减少和研发的沟通成本,库房运维DBA开发了UDBA数据库自动化运维平台。该平台除了是DBA日常自动化运维的操作平台,还为WMS研发、运营人员提供了日常所需的技术支持和信息查询。
UDBA数据库自动化运维平台的主要功能模块如下所示:

三、性能优化
由于仓储业务逻辑复杂,并且系统是从早期的SQLServer迁移到MySQL的,对数据库是强依赖的关系。很多业务场景尤其WMS5的报表业务会涉及很多超大表(单表数据量超过1千万行)的关联,且查询条件根据现场工作人员需求进行组合修改,再加上部分表设计不合理以及查询SQL语法不规范等问题,给数据库优化带来极大挑战。
我们主要通过以下方式来保证数据高性能:
实时监控数据库性能,针对突发性数据库出现性能问题及时进行故障排查和故障恢复,保证业务生产正常进行。 每天对MySQL慢日志进行分析汇总后邮件抄送给相关研发同事,配合研发同事一起进行数据库优化。 周期性对数据库进行巡检,检查数据库运行状态,对压力较大的数据库进行重点分析优化。 定期对研发同事尤其新入职同事进行SQL培训,主要针对MySQL语法规范、MySQL表设计、MySQL查询优化等方面,提升研发同事的数据库设计能力和SQL编写能力,在开发过程中提前规避常见的性能问题。 将优化过程中遇到的问题归纳分析整理,帮助研发同事认识性能问题后的本质原因,避免重复出现相同故障。 积极与研发同事沟通学习,深入了解业务以便更好地从业务角度对数据库进行优化。在一次服务器巡检中,我们使用SHOW ENGINE INNODB STATUS查看MySQL服务器运行状态时,发现该数据库存在死锁问题,通过多次排查,发现死锁发生频率较高,由于死锁告警信息中的事务信息不全,我们第一时间联系相关业务人员,了解相关业务实现逻辑,该业务通过程序来保证数据唯一性,采用“先尝试更新,后尝试插入”的事务顺序来操作,在详细了解业务逻辑后,通过模拟测试帮助研发同事认识到该死锁的核心原因,并在此基础上提供改进建议,最后将该问题优化方案整理成文档抄送给更多研发同事。
四、故障自愈
仓储数据库故障自愈系统主要解决两个问题,一个是故障的自动切换,一个是组件的自动恢复。系统功能图如下所示:

基于以上这些考虑和实际需求,我们结合基础信息系统,监控系统,以及业界成熟的MHA高可用方案,实现了故障的自动切换,当数据库主库或者从库遇到异常,能够顺利得进行自动切换,保障数据库服务的持续性,当服务器有维护需求时,提供手动切换管理,更方便的进行硬件维护。
同时基于UDBA数据库自动运维平台,对全部MySQL群集复制情况进行自动探测,自动识别高延迟实例,并通过修改innodb_flush_log_at_trx_commit和sync_binlog的刷盘策略参数进行快速恢复,一旦复制正常,参数将自动调整为标准值,同时复制的IO线程或SQL线程异常停止,也可进行自动启动。
上面的处理结果都将以短信、微信和邮件等方式,通知值班同事,处理过程在UDBA自动运维平台上同样可以查询,方便对故障切换的进一步分析和统计。
五、数据结转
库房数据有时效性强和生命周期短的特点,对于数据量较大且操作频繁的业务表,如果不进行历史数据归档,会存在严重性能问题和磁盘存储瓶颈,因此我们采用生产库保留三月+报表库保留一年的归档策略,对生产库上超过三月”历史数据”进行删除,对报表库上超过一年的“历史数据”结转到IDC机房进行存放。
在未引入自动化结转平台前,需要DBA手动在每套服务器上部署结转程序,当结转条件发生变化时需要通过命令行共计批量更新每套服务器上的配置信息,DBA无法准确掌握每套服务器的结转情况,导致运维难度高且存在较高的误操作风险。
针对库房数据结转的各项痛点,在对结转流程的抽象分析基础上开发了自动化结转平台,其架构为:

自动化优化平台有以下优点:
调度作业集中管理,无需DBA再到每套服务器上部署代理作业,结转平台根据调度配置自动将调度作业推送到库房服务器上运行,可以根据业务需求轻松调整调度时间和结转条件以及结转服务器。 历史库动态扩容,在京东率先引入新一代分布式关系型数据库CockroachDB作为历史归档服务器,支持高并发的密集写入操作,可以按需对集群进行动态扩容,且能很好动态适应报表库上表结构变化。 数据职责分离,DBA作为数据库管理员而不是数据管理员,能提供数据库服务器相关信息但无法定义数据结转条件,自动结转平台将结转条件的管理接口在权限控制的基础上提供给数据管理员,明确划分职责权限。 实时掌握结转调度信息,自动结转平台提供丰富的报表和管理界面,帮助DBA轻松掌握当前结转调度信息和历史结转情况。六、升级扩容
由于各种历史原因,目前库房数据库仍主要使用2011年发布的MySQL 5.5版本,随着MySQL 5.7版本的逐渐稳定,我们通过谨慎测试评估发现,MySQL 5.7可以带来极大的性能提升,并且其完善和改进了很多高可用性及可维护性方面的功能,能帮助DBA更好的管理MySQL数据库。
升级MySQL 5.7可以带来如下优势:
性能提升,在官方测试报告中,MySQL 5.7在高并发环境下的处理能力相对MySQL 5.5有数十倍提升。 高可用性,MySQL5.7版本引入多线程复制和基于AfterSync模式的半同步等复制特性,能有效减少主从复制延迟,提升数据安全。 可维护性,MySQL5.7版本引入GTID复制、Online DDL及新版系统视图和管理函数等,极大提升数据库可维护性,降低DBA运维风险和管理难度由于库房数据库服务器长期运行在恶劣的机房环境中,从而产生RAID卡电源故障、服务器硬件老化、过保等引起老旧服务器性能变差的问题,导致DBA疲于处理服务器宕机或服务器硬件引起性能瓶颈的各种事件,因此在升级MySQL版本同时,我们也优先对业务操作频繁的重点仓进行升级扩容,使用IO性能更好的SSD硬盘以及CPU和内存配置更高的服务器,提升数据库高性能和高可用性,为库房顺利且高效生产提供有力保障。
为避免数据库升级扩容影响现有生产,我们将所有风险操作安排到半夜库房停产运行,将升级过程进行拆分细化,对每个升级环节进行评估论证,编写大量升级工具和检查脚本来提升升级效率和降低误操作风险,并积极配合研发同事进行测试验证,努力将升级扩容带来的负面影响降到最低,保障库房正常生产。
【本文来自专栏作者张开涛的微信公众号(开涛的博客),公众号id: kaitao-1234567】
戳这里,看该作者更多好文
猜你喜欢
- 图解演示环境版本:本机系统: WIN7虚拟机:VMware Workstation 8 (英文版)安装目标:Ubuntu Desktop 12.04 LTS (请点击这里)先下载好iso镜像文件详细过程图解:0. 初始画面,点击“Create a New Virtual Machine”(左上Ubuntu为本人已有开发环境机,请忽略)1. 点击“Custom(自定义)”2. 无需选择,直接Next(上面是选Workstation版本的兼容性的,这里默认为当前版本8.0,之前版本的不同在于Limitations(局限),如内存更少,不支持HD Audio等)3. 选择“I will install the operating system later”这里无严格要求的同学,是可以选择第二项“Installer disc image file (ios)”的,之后会VMware会自动得知你的iso是Linux(Ubuntu),只要求你输入Full name,和用户名密码等简单的用户设定,但是这是一个Easy install,如VMware原文所说“When the New Virtual Wizard detects an operating system that supports Easy Install, the wizard prompts you for information about the guest operating system. After the virtual machine is created, the guest operating system installation is automated and VMware Tools is installed.” 我觉得是因为这个OS的自动安装,不完全,导致一些核心命令无法使用、无反应等一些问题。所以有更高要求的同学,不能选这项,需要完全、自定义的安装。4. 在Version下选择“Ubuntu”,注:64位Ubuntu需要选下面那个“Ubuntu 64-bit”5. 设置虚拟机名称(即每次启动VMware左上方显示的名字),之后选择你想的在WIN7里的安装路径(默认在C盘,很不方便)。6. Number of processors(处理器个数)选择为2我是i7处理器,配置较好无压力的,感觉双核比单核好一些(假如没用VMware不会这么设计,但是对于更多的,没必要),下面那个应该没必要选,有非常懂的同学,请留言赐教。7. 内存大小选择,使用自动推荐的1G内存(本机内存8G)。同学们在虚拟机里,应该不会跑什么惊天地泣鬼神的大程序,内存大不等于快,而是更多的数据放在内存里而非硬盘里,对于内存消耗大的程序、系统会变快。去年做本科毕设的时候,调整过虚拟机的内存从1G为2G,结果竟然变慢了,应该是外面WIN7被占用了的问题。8. Network Type网络类型选择,本次选择默认的“NAT”注:这里有一点本人经历的非常重要需要说明,使用“NAT”的话,需要外面的WIN7使用一根线连接上网,才能在Ubuntu里上网(如同Ubuntu是你的真正OS的感觉,不需要手工配置任何IP信息),不能默认使用无线连接。这点对有些笔记本同学可能会造成麻烦。当然不是说不能通过手动配置IP相关解决,但是为了避免每次都配置的麻烦,请直接使用“bridged”桥接手动配置。9. 默认即可,直接“Next”10. 默认即可,直接“Next”第三项为直接划分硬盘给该虚拟机使用,意思应为绕过WIN7的那个文件夹管理,直接给虚拟机只用一块硬盘空间,有高级需要的同学可以选择。所以,注:默认的那个可以轻松实现copy,move,当你想拷给另外一个人,或者换机器的时候。11. 磁盘选择,默认即可,直接“Next”12. 选择“Store virtual disk as a single file”上面那个方框,是说现在就立即分20G给这个虚拟机,假如不够,还是会一点一点随着你的使用增加(跟不选一样)。假如同时没有很多个虚拟机装在WIN7上,或者硬盘空间太大又不放东西,可选。13. 虚拟机文件的存放地址,选个D盘的位置就行了。14. 点击“Finish”,完成了虚拟机的配置工作这里点击“Customize Hardware”的话,有机会对前面不满意的虚拟机硬件设置(处理器个数,内存大小等)重新设置,所以前面不满意的同学,不用点cancel重来,实际上在以后的使用过程,也是可以随时改变虚拟机的配置的,这点不用担心。15. 完成后,可以看到左上角多出了“Ubuntu 12.04”,先别急着Power on,还没装ubuntu呢。。。点击“Edit virtual machine settings”16. 在弹出的settings里,点击“CD/DVD(IDE)”,然后在右侧点击“Use ISO image file”,再选择你开始下载好的Ubuntu 12.04的iso镜像文件的路径然后点“OK”。17. 启动虚拟机,即点击step 15里的“Power on this virtual machine”,之后Ubuntu 12.04开始了安装,先选择语言,然后点击“Install Ubuntu”18. 假如选择“Download updates while installing”为安装过程直接安装最近的更新,假如选择“Install this third-party software”为安装第三方软件19. 选择“Something else”,将要对虚拟机的20G硬盘做手动分区20. 点击“New Partation Table”(新建分区表)21. 在弹出的对话框里,选择“Contunie”22. 选中新出现的“free space”(空闲空间),点击“Add”23. 注意下图中的“Primary”,“Beginning”, “Ext4 ...”均为默认,不需要修改;数字为大小,以MB为单位(注:不用追求1024凑整,硬盘实际上是凑不整的。。。),这里选择10000=10G;最后的“Mount point(挂载点)”下拉列表中,选中“/”,完成该步,点“OK”注意:“/ ” 建议大小在5GB以上。(根据关于“Ubuntu手动分区”的多个相关文章一致得来)非常注意:本人上次弄了个6G,结果进去下libraries,一下就满了,那叫一个悲剧!所以,同学们千万别抱着“5G以上”来想,ubuntu应该自己就占了4、5G,不想悲剧的同学至少8G以上吧,20G确实不大,但是假如打算长期的同学,应该不会使用虚拟机了,20G跑程序,绰绰有余,等喜欢了熟悉了,再来个真的吧。24. 再次选中“free space”(同step 22图中),点击“Add”;注意下图中“Logical”,“Beginning”均为默认,大小选择1000(1G);在Use as的下拉列表中选择“swap area”,注:最后的下拉列表为灰色,意为swap area不用选择挂载点;完成该步,点“OK”注意:“swap area” 即交换分区,建议大小是物理内存的1~2倍。(根据关于“Ubuntu手动分区”的多个相关文章一致得来)不需要太大,1G足以。25. 再次选中“free space”(同step 22图中),点击“Add”;注意下图中“Logical”,“Beginning”, “Ext4 ...”均为默认;注:大小选择也为默认,即所有的剩余空间;最后的“Mount point”下拉列表中,选中“/home”;完成该步,点“OK”注意:“/home” 存放普通用户的数据,是普通用户的宿主目录,建议大小为剩下的空间。(根据关于“Ubuntu手动分区”的多个相关文章一致得来)注:三个分区的顺序不要变,因为/home在最后便于默认选择“剩余的空间”,避免手工分配。26. 至此,所有分区工作已经完成,如下图所示。注:假如不满意可以点击“Revert(还原)”来重新分区,直到满意和准确无误为止。假如感到满意,点击“Install Now”注:上图为悲剧图,6G的/是不够的,这个图没有更新,仅供参考,不比看数字。27. 选择你所在的时区,自动调整时间,夏令时什么的手动调不方便,之后都点击“Continue”以继续28. 键盘选择US,一般国内买的电脑都是这样的,可根据情况自己选择29. Ubuntu的个人设置,根据自己需要填写用户名密码等30. 最后安装完成,点击“Restart Now”重启Ubuntu即可31. 停止在如下画面,按“回车”即可至此,全部安装过程完毕,我们可以进入到Ubuntu 12.04的桌面工作了。一定要注意:由于未使用自动安装,所以现在我们的虚拟机不含有VM Tools,导致无法全屏虚拟机等等问题,需要安装VM tools,详情请搜索即可。
- 苹果 M3 Ultra 芯片规格曝光:最高 32 核 CPU、80 核 GPU
- 五分钟技术趣谈 | RISC-V对于国产芯片产业发展的意义
- 数据中心现代化:平衡收益与不断增加的成本
- 电脑显示屏调整大小比例的步骤(简单易学的调整方法让您的显示屏更舒适)
- 微软打造“小芯片云”架构,欲大幅降低LLM实现成本
- Arm招股书高度重视RISC-V竞争风险 谷歌三星高通等都已做两手准备
- JVM 内存大对象监控和优化实践
- 天马AMOLED屏幕如何提升视觉体验?(探索AMOLED屏幕的关键优势和技术突破)