前言京东物流极速购物体验背后的秘诀是什么?仓储和配送时效是最关键的环节。京东物流的超级仓配体系,尤其是电商行业独有的仓储体系,在其中起到了举足轻重的作用。目前,京东的仓库已经遍布全国。京东仓储管理系统(简称WMS系统)是核心生产系统,涵盖了入库、审核、包装、发货、盘点、报表等各个环节。作为系统的最后一端数据库,它不仅承担着存储数据的任务,也是系统可用性的最后一道防线。如何保证存储系统数据库的高性能和高可用,直接决定着仓库生产能否顺利进行。在本文中,我们将详细介绍京东物流仓储系统的数据库架构,以及如何通过运维自动化平台、性能优化、故障自愈、数据结转等方式演进数据库运维架构。一、数据库架构存储系统的数据库架构主要分为两种模式,一种是本地模式,一种是集中模式:1.本地模式本地模式是指当前WMS的应用和数据库服务器系统部署在本地仓库,目的是减少网络延迟,提高运营效率。缺点是机房电力和网络环境稍差,运维难度较大。部署架构图如下:2.集中式模式集中式模式是指在IDC机房部署一套WMS系统,多个区域的园区或仓库通过专线网络接入。优点是减少了资源部署,结构更合理,便于运维管理,缺点是部分地区网络延迟高,一旦IDC出现故障,影响范围更广。部署架构图如下:以上是京东存储系统数据库的两种主要部署模式。目前主要是园区部署模式,即一个或多个仓库园区共享一个集群(本地模式的一种)。但是,随着业务规模的增长,全国各地的仓库建设日益增多,数据量也与日俱增。但是,对系统的高性能和高可用性的要求越来越高。如何保证系统的高效稳定运行和故障的及时恢复,都对存储系统的运维提出了极大的挑战。以下各节详细说明了我们如何应对这些挑战。2、UDBA运维自动化平台要想做好,必先利其器。要想做好大型系统的运维管理工作,就必须要有自动化运维平台作为支撑。同时,为了提高工作效率,降低与研发的沟通成本,仓库运维DBA开发了UDBA数据库自动化运维平台。该平台除了作为DBA日常自动化运维的操作平台外,还为WMS研发和运维人员提供日常的技术支持和信息查询。UDBA数据库自动化运维平台主要功能模块如下:3.性能优化由于存储业务逻辑复杂,且系统从早期的SQLServer迁移到MySQL,强烈依赖于数据库。很多业务场景,尤其是WMS5的报表业务,会涉及到很多大表的关联(单表数据量超过千万行),查询条件根据现场人员的需要进行组合修改,以及一些表设计不合理、查询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可以带来非常棒的性能改进,完善和改进了多项高可用和可维护性功能,可以帮助DBA更好地管理MySQL数据库。升级MySQL5.7可以带来以下优势:性能提升。根据官方测试报告,MySQL5.7在高并发环境下的处理能力是MySQL5.5的数十倍。高可用,MySQL5.7版本引入了多线程复制和基于AfterSync模式的半同步复制特性,可以有效降低主从复制延迟,提高数据安全性。可维护性,MySQL5.7版本引入了GTID复制、OnlineDDL以及新的系统视图和管理功能等,大大提高了数据库的可维护性,降低了DBA运维风险和管理难度。由于仓库数据库服务器长期运行在恶劣的机房环境中,在此过程中,会出现RAID卡断电、服务器硬件老化、过保等问题,导致性能老旧服务器恶化。因此,DBA厌倦了处理服务器停机或服务器硬件导致的性能瓶颈等各种事件。因此,在升级MySQL版本的同时,我们也优先对业务操作频繁的重点仓库进行升级扩容,使用IO性能更好的SSD硬盘和CPU、内存配置更高的服务器,以提高数据库性能和可用性,为顺畅高效的仓储生产提供有力支持。保证。为了避免数据库升级扩容对现有生产的影响,我们将所有风险操作安排到半夜关库,将升级流程拆分细化,对每个升级环节进行评估论证,并编写了大量的升级工具和检测脚本,提高升级效率,降低误操作风险,并积极配合研发同事进行测试验证,力求将升级扩容的负面影响降到最低,确保正常生产仓库。【本文来自专栏作者张凯涛微信公众号(凯涛的博客)公众号id:kaitao-1234567】点此查看作者更多好文
