高德全鏈路壓測:語料智能化演進(jìn)之路
背景
高德地圖作為日活過億的國民級(jí)出行生活服務(wù)平臺(tái),承載著海量用戶服務(wù)的是后臺(tái)的超大規(guī)模集群。從用戶角度,如果出問題,影響會(huì)很大。3機(jī)房異地部署造成線上環(huán)境復(fù)雜,鏈路復(fù)雜。在這樣的條件下,如何避免因故障造成用戶的傷害,以及在復(fù)雜鏈路條件下做好容量規(guī)劃,做好災(zāi)備,并在第一時(shí)間發(fā)現(xiàn)問題,通過流量控制和預(yù)案演練做應(yīng)急響應(yīng)就顯得至關(guān)重要,而所有的工作都不能等到事情發(fā)生之后才做,我們需要有一種驗(yàn)證手段來做好提前性能摸底,這就是全鏈路壓測,讓真實(shí)的流量提前到來。
全鏈路壓測作為線上服務(wù)穩(wěn)定性保障的重要手段,對(duì)高德來說也是非常重要的。高德全鏈路壓測平臺(tái)TestPG從無到有,在經(jīng)歷過常態(tài)化壓測后,已基本可以保障高德的所有全鏈路壓測和日常壓測,達(dá)到了平臺(tái)初期快速、準(zhǔn)確壓測和全鏈路壓測的目標(biāo)。而語料生產(chǎn)(流量處理)作為全鏈路壓測的重要環(huán)節(jié),本文將對(duì)此做重點(diǎn)介紹。
一次全鏈路壓測可簡單總結(jié)為3步:壓測前的流量處理(也就是生產(chǎn)語料)、壓測中確定壓力模型啟動(dòng)壓測、壓測后的結(jié)果分析與問題定位。每次全鏈路壓測,壓測前的流量處理是整個(gè)壓測過程中最耗時(shí)的一環(huán)。過去往往由運(yùn)維采集日志交給測試同學(xué)寫腳本處理,耗時(shí)相當(dāng)嚴(yán)重、成本巨大,且存在請(qǐng)求過期等諸多問題。基于這些問題,高德全鏈路壓測平臺(tái)TestPG前期已規(guī)范了高德壓測的語料格式,統(tǒng)一了高德壓測的流量處理流程。但隨著高德全鏈路壓測的演進(jìn),后續(xù)面臨兩個(gè)主要問題:
語料生產(chǎn)流程缺乏統(tǒng)一管控。雖然平臺(tái)前期已規(guī)范了語料格式,但各業(yè)務(wù)只是按照語料規(guī)范處理流量,生產(chǎn)流程缺乏統(tǒng)一、標(biāo)準(zhǔn)化管控,導(dǎo)致語料生產(chǎn)成本依然很大。尤其對(duì)于全鏈路壓測來說,語料準(zhǔn)備是最耗時(shí)的環(huán)節(jié)。
接口級(jí)別的精準(zhǔn)控壓無法滿足需求。高德作為國民級(jí)的出行應(yīng)用,流量受天氣、地形、節(jié)假日的影響比較大。比如拿駕車導(dǎo)航來說,日常大多都是短距離的駕車導(dǎo)航,而國慶、春節(jié)大多都是長距離的駕車導(dǎo)航,而長距離的駕車導(dǎo)航對(duì)后端算力的要求是非線性增加的,甚至是成倍增加。但長短距離的駕車導(dǎo)航對(duì)壓測平臺(tái)來說是同一個(gè)接口,而平臺(tái)目前的精準(zhǔn)控壓只能做到接口級(jí)別,無法模擬接口特征級(jí)別的壓測。
基于以上兩大問題,高德全鏈路壓測團(tuán)隊(duì)設(shè)立語料智能化專項(xiàng),重點(diǎn)解決以上相關(guān)問題。
解題思路和路徑
引流標(biāo)準(zhǔn)化
高德的全鏈路壓測彼時(shí)已基本拉通大多業(yè)務(wù),但還屬于一個(gè)演進(jìn)階段。對(duì)于語料處理,主要由各業(yè)務(wù)自行處理后用來壓測,語料處理的來源缺乏統(tǒng)一性,日志、ODPS、流量等處理來源司空見慣。對(duì)于語料生產(chǎn)流程的統(tǒng)一管控,我們首先想到的是統(tǒng)一語料處理來源,必須選擇一個(gè)低成本、高效率的方式作為語料生產(chǎn)的輸入,而流量錄制的方式就很切合。經(jīng)過調(diào)研,發(fā)現(xiàn)高德其他業(yè)務(wù)場景對(duì)流量錄制也有很大的需求。但高德過去的流量錄制方式并不統(tǒng)一,各業(yè)務(wù)線自行拷貝流量經(jīng)常會(huì)引起線上機(jī)器不穩(wěn)定等問題。所以首先要做的是統(tǒng)一高德的流量錄制,標(biāo)準(zhǔn)化引流。
語料生產(chǎn)平臺(tái)化
要統(tǒng)一管控語料的生產(chǎn)流程,上面已經(jīng)統(tǒng)一了語料生產(chǎn)的輸入,接下來就是如何把流量轉(zhuǎn)化為符合平臺(tái)規(guī)范的語料,把整個(gè)轉(zhuǎn)化流程平臺(tái)化。但對(duì)于高德業(yè)務(wù)來說,各個(gè)業(yè)務(wù)都有其自身的特點(diǎn),如果讓平臺(tái)為每個(gè)業(yè)務(wù)提供定制化的處理邏輯成本巨大,再加上平臺(tái)對(duì)各個(gè)業(yè)務(wù)并不是特別熟悉,也很容易出錯(cuò)。而整個(gè)語料處理過程也存在一些通用的處理邏輯,所以我們必須提供一種既支持各業(yè)務(wù)定制化需求,又可以滿足平臺(tái)通用處理邏輯的方案。我們最終選擇通過Flink來完成整個(gè)流量處理邏輯。
引流已經(jīng)標(biāo)準(zhǔn)化,業(yè)務(wù)方只需查看流量的格式內(nèi)容,編寫Flink的UDF(用戶自定義函數(shù)),處理自身業(yè)務(wù)定制化的需求即可,而后續(xù)通用的語料存儲(chǔ)等邏輯可通過Flink的sink插件來完成。這樣既可以提供通用處理邏輯,又給業(yè)務(wù)的特殊需求提供了支持,擴(kuò)展性良好。
語料智能化
上面已經(jīng)提到高德這種國民級(jí)出行應(yīng)用受各種環(huán)境影響比較大,如何達(dá)到接口特征級(jí)別的精準(zhǔn)控壓,是當(dāng)時(shí)面臨的又一大難題。平臺(tái)已具備接口級(jí)別的精準(zhǔn)控壓,只需把接口按照特征分類,提供真實(shí)流量的特征分布即可。但流量的特征分布是實(shí)時(shí)變化的,如何提供符合流量高峰的特征分布是語料智能化的最終目標(biāo)。
要實(shí)現(xiàn)語料智能化需要經(jīng)歷3個(gè)階段。第一階段是流量特征統(tǒng)計(jì)。我們需要明確影響流量變化的因素,體現(xiàn)到流量上就是具體的參數(shù)分布,具體有哪些參數(shù)會(huì)隨著外界環(huán)境的變化而變化。當(dāng)然這塊高德大多業(yè)務(wù)線都有一些粗略的分析結(jié)果,前期可以直接采用,后期就需要有更細(xì)粒度的特征分析。
第二階段是流量特征提取。有了具體的特征參數(shù)后,就需要對(duì)特征參數(shù)進(jìn)行提取統(tǒng)計(jì),后續(xù)可用來做智能預(yù)測。但特征參數(shù)的提取到底應(yīng)該如何去做呢?經(jīng)過綜合分析發(fā)現(xiàn)放到語料生產(chǎn)的環(huán)節(jié)最合適。引流拷貝流量,語料生產(chǎn)環(huán)節(jié)用來處理流量,在這個(gè)環(huán)節(jié)提取特征參數(shù)再好不過了。而整個(gè)語料生產(chǎn)擴(kuò)展性良好,對(duì)用戶的特殊需求通過UDF完成,整個(gè)流量特征提取剛好可以在通用邏輯里面完成。
第三階段就是智能預(yù)測與機(jī)器學(xué)習(xí)。有了特征參數(shù)的統(tǒng)計(jì)數(shù)據(jù),就可以借助往年高德地圖國慶或春節(jié)的流量特征,加上今年隨著業(yè)務(wù)的流量變化趨勢(shì),智能預(yù)測出符合今年國慶或春節(jié)流量特征的數(shù)據(jù),做到接口特征級(jí)別的精準(zhǔn)壓測,做到真正意義上的全鏈路壓測,為高德地圖服務(wù)的穩(wěn)定性保駕護(hù)航。后續(xù)也可以借助機(jī)器學(xué)習(xí)自動(dòng)發(fā)現(xiàn)影響流量變化的特征參數(shù),自動(dòng)采集分析,做到真正意義的語料智能化。
整體方案
整個(gè)引流工作將由開發(fā)的統(tǒng)一引流平臺(tái)來完成,引流平臺(tái)通過引流插件把流量緩存到Kfaka,最終落盤到ODPS。而整個(gè)語料生產(chǎn)服務(wù)直接對(duì)接引流平臺(tái),處理來自O(shè)DPS的流量即可。
語料生產(chǎn)服務(wù)的整體處理過程都由Flink來完成。用戶只需編寫Flink的UDF來完成自己業(yè)務(wù)線定制化的需求即可。而且整個(gè)Flink的UDF支持多參數(shù)傳遞,用戶可靈活編寫UDF,在執(zhí)行過程中動(dòng)態(tài)傳遞相關(guān)參數(shù),解決請(qǐng)求過期等問題。
Flink sink是由平臺(tái)開發(fā)的一個(gè)Flink源表解析插件,主要包括流量的特征分析與提取,以及把生產(chǎn)好的語料按照接口命名寫入OSS供平臺(tái)壓測使用。目前流量的特征由各業(yè)務(wù)線自己提供,通過在平臺(tái)添加完成。Flink sink在執(zhí)行過程中調(diào)用平臺(tái)開放API獲取特征數(shù)據(jù)進(jìn)行采集,最終上報(bào)給平臺(tái),平臺(tái)后續(xù)再根據(jù)這些數(shù)據(jù)進(jìn)行機(jī)器學(xué)習(xí),智能預(yù)測出符合流量高峰的流量特征,供全鏈路壓測使用。
核心功能介紹
Iflow引流平臺(tái)
基于上面的問題分析,高德工程效率團(tuán)隊(duì)積極迎接挑戰(zhàn),短短幾個(gè)月開發(fā)了Iflow引流平臺(tái),對(duì)高德的引流進(jìn)行了統(tǒng)一管控,具體如下圖所示:
Iflow引流平臺(tái)以任務(wù)的方式對(duì)高德的引流進(jìn)行管理。目前采用引流插件的方式進(jìn)行流量拷貝(后續(xù)將支持更多引流方式),流量通過Kafka緩存,最終寫入ODPS供大家使用。用戶只需要從ODPS提取需要的數(shù)據(jù)即可。而啟動(dòng)引流需要相關(guān)負(fù)責(zé)人審批,周知到關(guān)聯(lián)業(yè)務(wù),有效的降低了引流引起事故后排查的成本。
TestPG語料智能化
高德全鏈路壓測平臺(tái)語料智能化主要由3個(gè)模塊組成:業(yè)務(wù)線管理、壓測名單管理和接口比例管理。業(yè)務(wù)線管理主要用來管理高德各個(gè)鏈路的相關(guān)數(shù)據(jù),包括關(guān)聯(lián)引流任務(wù)、啟動(dòng)引流、引流記錄、語料路徑、壓測header管理和觸發(fā)語料生產(chǎn)等功能。一條業(yè)務(wù)線就是一條壓測鏈路,從引流到語料生產(chǎn)以及語料特征分析等都是在業(yè)務(wù)線維度完成的。具體如下圖所示:
功能介紹:
關(guān)聯(lián)引流任務(wù):主要完成和引流平臺(tái)任務(wù)的關(guān)聯(lián)以及配置相關(guān)的參數(shù)。
啟動(dòng)引流任務(wù):啟動(dòng)引流平臺(tái)任務(wù),在引流結(jié)束后會(huì)自動(dòng)觸發(fā)語料生產(chǎn),通過執(zhí)行用戶編寫的Flink UDF和平臺(tái)開發(fā)的Flink插件,完成語料的生產(chǎn)和特征參數(shù)的提取。
語料路徑:在每次啟動(dòng)引流觸發(fā)語料生產(chǎn)后平臺(tái)會(huì)自動(dòng)生成語料路徑,用戶可在創(chuàng)建語料的時(shí)候自主選擇。
壓測header管理:每條業(yè)務(wù)線都有自身的業(yè)務(wù)特點(diǎn),在header上的體現(xiàn)也不同,這里主要用來管理壓測http服務(wù)發(fā)送的header內(nèi)容。
觸發(fā)語料生產(chǎn):語料生產(chǎn)有2條途徑,一是關(guān)聯(lián)好引流任務(wù)啟動(dòng)引流后會(huì)自動(dòng)觸發(fā)語料生產(chǎn),包括特征參數(shù)提取等一系列的操作;二是在引流成功后,用戶可能對(duì)UDF等參數(shù)有所修改,也可以通過此按鈕來觸發(fā)語料生產(chǎn)。
壓測名單管理主要用來管理壓測的接口。一個(gè)公司開始做壓測,業(yè)務(wù)肯定是需要跟著去適配的,隨之而來的就是業(yè)務(wù)改造,這是一個(gè)漫長的過程。為了方便管理,高德全鏈路壓測平臺(tái)對(duì)高德這邊的接口進(jìn)行統(tǒng)一管理。具體如下圖所示:
壓測名單是在引流過程中自動(dòng)上報(bào)的,引流只要發(fā)現(xiàn)未在壓測名單的接口就會(huì)自動(dòng)上報(bào)壓測平臺(tái),平臺(tái)根據(jù)關(guān)聯(lián)應(yīng)用去關(guān)聯(lián)對(duì)應(yīng)的負(fù)責(zé)人,并推動(dòng)確認(rèn)。如果可壓測就確認(rèn)為壓測名單,下次語料生產(chǎn)作為白名單正常引流。如果不能壓測就區(qū)分為免壓接口或待跟進(jìn)接口。待跟進(jìn)接口平臺(tái)后續(xù)會(huì)以消息通知的形式推動(dòng)業(yè)務(wù)線改造,最終達(dá)到真正意義的接口覆蓋全、鏈路覆蓋全的全鏈路壓測。
接口比例管理前期主要是用來管理BI提供的、以及每次全鏈路壓測調(diào)整的比較貼近真實(shí)情況的接口比例數(shù)據(jù),作為后續(xù)全鏈路壓測的一個(gè)參考。后期將通過語料生產(chǎn)提取流量特征的統(tǒng)計(jì)數(shù)據(jù),智能分析預(yù)測出符合真實(shí)情況的流量比例,供全鏈路壓測直接使用,具體如下圖所示:
平臺(tái)優(yōu)勢(shì)
語料平臺(tái)化生產(chǎn)
整個(gè)語料生產(chǎn)對(duì)接了引流平臺(tái),并通過Flink來完成。既支持了業(yè)務(wù)方定制化的需求,也支持平臺(tái)通用化的處理邏輯,擴(kuò)展性良好。通用邏輯通過Flink sink來實(shí)現(xiàn),并加入了流量特征提取等功能,推動(dòng)了語料智能化的順利進(jìn)行。用戶只需要學(xué)習(xí)Flink完成UDF的編寫,然后在平臺(tái)完成相關(guān)配置即可。很大程度上提高了語料生產(chǎn)的效率和質(zhì)量,是語料從格式標(biāo)準(zhǔn)化向生產(chǎn)流程標(biāo)準(zhǔn)化的一大飛躍。
語料智能化
平臺(tái)在整個(gè)語料生產(chǎn)的過程中,通過Flink插件完成了特征參數(shù)的統(tǒng)計(jì)匯總。目前用戶只需在平臺(tái)完成相關(guān)特征的配置,平臺(tái)在語料生產(chǎn)過程中就會(huì)分析特征并統(tǒng)計(jì)匯總。有了特征參數(shù)的統(tǒng)計(jì)數(shù)據(jù),將有助于平臺(tái)后續(xù)的智能分析與預(yù)測,達(dá)到接口特征級(jí)別的精準(zhǔn)控壓,最終達(dá)到完全意義的全鏈路壓測。
平臺(tái)目前已經(jīng)完成了語料的自動(dòng)生產(chǎn),并加入了語料智能化相關(guān)的工作。整個(gè)壓測名單也是通過引流自動(dòng)上報(bào),后續(xù)將通過消息通知自動(dòng)拉通業(yè)務(wù)線改造解決。接口比例管理模塊也已支持接口比例的展示和調(diào)整,最終通過語料特征的智能預(yù)測,即可生產(chǎn)出符合流量高峰真實(shí)特征的語料。這些都將推動(dòng)高德全鏈路壓測智能化的演進(jìn)。
未來展望
高德全鏈路壓測平臺(tái)語料智能化發(fā)展已經(jīng)有一段時(shí)間了,通過大家的不懈努力,語料智能化已完成了語料的自動(dòng)生產(chǎn),以及特征參數(shù)的匯總和提取,為后續(xù)智能化奠定了基礎(chǔ)。未來平臺(tái)將通過機(jī)器學(xué)習(xí)的方式分析學(xué)習(xí)采集到的特征數(shù)據(jù),根據(jù)往年流量高峰的特征情況,加今年流量的變化趨勢(shì)預(yù)測出符合今年流量高峰的特征情況,做到接口特征級(jí)別的精準(zhǔn)控壓,完全模擬真實(shí)流量壓測達(dá)到真正意義的全鏈路壓測。
此外,平臺(tái)將會(huì)借助機(jī)器學(xué)習(xí)自動(dòng)分析發(fā)現(xiàn)影響流量變化的參數(shù),自動(dòng)提取分析,提高語料生產(chǎn)的準(zhǔn)確性。
平臺(tái)也會(huì)有置信度評(píng)估系統(tǒng),分別對(duì)比真實(shí)的流量特征和預(yù)測的流量特征,分析產(chǎn)生誤差的原因,進(jìn)一步提高預(yù)測的精準(zhǔn)度,做到完全真實(shí)的流量生產(chǎn)。后續(xù)配合平臺(tái)的精準(zhǔn)壓測、壓力模型和監(jiān)控等功能達(dá)到真正意義的無人化、智能化的全鏈路壓測。
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!