2000萬日訂單背後:美團外賣客戶端高可用建設體系

美團技術團隊發表於2018-06-01

背景

美團外賣從2013年11月開始起步,經過數年的高速發展,一直在不斷地重新整理著記錄。2018年5月19日,日訂單量峰值突破2000萬單,已經成為全球規模最大的外賣平臺。業務的快速發展對系統穩定性提出了更高的要求,如何為線上使用者提供高穩定的服務體驗,保障全鏈路業務和系統高可用執行,不僅需要後端服務支援,更需要在端上提供全面的技術保障。而相對服務端而言,客戶端執行環境千差萬別,不可控因素多,面對突發問題應急能力差。因此,構建客戶端的高可用建設體系,保障服務穩定高可用,不僅是對工程師的技術挑戰,也是外賣平臺的核心競爭力之一。

高可用建設體系的思路

一個設計良好的大型客戶端系統往往是由一系列各自獨立的小組共同開發完成的,每一個小組都應當具有明確定義的的職責劃分。各業務模組之間推行“鬆耦合”開發模式,讓業務模組擁有隔離式變更的能力,是一種可以同時提升開發靈活性和系統健壯性的有效手段。這是美團外賣整體的業務架構,整體上以商品交易鏈路(門店召回,商品展示,交易)為核心方向進行建設,區域性上依據業務特點和團隊分工分成多個可獨立運維單元單獨維護。可獨立運維單元的簡單性是可靠性的前提條件,這使得我們能夠持續關注功能迭代,不斷完成相關的工程開發任務。

圖片1

我們將問題依照生命週期劃分為三個階段:發現、定位、解決,圍繞這三個階段的持續建設,構成了美團外賣高可用建設體系的核心。

美團外賣質量保障體系全景圖

這是美團外賣客戶端整體質量體系全景圖。整體思路:監控報警,日誌體系,容災。

圖片2

通過採集業務穩定性,基礎能力穩定性,效能穩定性三大類指標資料並上報,衡量客戶端系統質量的標準得以完善;通過設立基線,應用特定業務模型對這一系列指標進行監控報警,客戶端具備了分鐘級感知核心鏈路穩定性的能力;而通過搭建日誌體系,整個系統有了提取關鍵線索能力,多維度快速定位問題。當問題一旦定位,我們就能通過美團外賣的線上運維規範進行容災操作:降級,切換通道或限流,從而保證整體的核心鏈路穩定性。

監控&報警

監控系統,處於整個服務可靠度層級模型的最底層,是運維一個可靠的穩定系統必不可少的重要組成部分。為了保障全鏈路業務和系統高可用執行,需要在使用者感知問題之前發現系統中存在的異常,離開了監控系統,我們就沒有能力分辨客戶端是不是在正常提供服務。

圖片3

按照監控的領域方向,可以分成系統監控與業務監控。 系統監控,主要用於基礎能力如端到端成功率,服務響應時長,網路流量,硬體效能等相關的監控。系統監控側重在無業務侵入和定製系統級別的監控,更多側重在業務應用的底層,多屬於單系統級別的監控。 業務監控,側重在某個時間區間,業務的執行情況分析。業務監控系統構建於系統監控之上,可以基於系統監控的資料指標計算,並基於特定的業務介入,實現多系統之間的資料聯合與分析,並根據相應的業務模型,提供實時的業務監控與告警。按照業務監控的時效性,可以繼續將其細分成實時業務監控與離線業務監控。

  • 實時業務監控,通過實時的資料採集分析,幫助快速發現及定位線上問題,提供告警機制及介入響應(人工或系統)途徑,幫助避免發生系統故障。
  • 離線的業務監控,對一定時間段收集的資料進行資料探勘、聚合、分析,推斷出系統業務可能存在的問題,幫助進行業務上的重新優化或改進的監控。

