【案例】美團即時物流的分布式系統(tǒng)架構(gòu)設(shè)計

高效開發(fā)運維
宋斌
遇到節(jié)假日或者惡劣天氣,訂單聚集效應(yīng),流量高峰是平常的十幾倍。物流履約是線上連接線下的關(guān)鍵環(huán)節(jié),故障容忍度極低,不能宕機,不能丟單,可用性要求極高。數(shù)據(jù)實時性、準確性要求高,對延遲、異常非常敏感。

即時物流看似簡單,表面看僅僅是物流最原始的配送模式,即:點對點配送。但是,在互聯(lián)網(wǎng)成為基礎(chǔ)設(shè)施的今天,大數(shù)據(jù)、云計算、物聯(lián)網(wǎng)等先進技術(shù)都在即時物流配送體系中得到應(yīng)用,數(shù)據(jù)驅(qū)動,智能調(diào)撥已經(jīng)成為即時物流的核心競爭力。我在篇中提出:如果即時物流與上游的傳統(tǒng)物流體系和智慧供應(yīng)鏈對接,將打通傳統(tǒng)物流配送最難的末端網(wǎng)絡(luò),推動智慧供應(yīng)鏈向智慧供應(yīng)網(wǎng)變革,即時物流的小趨勢將推動智慧物流大趨勢發(fā)展。美團即時物流系統(tǒng)在國內(nèi)居于領(lǐng)先地位,美團的即時物流的大腦是如何建設(shè)的?美團外賣的即時物流分布式高并發(fā)系統(tǒng)是如何建設(shè)的?

背景

美團外賣已經(jīng)發(fā)展了五年,即時物流探索也經(jīng)歷了 3 年多的時間,業(yè)務(wù)從零孵化到初具規(guī)模,在整個過程中積累了一些分布式高并發(fā)系統(tǒng)的建設(shè)經(jīng)驗。最主要的收獲包括兩點:

即時物流業(yè)務(wù)對故障和高延遲的容忍度極低,在業(yè)務(wù)復(fù)雜度提升的同時也要求系統(tǒng)具備分布式、可擴展、可容災(zāi)的能力。即時物流系統(tǒng)階段性的逐步實施分布式系統(tǒng)的架構(gòu)升級,最終解決了系統(tǒng)宕機的風(fēng)險。

圍繞成本、效率、體驗核心三要素,即時物流體系大量結(jié)合 AI 技術(shù),從定價、ETA、調(diào)度、運力規(guī)劃、運力干預(yù)、補貼、核算、語音交互、LBS 挖掘、業(yè)務(wù)運維、指標監(jiān)控等方面,業(yè)務(wù)突破結(jié)合架構(gòu)升級,達到促規(guī)模、保體驗、降成本的效果。

本文主要介紹在美團即時物流分布式系統(tǒng)架構(gòu)逐層演變的進展中,遇到的技術(shù)障礙和挑戰(zhàn):訂單、騎手規(guī)模大,供需匹配過程的超大規(guī)模計算問題。

遇到節(jié)假日或者惡劣天氣,訂單聚集效應(yīng),流量高峰是平常的十幾倍。物流履約是線上連接線下的關(guān)鍵環(huán)節(jié),故障容忍度極低,不能宕機,不能丟單,可用性要求極高。數(shù)據(jù)實時性、準確性要求高,對延遲、異常非常敏感。

美團即時物流架構(gòu)

美團即時物流配送平臺主要圍繞三件事展開:一是面向用戶提供履約的 SLA,包括計算送達時間 ETA、配送費定價等;二是在多目標(成本、效率、體驗)優(yōu)化的背景下,匹配最合適的騎手;三是提供騎手完整履約過程中的輔助決策,包括智能語音、路徑推薦、到店提醒等。

在一系列服務(wù)背后,是美團強大的技術(shù)體系的支持,并由此沉淀出的配送業(yè)務(wù)架構(gòu)體系,基于架構(gòu)構(gòu)建的平臺、算法、系統(tǒng)和服務(wù)。龐大的物流系統(tǒng)背后離不開分布式系統(tǒng)架構(gòu)的支撐,而且這個架構(gòu)更要保證高可用和高并發(fā)。

分布式架構(gòu),是相對于集中式架構(gòu)而言的一種架構(gòu)體系。分布式架構(gòu)適用 CAP 理論(Consistency 一致性,Availability 可用性,Partition Tolerance 分區(qū)容忍性)。在分布式架構(gòu)中,一個服務(wù)部署在多個對等節(jié)點中,節(jié)點之間通過網(wǎng)絡(luò)進行通信,多個節(jié)點共同組成服務(wù)集群來提供高可用、一致性的服務(wù)。

早期,美團按照業(yè)務(wù)領(lǐng)域劃分成多個垂直服務(wù)架構(gòu);隨著業(yè)務(wù)的發(fā)展,從可用性的角度考慮做了分層服務(wù)架構(gòu)。后來,業(yè)務(wù)發(fā)展越發(fā)復(fù)雜,從運維、質(zhì)量等多個角度考量后,逐步演進到微服務(wù)架構(gòu)。這里主要遵循了兩個原則:不宜過早的進入到微服務(wù)架構(gòu)的設(shè)計中,好的架構(gòu)是演進出來的不是提前設(shè)計出來的。

分布式系統(tǒng)實踐

