高德全鏈路壓測——語料智慧化演進之路

高德技術發表於2020-11-09
背景
高德地圖作為日活過億的國民級出行生活服務平臺,承載著海量使用者服務的是後臺的超大規模叢集。從使用者角度,如果出問題,影響會很大。3機房異地部署造成線上環境複雜,鏈路複雜。在這樣的條件下,如何避免因故障造成使用者的傷害,以及在複雜鏈路條件下做好容量規劃,做好災備,並在第一時間發現問題,通過流量控制和預案演練做應急響應就顯得至關重要,而所有的工作都不能等到事情發生之後才做,我們需要有一種驗證手段來做好提前效能摸底,這就是全鏈路壓測,讓真實的流量提前到來。
 
全鏈路壓測作為線上服務穩定性保障的重要手段,對高德來說也是非常重要的。高德全鏈路壓測平臺TestPG從無到有,在經歷過常態化壓測後,已基本可以保障高德的所有全鏈路壓測和日常壓測,達到了平臺初期快速、準確壓測和全鏈路壓測的目標。而語料生產(流量處理)作為全鏈路壓測的重要環節,本文將對此做重點介紹。
 
一次全鏈路壓測可簡單總結為3步:壓測前的流量處理(也就是生產語料)壓測中確定壓力模型啟動壓測壓測後的結果分析與問題定位。每次全鏈路壓測,壓測前的流量處理是整個壓測過程中最耗時的一環。過去往往由運維採集日誌交給測試同學寫指令碼處理,耗時相當嚴重、成本巨大,且存在請求過期等諸多問題。基於這些問題,高德全鏈路壓測平臺TestPG前期已規範了高德壓測的語料格式,統一了高德壓測的流量處理流程。但隨著高德全鏈路壓測的演進,後續面臨兩個主要問題:
  • 語料生產流程缺乏統一管控。雖然平臺前期已規範了語料格式,但各業務只是按照語料規範處理流量,生產流程缺乏統一、標準化管控,導致語料生產成本依然很大。尤其對於全鏈路壓測來說,語料準備是最耗時的環節。
  • 介面級別的精準控壓無法滿足需求。高德作為國民級的出行應用,流量受天氣、地形、節假日的影響比較大。比如拿駕車導航來說,日常大多都是短距離的駕車導航,而國慶、春節大多都是長距離的駕車導航,而長距離的駕車導航對後端算力的要求是非線性增加的,甚至是成倍增加。但長短距離的駕車導航對壓測平臺來說是同一個介面,而平臺目前的精準控壓只能做到介面級別,無法模擬介面特徵級別的壓測。
基於以上兩大問題,高德全鏈路壓測團隊設立語料智慧化專項,重點解決以上相關問題。
 
解題思路和路徑
 
引流標準化
高德的全鏈路壓測彼時已基本拉通大多業務,但還屬於一個演進階段。對於語料處理,主要由各業務自行處理後用來壓測,語料處理的來源缺乏統一性,日誌、ODPS、流量等處理來源司空見慣。對於語料生產流程的統一管控,我們首先想到的是統一語料處理來源,必須選擇一個低成本、高效率的方式作為語料生產的輸入,而流量錄製的方式就很切合。經過調研,發現高德其他業務場景對流量錄製也有很大的需求。但高德過去的流量錄製方式並不統一,各業務線自行拷貝流量經常會引起線上機器不穩定等問題。所以首先要做的是統一高德的流量錄製,標準化引流。
 
語料生產平臺化
要統一管控語料的生產流程,上面已經統一了語料生產的輸入,接下來就是如何把流量轉化為符合平臺規範的語料,把整個轉化流程平臺化。但對於高德業務來說,各個業務都有其自身的特點,如果讓平臺為每個業務提供定製化的處理邏輯成本巨大,再加上平臺對各個業務並不是特別熟悉,也很容易出錯。而整個語料處理過程也存在一些通用的處理邏輯,所以我們必須提供一種既支援各業務定製化需求,又可以滿足平臺通用處理邏輯的方案。我們最終選擇通過Flink來完成整個流量處理邏輯。
 
引流已經標準化,業務方只需檢視流量的格式內容,編寫Flink的UDF(使用者自定義函式),處理自身業務定製化的需求即可,而後續通用的語料儲存等邏輯可通過Flink的sink外掛來完成。這樣既可以提供通用處理邏輯,又給業務的特殊需求提供了支援,擴充套件性良好。
 