美團外賣的業務監控,大部分屬於實時業務監控。藉助美團統一的系統監控建設基礎,美團外賣聯合公司其他部門將部分監控基礎設施進行了改造、共建和整合複用,並打通形成閉環(監控,日誌,回撈),我們構建了特定符合外賣業務流程的實時業務監控; 而離線的業務監控,主要通過使用者行為的統計與業務資料的挖掘分析,來幫助產品設計,運營策略行為等產生影響,目前這部分監控主要由美團外賣資料組提供服務。值得特別說明的是單純的資訊彙總展示,無需或無法立即做出介入動作的業務監控,可以稱之為業務分析,如特定區域的活動消費情況、區域訂單數量、特定路徑轉換率、曝光點選率等,除非這些資料用來決策系統實時狀態健康情況,幫助產生系統維護行為,否則這部分監控由離線來處理更合適。

圖片4

我們把客戶端穩定性指標分為3類維度:業務穩定性指標,基礎能力穩定性指標,效能穩定性指標。對不同的指標,我們採用不同的採集方案進行提取上報,彙總到不同系統;在設定完指標後,我們就可以制定基線,並依照特定的業務模型制定報警策略。美團外賣客戶端擁有超過40項度量質量指標,其中25項指標支援分鐘級別報警。報警通道依據緊急程度支援郵件,IM和簡訊三條通道。因此,我們團隊具備及時發現影響核心鏈路穩定性的關鍵指標變化能力。

一個完善的監控報警系統是非常複雜的,因此在設計時一定要追求簡化。以下是《Site Reliability Engineering: How Google Runs Production Systems》一書中提到的告警設定原則:

最能反映真實故障的規則應該可預測性強,非常可靠,並且越簡單越好 不常用的資料採集,彙總以及告警配置應該定時清除(某些SRE團隊的標準是一季度未使用即刪除) 沒有暴露給任何監控後臺、告警規則的採集資料指標應該定時清除

通過監控&報警系統,2017年下半年美團外賣客戶端團隊共發現影響核心鏈路穩定性超過20起問題:包括爬蟲、流量、運營商403問題、效能問題等。目前,所有問題均已全部改造完畢。

日誌體系

監控系統的一個重要特徵是生產緊急告警。一旦出現故障,需要有人來調查這項告警,以決定目前是否存在真實故障,是否需要採取特定方法緩解故障,直至查出導致故障的問題根源。

簡單定位和深入除錯的過程必須要保持非常簡單,必須能夠被團隊中任何一個人所理解。日誌體系,在簡化這一過程中起到了決定性作用。

圖片5

美團外賣的日誌體系總體分為3大類:即全量日誌系統,個體日誌系統,異常日誌系統。全量日誌系統,主要負責採集整體性指標,如網路可用性,埋點可用性,我們可以通過他了解到系統整體大盤,瞭解整體波動,確定問題影響範圍;異常日誌系統,主要採集異常指標,如大圖問題,分享失敗,定位失敗等,我們通過他可以迅速獲取異常上下文資訊,分析解決問題;而個體日誌系統,則用於提取個體使用者的關鍵資訊,從而針對性的分析特定客訴問題。這三類日誌,構成了完整的客戶端日誌體系。

圖片2

日誌的一個典型使用場景是處理單點客訴問題,解決系統潛在隱患。個體日誌系統,用於簡化工程師提取關鍵線索步驟,提升定位分析問題效率。在這一領域,美團外賣使用的是點評平臺開發的Logan服務。作為美團移動端底層的基礎日誌庫,Logan接入了集團眾多日誌系統,例如端到端日誌、使用者行為日誌、程式碼級日誌、崩潰日誌等,並且這些日誌全部都是本地儲存,且有多重加密機制和嚴格的許可權稽核機制,在處理使用者客訴時才對資料進行回撈和分析,保證使用者隱私安全。

通過設計和實施美團外賣核心鏈路日誌方案,我們打通了使用者交易流程中各系統如訂單,使用者中心,Crash平臺與Push後臺之間的底層資料同步;通過輸出標準問題分析手冊,針對常見個體問題的分析和處理得以標準化;通過制定日誌撈取SOP並定期演練,線上追溯能力大幅提升,日常客訴絕大部分可在30分鐘內定位原因。在這一過程中,通過個體暴露出影響核心鏈路穩定性的問題也均已全部改進/修復。

