京東物流倉儲系統在618大促保障背後的這6條運維祕訣!

前言:

在本篇我們將會詳細介紹京東物流倉儲系統的數據庫架構,以及如何通過運維自動化平臺、性能優化、故障自愈和數據結轉等步驟進行數據庫運維架構的演進。

京東物流極速的購物體驗背後隱藏著怎樣的秘訣?倉儲和配送時效是其中最為關鍵的一環。京東物流超強倉配體系,特別是在電商行業中獨有的倉儲系統,在其中起到了決定性的作用。

當前京東的庫房已經遍佈全國,京東倉儲管理系統(簡稱 WMS 系統)是最核心的生產系統,涵蓋了從入庫,複核,打包,出庫、庫存和報表等等環節。

而作為系統最後端的數據庫,不僅僅承擔著存儲數據的任務,還是系統可用性的最後一道防線,如何保證倉儲系統數據庫的高性能和高可用,直接決定了庫房生產是否能順暢進行。

在本篇我們將會詳細介紹京東物流倉儲系統的數據庫架構,以及如何通過運維自動化平臺、性能優化、故障自愈和數據結轉等步驟進行數據庫運維架構的演進。

一、數據庫架構

倉儲系統的數據庫架構,主要分為兩種模式,一種是本地模式,一種是集中模式:

1.1 本地模式

本地模式是指當前 WMS 系統的應用和數據庫服務器都部署在本地庫房,目的是減少網絡延遲,提高作業效率。缺點是機房的電力和網絡環境略差,運維難度較高。部署架構圖如下:

京東物流倉儲系統在618大促保障背後的這6條運維秘訣!

1.2 集中模式

集中模式是指在 IDC 機房部署一套 WMS 系統,多個區域的園區或庫房都通過網絡專線訪問,優點是減少資源部署,架構更為合理,便於運維管理,缺點是部分區域網絡延遲較高,一旦 IDC 發生故障影響範圍較廣。部署架構圖如下:

京東物流倉儲系統在618大促保障背後的這6條運維秘訣!

以上是京東倉儲系統數據庫的兩種主要部署模式,目前主要是園區部署模式,也就是一個或多個庫房園區共用一個集群(屬於本地模式的一種)。

但是隨著業務規模的增長,全國各地庫房建設日益增多,數據量也與日倍增,而對系統的高性能和高可用的要求卻越來越高,如何在現有架構模式下,還能保障系統的高效穩定運行,故障及時恢復,都對倉儲系統的運維帶來極大的挑戰。

以下章節就詳細闡述一下我們是如何應對這些挑戰的。

二、UDBA 運維自動化平臺

工欲善其事必先利其器,想要做好大規模系統的運維管理,一定需要有自動化的運維平臺作為支持,同時也為了提高工作效率,減少和研發的溝通成本,庫房運維 DBA 開發了 UDBA 數據庫自動化運維平臺。該平臺除了是 DBA 日常自動化運維的操作平臺,還為 WMS 研發、運營人員提供了日常所需的技術支持和信息查詢。

UDBA 數據庫自動化運維平臺的主要功能模塊如下所示:

京東物流倉儲系統在618大促保障背後的這6條運維秘訣!

三、性能優化

由於倉儲業務邏輯複雜,並且系統是從早期的 SQLServer 遷移到 MySQL 的,對數據庫是強依賴的關係。很多業務場景尤其 WMS5 的報表業務會涉及很多超大表 (單表數據量超過 1 千萬行) 的關聯,且查詢條件根據現場工作人員需求進行組合修改,再加上部分表設計不合理以及查詢 SQL 語法不規範等問題,給數據庫優化帶來極大挑戰。

我們主要通過以下方式來保證數據高性能:

  • 實時監控數據庫性能,針對突發性數據庫出現性能問題及時進行故障排查和故障恢復,保證業務生產正常進行。
  • 每天對 MySQL 慢日誌進行分析彙總後郵件抄送給相關研發同事,配合研發同事一起進行數據庫優化。
  • 週期性對數據庫進行巡檢,檢查數據庫運行狀態,對壓力較大的數據庫進行重點分析優化。
  • 定期對研發同事尤其新入職同事進行 SQL 培訓,主要針對 MySQL 語法規範、MySQL 表設計、MySQL 查詢優化等方面,提升研發同事的數據庫設計能力和 SQL 編寫能力,在開發過程中提前規避常見的性能問題。
  • 將優化過程中遇到的問題歸納分析整理,幫助研發同事認識性能問題後的本質原因,避免重複出現相同故障。
  • 積極與研發同事溝通學習,深入瞭解業務以便更好地從業務角度對數據庫進行優化。

