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