智能OPPO手機價格聯盟

餓了么的移動APM架構實踐

聊聊架構2020-06-15 12:09:55

簡單的說APM即應用性能管理,主要指對關鍵業務應用進行監測、優化,提高應用的可靠性和質量,保證用戶得到良好的服務。同時通過監控不斷優化應用,達到提高用戶體驗的同時節省成本的目的。下面是維基百科上的介紹:

Application performance management is the monitoring and management of performance and availability of software applications. APM strives to detect and diagnose complex application performance problems to maintain an expected level of service. APM is “the translation of IT metrics into business meaning.”

為什么餓了么需要研發APM系統?

  • 餓了么作為一家全球領先的O2O移動互聯網公司,目前日訂單量超過650萬,超過98%的訂單量來自于App端。

  • O2O業務具有即時性和集中性等特點,訂單主要集中在午高峰和晚高峰兩個時段,系統高峰期面臨高并發、高負載等多重壓力。

  • 早期也業務爆發高峰期,為了抗住系統壓力基本屬于不斷堆人堆機器。隨著技術不斷提高和業務變化,部分機器利用率不高。

  • 國內移動網絡環境極為復雜,WIFI、4G、3G、2.5G(Edge)、2G等多種移動網絡并存。

  • Android系統碎片化過于嚴重。

APM系統的挑戰

  • 多語言并存,目前餓了么后端有Java、Python、PHP、Go等;

  • H5端VUE JS、Angular JS、React JS等多框架并存;

  • 多終端并存,Backend、Frontend、iOS、Android、Hybird、Semi-Hybird等,且交叉混合較多。

  • 高并發,海量數據。目前僅后端每天收集到APM相關數據40TB+。

  • Mobile Native端APM不能影響宿主App運行,且不能明顯增加用戶流量、電量等消耗。

  • 如何做到無侵入APM至關重要。

餓了么APM架構

移動端架構


Why protobuf?

使用Protobuf可以達到約60%的數據壓縮比,達到節省流量的目的同時增加數據decode的復雜度,初步防止抓包輕易閱讀報文行為。

Why 7Z?

由于APM收集到的數據量比較大,并且APM數據對于系統是有益,但是對于用戶并無溢出,且用戶流量消耗較多。經過Gzip,7Z,Snappy等多種壓縮算法對比后,綜合多種因素考慮后選擇7Z壓縮算法。7Z+Protobuf可以在多條數據的時候最高達到97.4%的壓縮比,單條數據也可以達到88.6%的壓縮比。

后端架構1.0

  • 通過Nginx+lua模塊來完成Un-7Z, Protobuf等工作,將數據寫入access.log;

  • 通過Flume讀取access.log,將數據寫入Kafka;

  • Kafka只有一個Topic,ETL Service直接消費Kafka。根據消息類型不同做不同業務邏輯處理,然后將數據寫入ES或者LinDB(餓了么框架工具部自研);

  • Webport展示數據結果;

缺點

  • Nginx+lua模塊處理能力有限;

  • 反復讀寫access.log讓系統變成了一個IO密集型系統;

  • Kafka只有一個Topic,一旦一種類型數據出現問題,將會影響其它類型數據處理;

  • 所有數據都依賴ETL Service來處理,但是每種消息的處理邏輯完全不同。部分處理比較復雜的消息嚴重影響了ETL的消費能力,導致Kafka數據大量堵塞,數據延遲極高;

后端架構2.0

  • 使用Gateway來代替Nginx,智能降級熔斷;

  • 放棄flume,使用Collector Service代替lua模塊,簡單處理之后直接將Protobuf數據插入Kafka;

  • 使用Dispatch Service對每種類型消息做簡單處理之后,分Topic插入Kafka中,確保每個Topic中消息格式統一;

  • 增加Transport Service將Metadata存儲ES中;

  • 增加Alerting Service,異常指標及時通知;

  • 在ES之上增加一層API Service,提供各種DIY數據指標;

作者介紹

胡彪,餓了么移動技術負責人,移動技術總監。負責餓了么移動架構,新技術預研與實踐;移動安全,移動應用開發等等。09年投身移動互聯網研發,曾先后就職于新蛋、盛大、百度、騰訊等國內外知名企業。

七星彩论坛大公鸡