故障排查是運維大型系統的一項關鍵技能。採用系統化的工具和手段而不僅僅依靠經驗甚至運氣,這項技能是可以自我學習,也可以內部進行傳授。

容災備份

針對不同級別的服務,應該採取不同的手段進行有效止損。非核心依賴,通過降級向使用者提供可伸縮的服務;而核心依賴,採用多通道方式進行依賴備份容災保證交易路徑鏈路的高可用;異常流量,通過多維度限流,最大限度保證業務可用性的同時,給予使用者良好的體驗。總結成三點,即:非核心依賴降級、核心依賴備份、過載保護限流。接下來我們分別來闡述這三方面。

降級

圖片6

在這裡選取美團外賣客戶端整體系統結構關係圖來介紹非核心依賴降級建設概覽。圖上中間紅色部分是核心關鍵節點,即外賣業務的核心鏈路:定位,商家召回,商品展示,下單;藍色部分,是核心鏈路依賴的關鍵服務;黃色部分,是可降級服務。我們通過梳理依賴關係,改造前後端通訊協議,實現了客戶端非核心依賴可降級;而後端服務,通過各級快取,遮蔽隔離策略,實現了業務模組內部可降級,業務之間可降級。這構成了美團外賣客戶端整體的降級體系。

右邊則是美團外賣客戶端業務/技術降級開關流程圖。通過推拉結合,快取更新策略,我們能夠分鐘級別同步降級配置,快速止損。

目前,美團外賣客戶端有超過20項業務/能力支援降級。通過有效降級,我們避開了1次S2級事故,多次S3、S4級事故。此外,降級開關整體方案產出SDK horn,推廣至集團酒旅、金融等其他核心業務應用。

備份

核心依賴備份建設上,在此重點介紹美團外賣多網路通道。網路通道,作為客戶端的最核心依賴,卻是整個全鏈路體系最不可控的部分,經常出現問題:網路劫持,運營商故障,甚至光纖被物理挖斷等大大小小的故障嚴重影響了核心鏈路的穩定性。因此,治理網路問題,必須要建設可靠的多通道備份。

圖片7

這是美團外賣多網路通道備份示意圖。美團外賣客戶端擁有Shark、HTTP、HTTPS、HTTP DNS等四條網路通道:整體網路以Shark長連通道為主通道,其餘三條通道作為備份通道。配合完備的開關切換流程,可以在網路指標發生驟降時,實現分鐘級別的分城市網路通道切換。而通過制定故障應急SOP並不斷演練,提升了我們解決問題的能力和速度,有效應對各類網路異常。我們的網路通道開關思路也輸出至集團其他部門,有效支援了業務發展。

限流

服務過載是另一類典型的事故。究其原因大部分情況下都是由於少數呼叫方呼叫的少數介面效能很差,導致對應服務的效能惡化。若呼叫端缺乏有效降級容錯,在某些正常情況下能夠降低錯誤率的手段,如請求失敗後重試,反而會讓服務進一步效能惡化,甚至影響本來正常的服務呼叫。

美團外賣業務在高峰期訂單量已達到了相當高的規模量級,業務系統也及其複雜。根據以往經驗,在業務高峰期,一旦出現異常流量瘋狂增長從而導致伺服器當機,則損失不可估量。

因此,美團外賣前後端聯合開發了一套“流量控制系統”,對流量實施實時控制。既能日常保證業務系統穩定運轉,也能在業務系統出現問題的時候提供一套優雅的降級方案,最大限度保證業務的可用性,在將損失降到最低的前提下,給予使用者良好的體驗。

圖片8

整套系統,後端服務負責識別打標分類,通過統一的協議告訴前端所標識類別;而前端,通過多級流控檢查,對不同流量進行區分處理:彈驗證碼,或排隊等待,或直接處理,或直接丟棄。 面對不同場景,系統支援多級流控方案,可有效攔截系統過載流量,防止系統雪崩。此外,整套系統擁有分介面流控監控能力,可對流控效果進行監控,及時發現系統異常。整套方案在數次異常流量增長的故障中,經受住了考驗。

