背景
美團外賣已經發(fā)展了五年躲因,即時物流探索也經歷了 3 年多的時間淀衣,業(yè)務從零孵化到初具規(guī)模篱昔,在整個過程中積累了一些分布式高并發(fā)系統(tǒng)的建設經驗瑞妇。最主要的收獲包括兩點:
即時物流業(yè)務對故障和高延遲的容忍度極低,在業(yè)務復雜度提升的同時也要求系統(tǒng)具備分布式秉沼、可擴展桶雀、可容災的能力。即時物流系統(tǒng)階段性的逐步實施分布式系統(tǒng)的架構升級唬复,最終解決了系統(tǒng)宕機的風險矗积。
圍繞成本、效率敞咧、體驗核心三要素棘捣,即時物流體系大量結合 AI 技術,從定價休建、ETA乍恐、調度、運力規(guī)劃测砂、運力干預茵烈、補貼、核算砌些、語音交互呜投、LBS 挖掘、業(yè)務運維存璃、指標監(jiān)控等方面宙彪,業(yè)務突破結合架構升級,達到促規(guī)模有巧、保體驗、降成本的效果悲没。
本文主要介紹在美團即時物流分布式系統(tǒng)架構逐層演變的進展中篮迎,遇到的技術障礙和挑戰(zhàn):
訂單男图、騎手規(guī)模大,供需匹配過程的超大規(guī)模計算問題甜橱。
遇到節(jié)假日或者惡劣天氣逊笆,訂單聚集效應,流量高峰是平常的十幾倍岂傲。
物流履約是線上連接線下的關鍵環(huán)節(jié)难裆,故障容忍度極低,不能宕機镊掖,不能丟單乃戈,可用性要求極高。
數(shù)據(jù)實時性亩进、準確性要求高症虑,對延遲、異常非常敏感归薛。
美團即時物流架構
美團即時物流配送平臺主要圍繞三件事展開:一是面向用戶提供履約的 SLA谍憔,包括計算送達時間 ETA、配送費定價等主籍;二是在多目標(成本习贫、效率、體驗)優(yōu)化的背景下千元,匹配最合適的騎手苫昌;三是提供騎手完整履約過程中的輔助決策,包括智能語音诅炉、路徑推薦蜡歹、到店提醒等。
在一系列服務背后涕烧,是美團強大的技術體系的支持月而,并由此沉淀出的配送業(yè)務架構體系,基于架構構建的平臺议纯、算法父款、系統(tǒng)和服務。龐大的物流系統(tǒng)背后離不開分布式系統(tǒng)架構的支撐瞻凤,而且這個架構更要保證高可用和高并發(fā)憨攒。
分布式架構,是相對于集中式架構而言的一種架構體系阀参。分布式架構適用 CAP 理論(Consistency 一致性肝集,Availability 可用性,Partition Tolerance 分區(qū)容忍性)蛛壳。在分布式架構中杏瞻,一個服務部署在多個對等節(jié)點中所刀,節(jié)點之間通過網(wǎng)絡進行通信,多個節(jié)點共同組成服務集群來提供高可用捞挥、一致性的服務浮创。
早期,美團按照業(yè)務領域劃分成多個垂直服務架構砌函;隨著業(yè)務的發(fā)展斩披,從可用性的角度考慮做了分層服務架構。后來讹俊,業(yè)務發(fā)展越發(fā)復雜垦沉,從運維、質量等多個角度考量后劣像,逐步演進到微服務架構乡话。這里主要遵循了兩個原則:不宜過早的進入到微服務架構的設計中,好的架構是演進出來的不是提前設計出來的耳奕。
分布式系統(tǒng)實踐
上圖是比較典型的美團技術體系下的分布式系統(tǒng)結構:依托了美團公共組件和服務绑青,完成了分區(qū)擴容、容災和監(jiān)控的能力屋群。前端流量會通過 HLB 來分發(fā)和負載均衡闸婴;在分區(qū)內,服務與服務會通過 OCTO 進行通信芍躏,提供服務注冊邪乍、自動發(fā)現(xiàn)、負載均衡对竣、容錯庇楞、灰度發(fā)布等等服務。當然也可以通過消息隊列進行通信否纬,例如 Kafka吕晌、RabbitMQ。在存儲層使用 Zebra 來訪問分布式數(shù)據(jù)庫進行讀寫操作临燃。利用 CAT(美團開源的分布式監(jiān)控系統(tǒng))進行分布式業(yè)務及系統(tǒng)日志的采集睛驳、上報和監(jiān)控。分布式緩存使用 Squirrel+Cellar 的組合膜廊。分布式任務調度則是通過 Crane乏沸。
在實踐過程還要解決幾個問題,比較典型的是集群的擴展性爪瓜,有狀態(tài)的集群可擴展性相對較差蹬跃,無法快速擴容機器,無法緩解流量壓力铆铆。同時蝶缀,也會出現(xiàn)節(jié)點熱點的問題辆苔,包括資源不均勻、CPU 使用不均勻等等扼劈。
首先,配送后臺技術團隊通過架構升級菲驴,將有狀態(tài)節(jié)點變成無狀態(tài)節(jié)點荐吵,通過并行計算的能力,讓小的業(yè)務節(jié)點去分擔計算壓力赊瞬,以此實現(xiàn)快速擴容先煎。
第二是要解決一致性的問題,對于既要寫 DB 也要寫緩存的場景巧涧,業(yè)務寫緩存無法保障數(shù)據(jù)一致性薯蝎,美團內部主要通過 Databus 來解決,Databus 是一個高可用谤绳、低延時占锯、高并發(fā)、保證數(shù)據(jù)一致性的數(shù)據(jù)庫變更實時傳輸系統(tǒng)缩筛。通過 Databus 上游可以監(jiān)控業(yè)務 Binlog 變更消略,通過管道將變更信息傳遞給 ES 和其他 DB,或者是其他 KV 系統(tǒng)瞎抛,利用 Databus 的高可用特性來保證數(shù)據(jù)最終是可以同步到其他系統(tǒng)中艺演。
第三是我們一直在花精力解決的事情,就是保障集群高可用桐臊,主要從三個方面來入手胎撤,事前較多的是做全鏈路壓測評,估峰值容量断凶;周期性的集群健康性檢查伤提;隨機故障演練(服務、機器懒浮、組件)飘弧。事中做異常報警(性能、業(yè)務指標砚著、可用性)次伶;快速的故障定位(單機故障、集群故障稽穆、IDC 故障冠王、組件異常、服務異常)舌镶;故障前后的系統(tǒng)變更收集柱彻。事后重點做系統(tǒng)回滾豪娜;擴容、限流哟楷、熔斷瘤载、降級;核武器兜底卖擅。
單 IDC 的快速部署 &容災
單 IDC 故障之后鸣奔,入口服務做到故障識別,自動流量切換惩阶;單 IDC 的快速擴容挎狸,數(shù)據(jù)提前同步,服務提前部署断楷,Ready 之后打開入口流量锨匆;要求所有做數(shù)據(jù)同步、流量分發(fā)的服務冬筒,都具備自動故障檢測恐锣、故障服務自動摘除;按照 IDC 為單位擴縮容的能力账千。
多中心嘗試
美團 IDC 以分區(qū)為單位侥蒙,存在資源滿排,分區(qū)無法擴容匀奏。美團的方案是多個 IDC 組成虛擬中心鞭衩,以中心為分區(qū)的單位;服務無差別的部署在中心內娃善;中心容量不夠论衍,直接增加新的 IDC 來擴容容量。
單元化嘗試
相比多中心來說聚磺,單元化是進行分區(qū)容災和擴容的更優(yōu)方案坯台。關于流量路由,美團主要是根據(jù)業(yè)務特點瘫寝,采用區(qū)域或城市進行路由蜒蕾。數(shù)據(jù)同步上,異地會出現(xiàn)延遲狀況焕阿。SET 容災上要保證同本地或異地 SET 出現(xiàn)問題時咪啡,可以快速把 SET 切換到其他 SET 上來承擔流量。
智能物流的核心技術能力和平臺沉淀
機器學習平臺暮屡,是一站式線下到線上的模型訓練和算法應用平臺撤摸。之所以構建這個平臺,目的是要解決算法應用場景多,重復造輪子的矛盾問題准夷,以及線上钥飞、線下數(shù)據(jù)質量不一致。如果流程不明確不連貫衫嵌,會出現(xiàn)迭代效率低读宙,特征、模型的應用上線部署出現(xiàn)數(shù)據(jù)質量等障礙問題楔绞。
JARVIS 是一個以穩(wěn)定性保障為目標的智能化業(yè)務運維 AIOps 平臺论悴。主要用于處理系統(tǒng)故障時報警源很多,會有大量的重復報警墓律,有效信息很容易被淹沒等各種問題。此外幔亥,過往小規(guī)模分布式集群的運維故障主要靠人和經驗來分析和定位耻讽,效率低下,處理速度慢帕棉,每次故障處理得到的預期不穩(wěn)定针肥,在有效性和及時性方面無法保證。所以需要 AIOps 平臺來解決這些問題香伴。
未來的挑戰(zhàn)
經過復盤和 Review 之后慰枕,我們發(fā)現(xiàn)未來的挑戰(zhàn)很大,微服務不再“微”了即纲,業(yè)務復雜度提升之后具帮,服務就會變得膨脹。其次低斋,網(wǎng)狀結構的服務集群蜂厅,任何輕微的延遲,都可能導致的網(wǎng)絡放大效應膊畴。另外復雜的服務拓撲掘猿,如何做到故障的快速定位和處理,這也是 AIOps 需要重點解決的難題唇跨。最后稠通,就是單元化之后,從集群為單位的運維到以單元為單位的運維买猖,也給美團業(yè)務部署能力帶來很大的挑戰(zhàn)改橘。