天天看點

高德全鍊路壓測——語料智能化演進之路

背景

高德地圖作為日活過億的國民級出行生活服務平台,承載着海量使用者服務的是背景的超大規模叢集。從使用者角度,如果出問題,影響會很大。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插件完成了特征參數的統計彙總。目前使用者隻需在平台完成相關特征的配置,平台在語料生産過程中就會分析特征并統計彙總。有了特征參數的統計資料,将有助于平台後續的智能分析與預測,達到接口特征級别的精準控壓,最終達到完全意義的全鍊路壓測。

平台目前已經完成了語料的自動生産,并加入了語料智能化相關的工作。整個壓測名單也是通過引流自動上報,後續将通過消息通知自動拉通業務線改造解決。接口比例管理子產品也已支援接口比例的展示和調整,最終通過語料特征的智能預測,即可生産出符合流量高峰真實特征的語料。這些都将推動高德全鍊路壓測智能化的演進。

未來展望

高德全鍊路壓測平台語料智能化發展已經有一段時間了,通過大家的不懈努力,語料智能化已完成了語料的自動生産,以及特征參數的彙總和提取,為後續智能化奠定了基礎。未來平台将通過機器學習的方式分析學習采集到的特征資料,根據往年流量高峰的特征情況,加今年流量的變化趨勢預測出符合今年流量高峰的特征情況,做到接口特征級别的精準控壓,完全模拟真實流量壓測達到真正意義的全鍊路壓測。

此外,平台将會借助機器學習自動分析發現影響流量變化的參數,自動提取分析,提高語料生産的準确性。

平台也會有置信度評估系統,分别對比真實的流量特征和預測的流量特征,分析産生誤差的原因,進一步提高預測的精準度,做到完全真實的流量生産。後續配合平台的精準壓測、壓力模型和監控等功能達到真正意義的無人化、智能化的全鍊路壓測。

繼續閱讀