前言

京东物流极速的购物体验背后隐藏着怎样的秘诀?仓储和配送时效是其中最为关键的一环。京东物流超强仓配体系,特别是在电商行业中独有的仓储系统,在其中起到了决定性的作用。

当前京东的库房已经遍布全国,京东仓储管理系统(简称WMS系统)是最核心的生产系统,涵盖了从入库,复核,打包,出库、库存和报表等等环节。

而作为系统最后端的数据库,不仅仅承担着存储数据的任务,还是系统可用性的最后一道防线,如何保证仓储系统数据库的高性能和高可用,直接决定了库房生产是否能顺畅进行。

在本篇我们将会详细介绍京东物流仓储系统的数据库架构,以及如何通过运维自动化平台、性能优化、故障自愈和数据结转等步骤进行数据库运维架构的演进。

一、数据库架构

仓储系统的数据库架构,主要分为两种模式,一种是本地模式,一种是集中模式:

1.1   本地模式

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

1.2   集中模式

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

以上是京东仓储系统数据库的两种主要部署模式,目前主要是园区部署模式,也就是一个或多个库房园区共用一个集群(属于本地模式的一种)。

但是随着业务规模的增长,全国各地库房建设日益增多,数据量也与日倍增,而对系统的高性能和高可用的要求却越来越高,如何在现有架构模式下,还能保障系统的高效稳定运行,故障及时恢复,都对仓储系统的运维带来极大的挑战。

以下章节就详细阐述一下我们是如何应对这些挑战的。

二、UDBA运维自动化平台

工欲善其事必先利其器,想要做好大规模系统的运维管理,一定需要有自动化的运维平台作为支持,同时也为了提高工作效率,减少和研发的沟通成本,库房运维DBA开发了UDBA数据库自动化运维平台。该平台除了是DBA日常自动化运维的操作平台,还为WMS研发、运营人员提供了日常所需的技术支持和信息查询。

UDBA数据库自动化运维平台的主要功能模块如下所示:

三、性能优化

由于仓储业务逻辑复杂,并且系统是从早期的SQLServer迁移到MySQL的,对数据库是强依赖的关系。很多业务场景尤其WMS5的报表业务会涉及很多超大表(单表数据量超过1千万行)的关联,且查询条件根据现场工作人员需求进行组合修改,再加上部分表设计不合理以及查询SQL语法不规范等问题,给数据库优化带来极大挑战。

我们主要通过以下方式来保证数据高性能:

  • 实时监控数据库性能,针对突发性数据库出现性能问题及时进行故障排查和故障恢复,保证业务生产正常进行。

  • 每天对MySQL慢日志进行分析汇总后邮件抄送给相关研发同事,配合研发同事一起进行数据库优化。

  • 周期性对数据库进行巡检,检查数据库运行状态,对压力较大的数据库进行重点分析优化。

  • 定期对研发同事尤其新入职同事进行SQL培训,主要针对MySQL语法规范、MySQL表设计、MySQL查询优化等方面,提升研发同事的数据库设计能力和SQL编写能力,在开发过程中提前规避常见的性能问题。

  • 将优化过程中遇到的问题归纳分析整理,帮助研发同事认识性能问题后的本质原因,避免重复出现相同故障。

  • 积极与研发同事沟通学习,深入了解业务以便更好地从业务角度对数据库进行优化。

在一次服务器巡检中,我们使用SHOW ENGINE INNODB STATUS查看MySQL服务器运行状态时,发现该数据库存在死锁问题,通过多次排查,发现死锁发生频率较高,由于死锁告警信息中的事务信息不全,我们第一时间联系相关业务人员,了解相关业务实现逻辑,该业务通过程序来保证数据唯一性,采用“先尝试更新,后尝试插入”的事务顺序来操作,在详细了解业务逻辑后,通过模拟测试帮助研发同事认识到该死锁的核心原因,并在此基础上提供改进建议,最后将该问题优化方案整理成文档抄送给更多研发同事。

四、故障自愈

仓储数据库故障自愈系统主要解决两个问题,一个是故障的自动切换,一个是组件的自动恢复。系统功能图如下所示:

首先硬件作为应用系统的底层基础设施,一旦出现故障将大大降低系统的可用性,仓储业务的数据库集群分散在全国各地几百个库房,数据库服务如何在遇到硬件等异常时快速的故障转移,如何能降低各地网络等外界环境对数据库的性能影响?

其次系统在日常运行中,因为Bug或者其他原因,可能会导致数据库宕机,从库复制进程中断,复制延迟过大等等问题,如何快速解决这些问题,也成为服务质量优良的关键衡量标准。

基于以上这些考虑和实际需求,我们结合基础信息系统,监控系统,以及业界成熟的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和内存配置更高的服务器,提升数据库高性能和高可用性,为库房顺利且高效生产提供有力保障。

为避免数据库升级扩容影响现有生产,我们将所有风险操作安排到半夜库房停产运行,将升级过程进行拆分细化,对每个升级环节进行评估论证,编写大量升级工具和检查脚本来提升升级效率和降低误操作风险,并积极配合研发同事进行测试验证,努力将升级扩容带来的负面影响降到最低,保障库房正常生产。