在一次服務器巡檢中,我們使用 SHOW ENGINE INNODB STATUS 查看 MySQL 服務器運行狀態時,發現該數據庫存在死鎖問題,通過多次排查,發現死鎖發生頻率較高,由於死鎖告警信息中的事務信息不全,我們第一時間聯繫相關業務人員,瞭解相關業務實現邏輯,該業務通過程序來保證數據唯一性,採用 “先嚐試更新,後嘗試插入” 的事務順序來操作,在詳細瞭解業務邏輯後,通過模擬測試幫助研發同事認識到該死鎖的核心原因,並在此基礎上提供改進建議,最後將該問題優化方案整理成文檔抄送給更多研發同事。

四、故障自愈

倉儲數據庫故障自愈系統主要解決兩個問題,一個是故障的自動切換,一個是組件的自動恢復。系統功能圖如下所示:

京東物流倉儲系統在618大促保障背後的這6條運維秘訣!

首先硬件作為應用系統的底層基礎設施,一旦出現故障將大大降低系統的可用性,倉儲業務的數據庫集群分散在全國各地幾百個庫房,數據庫服務如何在遇到硬件等異常時快速的故障轉移,如何能降低各地網絡等外界環境對數據庫的性能影響?

其次系統在日常運行中,因為 Bug 或者其他原因,可能會導致數據庫宕機,從庫複製進程中斷,複製延遲過大等等問題,如何快速解決這些問題,也成為服務質量優良的關鍵衡量標準。

基於以上這些考慮和實際需求,我們結合基礎信息系統,監控系統,以及業界成熟的 MHA 高可用方案,實現了故障的自動切換,當數據庫主庫或者從庫遇到異常,能夠順利得進行自動切換,保障數據庫服務的持續性,當服務器有維護需求時,提供手動切換管理,更方便的進行硬件維護。

同時基於 UDBA 數據庫自動運維平臺,對全部 MySQL 群集複製情況進行自動探測,自動識別高延遲實例,並通過修改 innodb_flush_log_at_trx_commit 和 sync_binlog 的刷盤策略參數進行快速恢復,一旦複製正常,參數將自動調整為標準值,同時複製的 IO 線程或 SQL 線程異常停止,也可進行自動啟動。

五、數據結轉

庫房數據有時效性強和生命週期短的特點,對於數據量較大且操作頻繁的業務表,如果不進行歷史數據歸檔,會存在嚴重性能問題和磁盤存儲瓶頸,因此我們採用生產庫保留三月 + 報表庫保留一年的歸檔策略,對生產庫上超過三月” 歷史數據” 進行刪除,對報表庫上超過一年的 “歷史數據” 結轉到 IDC 機房進行存放。

在未引入自動化結轉平臺前,需要 DBA 手動在每套服務器上部署結轉程序,當結轉條件發生變化時需要通過命令行共計批量更新每套服務器上的配置信息,DBA 無法準確掌握每套服務器的結轉情況,導致運維難度高且存在較高的誤操作風險。

針對庫房數據結轉的各項痛點,在對結轉流程的抽象分析基礎上開發了自動化結轉平臺,其架構為:

京東物流倉儲系統在618大促保障背後的這6條運維秘訣!

自動化優化平臺有以下優點:

  • 調度作業集中管理,無需 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 和內存配置更高的服務器,提升數據庫高性能和高可用性,為庫房順利且高效生產提供有力保障。

為避免數據庫升級擴容影響現有生產,我們將所有風險操作安排到半夜庫房停產運行,將升級過程進行拆分細化,對每個升級環節進行評估論證,編寫大量升級工具和檢查腳本來提升升級效率和降低誤操作風險,並積極配合研發同事進行測試驗證,努力將升級擴容帶來的負面影響降到最低,保障庫房正常生產。

最後:

給大家分享資深架構師錄製的視頻:(有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構)等這些成為架構師必備的內容,還有阿里大牛直播講解技術!

京東物流倉儲系統在618大促保障背後的這6條運維秘訣!

後臺私信回覆 “ 架構 ” 就可以免費獲得這些視頻資料!


分享到:


相關文章: