京东物流极速购物体验背后隐藏着怎样的秘密?入库和发货的及时性是最关键的部分。京东物流的超级仓配体系,尤其是电商行业独有的仓储体系,在其中起到了举足轻重的作用。目前,京东的仓库已经遍布全国。京东的仓储管理系统(简称WMS系统)是核心生产系统,涵盖了从入库、审核、包装、发货、盘点、报表等各个环节。作为系统的最后一端数据库,它不仅承担着存储数据的任务,也是系统可用性的最后一道防线。如何保证存储系统数据库的高性能和高可用,直接决定着仓库生产能否顺利进行。在本文中,我们将详细介绍京东物流仓储系统的数据库架构,以及如何通过运维自动化平台、性能优化、故障自愈、数据结转等方式演进数据库运维架构。1、数据库架构存储系统的数据库架构主要分为两种模式,一种是本地模式,一种是集中模式:1.1本地模式本地模式是指部署当前WMS系统应用和数据库服务器在本地仓库中。目的是减少网络延迟,提高运行效率。缺点是机房电力和网络环境稍差,运维难度较大。部署架构图如下:1.2集中模式集中模式是指在IDC机房部署一套WMS系统,多个区域的园区或仓库通过专线网络接入。优点是减少资源部署,结构更合理,便于运维管理。缺点是部分地区网络延迟高,一旦IDC出现故障,影响面会更大。部署架构图如下:以上是京东仓库系统数据库的两种主要部署模式。目前主要是园区部署模式,即一个或多个仓库园区共享一个集群(本地模式的一种)。但是,随着业务规模的增长,全国各地的仓库建设日益增多,数据量也与日俱增。但是,对系统的高性能和高可用性的要求越来越高。如何保证系统的高效稳定运行和故障的及时恢复,都对存储系统的运维提出了极大的挑战。以下各节详细说明了我们如何应对这些挑战。2、想要做好UDBA运维自动化平台,必先利其器。要想做好大型系统的运维管理工作,就必须要有自动化运维平台作为支撑。同时,为了提高工作效率,降低与研发的沟通成本,仓库运维DBA开发了UDBA数据库自动化运维平台。该平台除了作为DBA日常自动化运维的操作平台外,还为WMS研发和运维人员提供日常技术支持和信息查询。UDBA数据库自动化运维平台主要功能模块如下:三、性能优化由于仓储业务逻辑复杂,系统从早期的SQLServer迁移到MySQL,对数据库的依赖性很强.很多业务场景,尤其是WMS5的报表业务,会涉及到很多超大表的关联(单表数据量超过1000万行),查询条件根据on-现场工作人员,以及部分表设计不合理、查询SQL语法不规范等问题,给数据库优化带来很大挑战。我们主要通过以下方式保证数据的高性能:实时监控数据库性能,对突发的数据库性能问题及时进行故障排除和恢复,确保业务正常生产。每天对MySQL慢日志进行分析总结后,发邮件给相关研发同事,配合研发同事优化数据库。定期巡检数据库,检查数据库运行情况,重点分析和优化压力大的数据库。定期对研发同事特别是新入职的人员进行SQL培训,主要集中在MySQL语法规范、MySQL表设计、MySQL查询优化等方面,提高研发同事的数据库设计能力和SQL编写能力,避免常见的性能问题在开发过程中提前。对优化过程中遇到的问题进行总结、分析和整理,帮助研发同仁了解性能问题的本质原因,避免同样的故障重演。积极与研发同事交流学习,深入了解业务,以便更好地从业务角度优化数据库。在一次服务器巡检中,当我们使用SHOWENGINEINNODBSTATUS查看MySQL服务器的运行状态时,发现数据库出现了死锁问题。经过多方排查,我们发现死锁出现的频率比较高。由于死锁告警信息中的事务信息不完整,我们第一时间联系了相关业务人员,了解相关业务实现逻辑。该业务使用流程保证数据唯一性,采用“先尝试更新,再尝试插入”的事务顺序。详细了解业务逻辑后,通过模拟测试帮助研发同事认识到死锁的核心原因,并在此基础上提出改进建议,最后将问题优化方案整理成文档,复制给更多的研发同事。4、故障自愈存储数据库故障自愈系统主要解决两个问题,一是故障的自动切换,二是组件的自动恢复。系统功能图如下:首先,硬件是应用系统的底层基础设施。一旦发生故障,系统的可用性将大大降低。仓储业务的数据库集群分散在全国数百个仓库中。数据库服务遇到硬件等异常怎么办?如何降低各地网络等外部环境对数据库性能的影响?其次,在系统的日常运行中,由于bug或者其他原因,可能会导致数据库宕机,从数据库复制过程中断,复制延迟过大等,如何快速解决这些问题有成为衡量优质服务的重要指标。基于以上考虑和实际需求,我们结合基础信息系统、监控系统和业界成熟的MHA高可用方案,实现故障自动切换。当数据库主从数据库遇到异常时,可以自动平滑切换,保证数据库服务的连续性,当服务器有维护需求时,提供手动切换管理,更方便硬件维护。同时基于UDBA数据库自动化运维平台,自动检测所有MySQL集群的复制状态,自动识别高延迟实例,通过修改innodb_flush_log_at_trx_commit和sync_binlog的flush策略参数快速恢复。一旦复制正常,参数会自动调整为标准值,复制的IO线程或SQL线程异常停止,也可以自动启动。以上处理结果将以短信、微信、邮件等形式通知值班同事。处理过程也可以在UDBA自动化运维平台上进行查询,方便对failover做进一步的分析和统计。5、数据结转仓库数据具有时效性强、生命周期短的特点。对于数据量大、操作频繁的业务表,如果不对历史数据进行归档,将会出现严重的性能问题和磁盘存储瓶颈。因此,我们采用生产库保留三个月+报表库保留一年的归档策略,即删除生产库上三个月以上的“历史数据”,结转生产库上的“历史数据”一年以上的报表库到IDC机房保存。在引入自动化结转平台之前,DBA需要在每台服务器上手动部署结转程序。当结转情况发生变化时,需要通过命令行批量更新每组服务器的配置信息。DBA无法准确掌握服务器的携带,运维难度大,误操作风险高。针对仓库数据结转的各种痛点,在结转流程抽象分析的基础上,开发了自动化结转平台。其架构如下:自动化优化平台具有以下优势:调度作业集中管理,无需DBA到每台服务器代理作业部署在平台上,结转平台自动推送调度作业到仓库服务器根据调度配置运行,并可根据业务需要方便地调整调度时间、结转条件、结转服务器。动态扩展历史数据库。京东率先推出新一代分布式关系数据库CockroachDB作为历史归档服务器。支持高并发密集写操作,可以根据需要动态扩展集群,可以动态适配报表数据库上的表。结构变化。数据责任分离。DBA作为数据库管理员而不是数据管理员,可以提供数据库服务器相关信息,但不能定义数据携带条件。自动结转平台在权限控制的基础上,为数据管理提供结转条件的管理界面,明确职责权限。实时掌握结转调度信息,自动结转平台提供丰富的报表和管理界面,帮助DBA轻松掌握当前结转调度信息和历史结转情况。6.升级扩容由于各种历史原因,目前仓库数据库仍然主要使用2011年发布的MySQL5.5版本,随着MySQL5.7版本的逐步稳定,我们通过仔细的测试和评估发现,MySQL5.7可以带来很好的性能improvements,完善和改进了很多高可用和可维护性的功能,可以帮助DBA更好的管理MySQL数据库。升级MySQL5.7可以带来以下优势:性能提升。根据官方测试报告,MySQL5.7在高并发环境下的处理能力是MySQL5.5的数十倍。高可用,MySQL5.7版本引入了多线程复制和基于AfterSync模式的半同步复制特性,可以有效降低主从复制延迟,提高数据安全性。可维护性,MySQL5.7版本引入了GTID复制、OnlineDDL以及新的系统视图和管理功能等,大大提高了数据库的可维护性,降低了DBA运维风险和管理难度。由于仓库数据库服务器长期运行在恶劣的机房环境中,在此过程中会出现RAID卡掉电、服务器硬件老化、过保等问题,导致性能下降旧服务器性能恶化,导致DBA厌倦处理服务器宕机或服务器硬件造成性能瓶颈等各种事件,所以升级MySQL版本的同时,我们也优先升级扩容重点仓库与频繁的业务操作,采用IO性能更好的SSD硬盘和CPU和内存配置更高的服务器,提升数据库性能和可用性,为顺畅高效的仓库生产提供有力支持。保证。为了避免数据库升级扩容对现有生产的影响,我们将所有风险操作安排到半夜关库,将升级流程拆分细化,对每个升级环节进行评估论证,并编写了大量的升级工具和检测脚本,提高升级效率,降低误操作风险,并积极配合研发同事进行测试验证,力求将升级扩容的负面影响降到最低,确保正常生产仓库。