京东物流仓储系统618大促保障背后的运维秘诀相关推荐

  1. 大促下的智能运维挑战:阿里如何抗住“双11猫晚”?

    作者 | 阿里文娱技术专家子霖 出品 | AI科技大本营(ID:rgznai100) 2019 双 11 猫晚在全球近 190 个国家和地区播出,海外重保是首要任务,如何提升海外用户观看猫晚的体验?本 ...

  2. 【恩墨学院】京东618大促网关承载十亿调用量背后的架构实践

    京东618大促网关承载十亿调用量背后的架构实践 王栋 京东618大促,其网关承载了几十亿的流量和调用,在这种情况下,网关系统必须保证整个系统的稳定性和高可用,保证高性能和可靠,以支撑业务.他们面临的是 ...

  3. 迎战618大促 京东技术大“阅兵”

    又到一年618,再次迎来"剁手"狂欢. 自2003年京东推出"618"年中大促活动起,至今已经是第14个年头,而在大家享受便利.快捷.智能.个性化购物体验的背后 ...

  4. 解密京东618大促数据库运维的攻守之道

    来自:DBAplus社群 本文根据高新刚老师在[2019 DAMS中国数据智能管理峰会]现场演讲内容整理而成. 讲师介绍 高新刚,京东数科数据库团队负责人,负责京东数科数据库平台的管理维护工作,带领团 ...

  5. 618 大促背后的淘系前端技术体系

    简介:2020年618大促已经过去,作为淘系每年重要的大促活动,淘系前端在其中扮演着什么样的角色,如何保证大促的平稳进行?又在其中应用了哪些新技术? 淘系技术特此推出「618 系列|淘系前端技术分享」 ...

  6. 全栈出征,京东技术基石如何为“618”大促护航?

    6月18日24时,2020年的618大促落下帷幕,京东618大促期间累计下单金额达到2692亿元,创下新纪录. 与往年不同,今年618是京东核心业务全面上云的第一年,也是京东融合人工智能.云计算.物联 ...

  7. java压测请求线程数_程序员撕开京东 618 大促压测的另一面 | 原力计划

    作者 | 天涯泪小武 责编 | 王晓曼 出品 | CSDN博客 前天618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了几千台服务器,每秒大概接收几千个k ...

  8. 程序员撕开京东 618 大促压测的另一面 | 原力计划

    作者 | 天涯泪小武 责编 | 王晓曼 出品 | CSDN博客 前天618大促演练进行了全链路压测,在此之前刚好我的热key探测框架也已经上线灰度一周了,小范围上线了几千台服务器,每秒大概接收几千个k ...

  9. 免费下载电子书!618大促背后前端代码如何智能生成?

    简介: 你关心玩法,我关心技术!作为淘系每年重要的大促活动 618 是如何保证平稳进行的?七大章节全方位展示 618 中的前端身影!另附 6000+ 字图文版前端学习秘籍和面试官直达简历投递地址,还不 ...

最新文章

  1. php5.3.3下安装ffmpeg
  2. 52 介绍几个重要的类
  3. CVPR 2021 | 自适应激活函数ACON:统一ReLU和Swish的新范式
  4. servlet mysql 分页_Java基础94 分页查询(以MySQL数据库为例,Servlet技术)
  5. lisp将图元追加选择_AutoLISP入门7 - 图元资料的取得与活用技巧(二)
  6. java从Swagger Api接口获取数据工具类
  7. 七个非常好用的黑科技APP,免费/小众/超实用,一次性全给你
  8. 高创CDHD伺服驱动器调试软件ServoStudioSetup V2.18版本与技术资料
  9. 推荐一款开源的加解密算法 --- XXTEA
  10. QQxml红包跳转群代码
  11. excel2013超链接进不去,提示“您的组织策略不允许...”
  12. 小鹿爬虫系列——静态网站页面爬取
  13. python 乒乓球_python使用pygame实现笑脸乒乓球弹珠球游戏
  14. stm8L-----ADC获取芯片内部参考电压
  15. VMware workstation的三种网络模式
  16. 痞子衡职场经验与感悟分享 - 索引
  17. macbook上好用的解压软件_苹果电脑有什么好用的解压软件?推荐 Mac OSX 下最方便实用的六款解压缩软件...
  18. java find()_java 之 find 命令
  19. 关于使用listFile()遍历文件夹报空指针异常的问题
  20. kali翻译插件_Kali优化之安装翻译工具goldendict及使用方法

热门文章

  1. java 入门测试代码(二)
  2. python读取excel文件
  3. map,set用pari作为key值,如何定义
  4. 利用Flask写了一个代理IP提取接口,并附上电影下载站点刷分程序用于测试代理IP可用性
  5. JetSonNano入门和人脸识别
  6. 做一个自动回复机器人
  7. 发那科数控系统采集网关WTGNet-FANUC
  8. 解决---设备“VMnet0”上的网桥没有运行。该虚拟机无法与此主机或网络上的其他主机进行通信。 无法连接虚拟设备“Ethernet0”。
  9. 【红外技术】客户的问题:在我的应用中,到底是选择中波红外还是长波红外波段?(来自英国高级技术咨询业界巨头的权威回答)
  10. java socket通信的简要举例