語料智慧化
上面已經提到高德這種國民級出行應用受各種環境影響比較大,如何達到介面特徵級別的精準控壓,是當時面臨的又一大難題。平臺已具備介面級別的精準控壓,只需把介面按照特徵分類,提供真實流量的特徵分佈即可。但流量的特徵分佈是實時變化的,如何提供符合流量高峰的特徵分佈是語料智慧化的最終目標。
 
要實現語料智慧化需要經歷3個階段。第一階段是流量特徵統計。我們需要明確影響流量變化的因素,體現到流量上就是具體的引數分佈,具體有哪些引數會隨著外界環境的變化而變化。當然這塊高德大多業務線都有一些粗略的分析結果,前期可以直接採用,後期就需要有更細粒度的特徵分析。
 
第二階段是流量特徵提取。有了具體的特徵引數後,就需要對特徵引數進行提取統計,後續可用來做智慧預測。但特徵引數的提取到底應該如何去做呢?經過綜合分析發現放到語料生產的環節最合適。引流拷貝流量,語料生產環節用來處理流量,在這個環節提取特徵引數再好不過了。而整個語料生產擴充套件性良好,對使用者的特殊需求通過UDF完成,整個流量特徵提取剛好可以在通用邏輯裡面完成。
 
第三階段就是智慧預測與機器學習。有了特徵引數的統計資料,就可以藉助往年高德地圖國慶或春節的流量特徵,加上今年隨著業務的流量變化趨勢,智慧預測出符合今年國慶或春節流量特徵的資料,做到介面特徵級別的精準壓測,做到真正意義上的全鏈路壓測,為高德地圖服務的穩定性保駕護航。後續也可以藉助機器學習自動發現影響流量變化的特徵引數,自動採集分析,做到真正意義的語料智慧化。
 
整體方案
高德全鏈路壓測——語料智慧化演進之路
整個引流工作將由開發的統一引流平臺來完成,引流平臺通過引流外掛把流量快取到Kfaka,最終落盤到ODPS。而整個語料生產服務直接對接引流平臺,處理來自ODPS的流量即可。
語料生產服務的整體處理過程都由Flink來完成。使用者只需編寫Flink的UDF來完成自己業務線定製化的需求即可。而且整個Flink的UDF支援多引數傳遞,使用者可靈活編寫UDF,在執行過程中動態傳遞相關引數,解決請求過期等問題。
 
Flink sink是由平臺開發的一個Flink源表解析外掛,主要包括流量的特徵分析與提取,以及把生產好的語料按照介面命名寫入OSS供平臺壓測使用。目前流量的特徵由各業務線自己提供,通過在平臺新增完成。Flink sink在執行過程中呼叫平臺開放API獲取特徵資料進行採集,最終上報給平臺,平臺後續再根據這些資料進行機器學習,智慧預測出符合流量高峰的流量特徵,供全鏈路壓測使用。
 
核心功能介紹
 
Iflow引流平臺
基於上面的問題分析,高德工程效率團隊積極迎接挑戰,短短几個月開發了Iflow引流平臺,對高德的引流進行了統一管控,具體如下圖所示:
高德全鏈路壓測——語料智慧化演進之路
Iflow引流平臺以任務的方式對高德的引流進行管理。目前採用引流外掛的方式進行流量拷貝(後續將支援更多引流方式),流量通過Kafka快取,最終寫入ODPS供大家使用。使用者只需要從ODPS提取需要的資料即可。而啟動引流需要相關負責人審批,周知到關聯業務,有效的降低了引流引起事故後排查的成本。
 