上圖是比較典型的美團技術(shù)體系下的分布式系統(tǒng)結(jié)構(gòu):依托了美團公共組件和服務(wù),完成了分區(qū)擴容、容災(zāi)和監(jiān)控的能力。前端流量會通過 HLB 來分發(fā)和負載均衡;在分區(qū)內(nèi),服務(wù)與服務(wù)會通過 OCTO 進行通信,提供服務(wù)注冊、自動發(fā)現(xiàn)、負載均衡、容錯、灰度發(fā)布等等服務(wù)。當(dāng)然也可以通過消息隊列進行通信,例如 Kafka、RabbitMQ。在存儲層使用 Zebra 來訪問分布式數(shù)據(jù)庫進行讀寫操作。利用 CAT(美團開源的分布式監(jiān)控系統(tǒng))進行分布式業(yè)務(wù)及系統(tǒng)日志的采集、上報和監(jiān)控。分布式緩存使用 Squirrel+Cellar 的組合。分布式任務(wù)調(diào)度則是通過 Crane。

在實踐過程還要解決幾個問題,比較典型的是集群的擴展性,有狀態(tài)的集群可擴展性相對較差,無法快速擴容機器,無法緩解流量壓力。同時,也會出現(xiàn)節(jié)點熱點的問題,包括資源不均勻、CPU 使用不均勻等等。

首先,配送后臺技術(shù)團隊通過架構(gòu)升級,將有狀態(tài)節(jié)點變成無狀態(tài)節(jié)點,通過并行計算的能力,讓小的業(yè)務(wù)節(jié)點去分擔(dān)計算壓力,以此實現(xiàn)快速擴容。

第二是要解決一致性的問題,對于既要寫 DB 也要寫緩存的場景,業(yè)務(wù)寫緩存無法保障數(shù)據(jù)一致性,美團內(nèi)部主要通過 Databus 來解決,Databus 是一個高可用、低延時、高并發(fā)、保證數(shù)據(jù)一致性的數(shù)據(jù)庫變更實時傳輸系統(tǒng)。通過 Databus 上游可以監(jiān)控業(yè)務(wù) Binlog 變更,通過管道將變更信息傳遞給 ES 和其他 DB,或者是其他 KV 系統(tǒng),利用 Databus 的高可用特性來保證數(shù)據(jù)最終是可以同步到其他系統(tǒng)中。

第三是我們一直在花精力解決的事情,就是保障集群高可用,主要從三個方面來入手,事前較多的是做全鏈路壓測評,估峰值容量;周期性的集群健康性檢查;隨機故障演練(服務(wù)、機器、組件)。事中做異常報警(性能、業(yè)務(wù)指標、可用性);快速的故障定位(單機故障、集群故障、IDC 故障、組件異常、服務(wù)異常);故障前后的系統(tǒng)變更收集。事后重點做系統(tǒng)回滾;擴容、限流、熔斷、降級;核武器兜底。

單 IDC 的快速部署 & 容災(zāi)

單 IDC 故障之后,入口服務(wù)做到故障識別,自動流量切換;單 IDC 的快速擴容,數(shù)據(jù)提前同步,服務(wù)提前部署,Ready 之后打開入口流量;要求所有做數(shù)據(jù)同步、流量分發(fā)的服務(wù),都具備自動故障檢測、故障服務(wù)自動摘除;按照 IDC 為單位擴縮容的能力。

多中心嘗試

美團 IDC 以分區(qū)為單位,存在資源滿排,分區(qū)無法擴容。美團的方案是多個 IDC 組成虛擬中心,以中心為分區(qū)的單位;服務(wù)無差別的部署在中心內(nèi);中心容量不夠,直接增加新的 IDC 來擴容容量。

單元化嘗試

相比多中心來說,單元化是進行分區(qū)容災(zāi)和擴容的更優(yōu)方案。關(guān)于流量路由,美團主要是根據(jù)業(yè)務(wù)特點,采用區(qū)域或城市進行路由。數(shù)據(jù)同步上,異地會出現(xiàn)延遲狀況。SET 容災(zāi)上要保證同本地或異地 SET 出現(xiàn)問題時,可以快速把 SET 切換到其他 SET 上來承擔(dān)流量。

智能物流的核心技術(shù)能力和平臺沉淀

機器學(xué)習(xí)平臺,是一站式線下到線上的模型訓(xùn)練和算法應(yīng)用平臺。之所以構(gòu)建這個平臺,目的是要解決算法應(yīng)用場景多,重復(fù)造輪子的矛盾問題,以及線上、線下數(shù)據(jù)質(zhì)量不一致。如果流程不明確不連貫,會出現(xiàn)迭代效率低,特征、模型的應(yīng)用上線部署出現(xiàn)數(shù)據(jù)質(zhì)量等障礙問題。

JARVIS 是一個以穩(wěn)定性保障為目標的智能化業(yè)務(wù)運維 AIOps 平臺。主要用于處理系統(tǒng)故障時報警源很多,會有大量的重復(fù)報警,有效信息很容易被淹沒等各種問題。此外,過往小規(guī)模分布式集群的運維故障主要靠人和經(jīng)驗來分析和定位,效率低下,處理速度慢,每次故障處理得到的預(yù)期不穩(wěn)定,在有效性和及時性方面無法保證。所以需要 AIOps 平臺來解決這些問題。

未來的挑戰(zhàn)

經(jīng)過復(fù)盤和 Review 之后,我們發(fā)現(xiàn)未來的挑戰(zhàn)很大,微服務(wù)不再“微”了,業(yè)務(wù)復(fù)雜度提升之后,服務(wù)就會變得膨脹。其次,網(wǎng)狀結(jié)構(gòu)的服務(wù)集群,任何輕微的延遲,都可能導(dǎo)致的網(wǎng)絡(luò)放大效應(yīng)。另外復(fù)雜的服務(wù)拓撲,如何做到故障的快速定位和處理,這也是 AIOps 需要重點解決的難題。最后,就是單元化之后,從集群為單位的運維到以單元為單位的運維,也給美團業(yè)務(wù)部署能力帶來很大的挑戰(zhàn)。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論