釋出

隨著外賣業務的發展,美團外賣的使用者量和訂單量已經達到了相當的量級,線上直接全量釋出版本/功能影響範圍大,風險高。 版本灰度和功能灰度是一種能夠平滑過渡的釋出方式:即線上上進行A/B實驗,讓一部分使用者繼續使用產品(特性)A,另一部分使用者開始使用產品(特性)B。如果各項指標平穩正常,結果符合預期,則擴大範圍,將所有使用者都遷移到B上來,否則回滾。灰度釋出可以保證系統的穩定,在初試階段就可以發現問題,修復問題,調整策略,保證影響範圍不被擴散。

美團外賣客戶端在版本灰度及功能灰度已較為完善。 版本灰度 iOS採用蘋果官方提供的分階段釋出方式,Android則採用美團自研的EVA包管理後臺進行釋出。這兩類釋出均支援逐步放量的分發方式。 功能灰度 功能釋出開關配置系統依據使用者特徵維度(如城市,使用者ID)釋出,並且整個配置系統有測試和線上兩套不同環境,配合固定的上線視窗,保證上線的規範性。 對應的,相應的監控基礎設施也支援分使用者特徵維度(如城市,使用者ID)監控,避免了那些無法在整體大盤體現的灰度異常。此外,無論版本灰度或功能灰度,我們均有相應最小灰度週期和回滾機制,保證整個灰度釋出過程可控,最小化問題影響。

線上運維

圖片9

在故障來臨時如何應對,是整個質量保障體系中最關鍵的環節。沒有人天生就能完美的處理緊急情況,面對問題,恰當的處理需要平時不斷的演練。 圍繞問題的生命週期,即發現、定位、解決(預防),美團外賣客戶端團隊組建了一套完備的處理流程和規範來應對影響鏈路穩定性的各類線上問題。整體思路:建立規範,提前建設,有效應對,事後總結。在不同階段用不同方式解決不同問題,事前確定完整的事故流程管理策略,並確保平穩實施,經常演練,問題的平均恢復時間大大降低,美團外賣核心鏈路的高穩定性才能夠得以保障。

未來展望

當前美團外賣業務仍然處於快速增長期。伴隨著業務的發展,背後支援業務的技術系統也日趨複雜。在美團外賣客戶端高可用體系建設過程中,我們希望能夠通過一套智慧化運維繫統,幫助工程師快速、準確的識別核心鏈路各子系統異常,發現問題根源,並自動執行對應的異常解決預案,進一步縮短服務恢復時間,從而避免或減少線上事故影響。

誠然,業界關於自動化運維的探索有很多,但多數都集中在後臺服務領域,前端方向成果較少。我們外賣技術團隊目前也在同步的探索中,正處於基礎性建設階段,歡迎更多業界同行跟我們一起討論、切磋。

參考資料

  1. Site Reliability Engineering: How Google Runs Production Systems
  2. 美團點評移動端基礎日誌庫——Logan
  3. 美團點評行動網路優化實踐

作者簡介

陳航,美團高階技術專家。2015年加入美團,目前負責美團外賣iOS團隊,對移動端架構演進,監控報警備份容災,移動端線上運維等領域有深刻理解。

富強,美團資深工程師。2015年加入美團,是外賣iOS的早期開發者之一,目前作為美團外賣iOS基礎設施小組負責人,負責外賣基礎設施及廣告運營相關業務。

徐巨集,美團高階工程師。2016年加入美團,目前作為外賣iOS團隊主力開發,負責移動端APM效能監控,高可用基礎設施支撐相關推進工作。

招聘

美團外賣長期招聘iOS、Android、FE高階/資深工程師和技術專家,可Base在北京、上海、成都,歡迎有興趣的同學將簡歷傳送至chenhang03#meituan.com。如果對我們團隊感興趣,可以關注我們的專欄

2000萬日訂單背後:美團外賣客戶端高可用建設體系

相關文章