TestPG語料智慧化
高德全鏈路壓測平臺語料智慧化主要由3個模組組成:業務線管理、壓測名單管理和介面比例管理。業務線管理主要用來管理高德各個鏈路的相關資料,包括關聯引流任務、啟動引流、引流記錄、語料路徑、壓測header管理和觸發語料生產等功能。一條業務線就是一條壓測鏈路,從引流到語料生產以及語料特徵分析等都是在業務線維度完成的。具體如下圖所示:
高德全鏈路壓測——語料智慧化演進之路
功能介紹:
  • 關聯引流任務:主要完成和引流平臺任務的關聯以及配置相關的引數。
  • 啟動引流任務:啟動引流平臺任務,在引流結束後會自動觸發語料生產,通過執行使用者編寫的Flink UDF和平臺開發的Flink外掛,完成語料的生產和特徵引數的提取。
  • 語料路徑:在每次啟動引流觸發語料生產後平臺會自動生成語料路徑,使用者可在建立語料的時候自主選擇。
  • 壓測header管理:每條業務線都有自身的業務特點,在header上的體現也不同,這裡主要用來管理壓測http服務傳送的header內容。
  • 觸發語料生產:語料生產有2條途徑,一是關聯好引流任務啟動引流後會自動觸發語料生產,包括特徵引數提取等一系列的操作;二是在引流成功後,使用者可能對UDF等引數有所修改,也可以通過此按鈕來觸發語料生產。
壓測名單管理主要用來管理壓測的介面。一個公司開始做壓測,業務肯定是需要跟著去適配的,隨之而來的就是業務改造,這是一個漫長的過程。為了方便管理,高德全鏈路壓測平臺對高德這邊的介面進行統一管理。具體如下圖所示:
高德全鏈路壓測——語料智慧化演進之路
壓測名單是在引流過程中自動上報的,引流只要發現未在壓測名單的介面就會自動上報壓測平臺,平臺根據關聯應用去關聯對應的負責人,並推動確認。如果可壓測就確認為壓測名單,下次語料生產作為白名單正常引流。如果不能壓測就區分為免壓介面或待跟進介面。待跟進介面平臺後續會以訊息通知的形式推動業務線改造,最終達到真正意義的介面覆蓋全、鏈路覆蓋全的全鏈路壓測。
 
 
介面比例管理前期主要是用來管理BI提供的、以及每次全鏈路壓測調整的比較貼近真實情況的介面比例資料,作為後續全鏈路壓測的一個參考。後期將通過語料生產提取流量特徵的統計資料,智慧分析預測出符合真實情況的流量比例,供全鏈路壓測直接使用,具體如下圖所示:
高德全鏈路壓測——語料智慧化演進之路
 
平臺優勢
 
語料平臺化生產
整個語料生產對接了引流平臺,並通過Flink來完成。既支援了業務方定製化的需求,也支援平臺通用化的處理邏輯,擴充套件性良好。通用邏輯通過Flink sink來實現,並加入了流量特徵提取等功能,推動了語料智慧化的順利進行。使用者只需要學習Flink完成UDF的編寫,然後在平臺完成相關配置即可。很大程度上提高了語料生產的效率和質量,是語料從格式標準化向生產流程標準化的一大飛躍。
 
語料智慧化
平臺在整個語料生產的過程中,通過Flink外掛完成了特徵引數的統計彙總。目前使用者只需在平臺完成相關特徵的配置,平臺在語料生產過程中就會分析特徵並統計彙總。有了特徵引數的統計資料,將有助於平臺後續的智慧分析與預測,達到介面特徵級別的精準控壓,最終達到完全意義的全鏈路壓測。
 
平臺目前已經完成了語料的自動生產,並加入了語料智慧化相關的工作。整個壓測名單也是通過引流自動上報,後續將通過訊息通知自動拉通業務線改造解決。介面比例管理模組也已支援介面比例的展示和調整,最終通過語料特徵的智慧預測,即可生產出符合流量高峰真實特徵的語料。這些都將推動高德全鏈路壓測智慧化的演進。
 
未來展望
高德全鏈路壓測平臺語料智慧化發展已經有一段時間了,通過大家的不懈努力,語料智慧化已完成了語料的自動生產,以及特徵引數的彙總和提取,為後續智慧化奠定了基礎。未來平臺將通過機器學習的方式分析學習採集到的特徵資料,根據往年流量高峰的特徵情況,加今年流量的變化趨勢預測出符合今年流量高峰的特徵情況,做到介面特徵級別的精準控壓,完全模擬真實流量壓測達到真正意義的全鏈路壓測。
 
此外,平臺將會藉助機器學習自動分析發現影響流量變化的引數,自動提取分析,提高語料生產的準確性。
 
平臺也會有置信度評估系統,分別對比真實的流量特徵和預測的流量特徵,分析產生誤差的原因,進一步提高預測的精準度,做到完全真實的流量生產。後續配合平臺的精準壓測、壓力模型和監控等功能達到真正意義的無人化、智慧化的全鏈路壓測。
 

相關文章