这一年多来,阿里Blink测试体系如何从0走向成熟?
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
摘要:?引言 Apache Flink是面向數(shù)據(jù)流處理和批處理的分布式開(kāi)源計(jì)算框架,2016年阿里巴巴引入Flink框架,改造為Blink。2017年,阿里整合了所有流計(jì)算產(chǎn)品,決定以Blink引擎為基礎(chǔ),打造一款全球領(lǐng)先的實(shí)時(shí)計(jì)算引擎。
引言
Apache Flink是面向數(shù)據(jù)流處理和批處理的分布式開(kāi)源計(jì)算框架,2016年阿里巴巴引入Flink框架,改造為Blink。2017年,阿里整合了所有流計(jì)算產(chǎn)品,決定以Blink引擎為基礎(chǔ),打造一款全球領(lǐng)先的實(shí)時(shí)計(jì)算引擎。當(dāng)年雙11,Blink支持了二十多個(gè)事業(yè)部/群,同時(shí)運(yùn)行了上千個(gè)實(shí)時(shí)計(jì)算job,每秒處理的日志數(shù)峰值達(dá)到驚人的4.7億。因此Blink的可靠性和穩(wěn)定性保障變得極其重要,搜索事業(yè)部的質(zhì)量團(tuán)隊(duì)為此專門成立了Blink測(cè)試小組,通過(guò)一年多的努力,建立了從代碼質(zhì)量到持續(xù)集成再到預(yù)發(fā)測(cè)試的全面的測(cè)試體系,幫助Blink的質(zhì)量取得大幅提高。
Blink測(cè)試平臺(tái)介紹
Blink測(cè)試團(tuán)隊(duì)為Blink質(zhì)量量身打造Blink測(cè)試平臺(tái),內(nèi)容如下圖所示:
Blink測(cè)試平臺(tái)包含了三個(gè)測(cè)試階段: 代碼質(zhì)量校驗(yàn)階段,主要進(jìn)行靜態(tài)代碼掃描、單元測(cè)試和基于minicluster的測(cè)試;集成測(cè)試階段,主要是進(jìn)行功能測(cè)試、性能測(cè)試和帶有破壞性的穩(wěn)定性測(cè)試;而預(yù)發(fā)測(cè)試階段,主要是利用用戶的job進(jìn)行仿真測(cè)試,并在版本發(fā)布之前做最后的版本兼容性測(cè)試。
平臺(tái)選取部分測(cè)試集合納入到precommit的驗(yàn)證中,可盡早發(fā)現(xiàn)代碼中問(wèn)題,而大規(guī)模的功能、性能、穩(wěn)定性測(cè)試,通常作為dailybuild的集合。另外,Blink測(cè)試平臺(tái)建立了較為完善的質(zhì)量度量體系,除去對(duì)代碼覆蓋率的統(tǒng)計(jì)及變化的分析,還可一鍵生成測(cè)試報(bào)告,并對(duì)不同版本的質(zhì)量進(jìn)行橫向?qū)Ρ取?/span>
代碼質(zhì)量校驗(yàn)階段
代碼質(zhì)量校驗(yàn)階段是整個(gè)Blink質(zhì)量保障的基礎(chǔ)。主要包含單元測(cè)試,利用aone提供的"集團(tuán)代碼規(guī)約掃描"工具對(duì)代碼進(jìn)行規(guī)范掃描,單機(jī)運(yùn)行的基于minicluster的集成測(cè)試,只有這三個(gè)階段都測(cè)試通過(guò)后才允許Blink代碼提交到項(xiàng)目git。
功能測(cè)試
Blink功能測(cè)試框架使用defender,該框架是由pytest[1]改造而來(lái),很好地支持了BlinkSql測(cè)試的特性,并支持第三方插件的引入。在測(cè)試集群中可以端到端的對(duì)某一場(chǎng)景進(jìn)行精準(zhǔn)測(cè)試。具體流程如下圖所示,支持IDE和Jenkins兩種觸發(fā)模式,yarn_job、yarn_session和local三種case運(yùn)行調(diào)度模式。執(zhí)行結(jié)束后通過(guò)web頁(yè)面或郵件的形式對(duì)結(jié)果進(jìn)行展示,并對(duì)運(yùn)行結(jié)果進(jìn)行持久化。具有如下優(yōu)勢(shì):
1、case的統(tǒng)一調(diào)度與精細(xì)化管理:現(xiàn)在Blink在defender上有12個(gè)場(chǎng)景4000多個(gè)case,可以每天定時(shí)進(jìn)行dailyrun,如果某一類別的case出現(xiàn)問(wèn)題可單獨(dú)執(zhí)行,并可在頁(yè)面上顯示詳情。
2、case的三種運(yùn)行模式滿足了不同場(chǎng)景的測(cè)試需求:其中yarn_session模式對(duì)一個(gè)模塊中存在sqlCase的場(chǎng)景較為適用,可大大減少與Yarn交互的時(shí)間。
3、case靈活配置:不僅可以支持系統(tǒng)配置,對(duì)每個(gè)case集所需資源(slot,memory等)或集群其他配置的不同進(jìn)行單獨(dú)配置。
4、一個(gè)case可同時(shí)支持批和流兩種運(yùn)行類型。
5、client類型靈活擴(kuò)展:可對(duì)現(xiàn)有數(shù)據(jù)存儲(chǔ)和服務(wù)進(jìn)行集成和擴(kuò)展。現(xiàn)已支持多類型data store讀寫(xiě)服務(wù),yarn_session的啟動(dòng),Blink job交互等。
性能測(cè)試
Blink作為實(shí)時(shí)大數(shù)據(jù)處理引擎,其對(duì)單位時(shí)間內(nèi)的數(shù)據(jù)處理能力和數(shù)據(jù)處理的實(shí)時(shí)性提出了非常嚴(yán)苛的要求。因此,性能測(cè)試是整個(gè)Blink測(cè)試中非常重要的一環(huán),是衡量Blink新版本能否發(fā)布的核心標(biāo)準(zhǔn)之一。
Blink的性能測(cè)試主要包含Operator性能測(cè)試、SQL性能測(cè)試和runtime性能測(cè)試:
Operator指構(gòu)成SQL語(yǔ)義的一個(gè)原子操作,例如Sum,Aggregate等,是一個(gè)不能再分割的算子。Operator的性能測(cè)試主要用于監(jiān)控單個(gè)算子在整個(gè)開(kāi)發(fā)過(guò)程中的性能變化,以保證局部處理的優(yōu)化和提高。目前,Operator的測(cè)試分成兩個(gè)部分:單個(gè)算子的性能測(cè)試和算子組合的性能測(cè)試。Operator測(cè)試以Daily Run的方式反饋性能的變化。
SQL性能測(cè)試主要用于監(jiān)控版本開(kāi)發(fā)過(guò)程中單個(gè)SQL的性能變化。TPCH和TPCDS是業(yè)界SQL標(biāo)準(zhǔn)性能測(cè)試集,分別有22和103個(gè)測(cè)試用例。測(cè)試平臺(tái)將其引入到Blink性能測(cè)試中,以更全面地衡量Blink的性能變化。
Runtime性能測(cè)試主要為了保障runtime層面性能不回退,主要包含端到端性能測(cè)試和模塊性能測(cè)試。端到端性能測(cè)試首先根據(jù)梳理出測(cè)試場(chǎng)景,關(guān)注各場(chǎng)景job在指定數(shù)據(jù)量下的job運(yùn)行時(shí)間,模塊性能測(cè)試主要包含網(wǎng)絡(luò)層性能測(cè)試,調(diào)度層性能測(cè)試,failover性能測(cè)試等,更關(guān)注在特定場(chǎng)景下job的處理時(shí)間。
性能測(cè)試未來(lái)規(guī)劃是將E2E性能測(cè)試、模塊級(jí)別性能測(cè)試和參數(shù)調(diào)整整體聯(lián)動(dòng)起來(lái),使其能夠更好協(xié)助開(kāi)發(fā)定位性能問(wèn)題root cause和查看參數(shù)調(diào)優(yōu)效果。
穩(wěn)定性測(cè)試
對(duì)于支持高并發(fā)、多節(jié)點(diǎn),集群物理環(huán)境復(fù)雜的分布式系統(tǒng)來(lái)說(shuō),類似磁盤打滿、網(wǎng)絡(luò)延遲等物理節(jié)點(diǎn)的異常很難避免。Blink作為一個(gè)高可用的分布式系統(tǒng),必然要做到在異常情況下也能保證系統(tǒng)的穩(wěn)定運(yùn)行及數(shù)據(jù)的正常產(chǎn)出。“避免失敗的最好方法就是不斷地失敗”,因此,在Blink任務(wù)運(yùn)行期間將可能發(fā)生的異常模擬出來(lái),就能夠驗(yàn)證Blink的穩(wěn)定性。
我們把異常場(chǎng)景分為兩類:一類是"黑猴子",該類場(chǎng)景與運(yùn)行環(huán)境相關(guān),包括機(jī)器重啟、網(wǎng)絡(luò)異常、磁盤異常、cpu異常等,這部分異常主要用shell命令來(lái)模擬;另一類異常是"白猴子",此類場(chǎng)景與Blink job相關(guān),包括rpc消息超時(shí),task異常,heart beat消息超時(shí)等,主要通過(guò)byteman[2]軟件注入的方式來(lái)實(shí)現(xiàn)。在穩(wěn)定性測(cè)試中,monkey作為調(diào)度會(huì)隨機(jī)選取上述異常場(chǎng)景進(jìn)行組合,以模擬線上可能出現(xiàn)的所有異常場(chǎng)景。
考慮到Blink支持任務(wù)failover的特性和穩(wěn)定性測(cè)試的自動(dòng)運(yùn)行,我們把穩(wěn)定性測(cè)試設(shè)定為一輪輪的迭代循環(huán),每一輪迭代都包含釋放出monkey,提交任務(wù),等待job恢復(fù),校驗(yàn)四個(gè)階段,校驗(yàn)主要包含checkpoint,container及slot資源等是否符合預(yù)期,校驗(yàn)失敗就報(bào)警,校驗(yàn)成功后通過(guò)后進(jìn)入下一輪迭代,以驗(yàn)證任務(wù)在長(zhǎng)時(shí)間運(yùn)行下的任務(wù)穩(wěn)定性。
穩(wěn)定性測(cè)試架構(gòu)分為四層:組件層主要包含測(cè)試Blink job,monkeys和dumper;action層包含job啟動(dòng),狀態(tài)校驗(yàn),輸出校驗(yàn)等;執(zhí)行層包含service,monkey操作等,monkey操作時(shí)會(huì)根據(jù)ssh到具體機(jī)器,執(zhí)行monkey操作;最上層是WebUI。詳情如下圖所示:
預(yù)發(fā)測(cè)試?
Blink預(yù)發(fā)測(cè)試階段主要通過(guò)克隆線上的真實(shí)任務(wù)和數(shù)據(jù)來(lái)進(jìn)行復(fù)雜業(yè)務(wù)邏輯和大數(shù)據(jù)量的測(cè)試。因此,Blink 預(yù)發(fā)測(cè)試是對(duì)代碼質(zhì)量校驗(yàn)和集成測(cè)試的補(bǔ)充以及整個(gè)測(cè)試流程的完善,是Blink版本發(fā)布的最后一道關(guān)卡。
Blink預(yù)發(fā)測(cè)試主要分為兩個(gè)部分:仿真測(cè)試和兼容性測(cè)試。
仿真測(cè)試
仿真測(cè)試對(duì)Blink的功能、性能和穩(wěn)定性等基礎(chǔ)測(cè)試指標(biāo)進(jìn)行進(jìn)一步地衡量,并將開(kāi)發(fā)中的版本與當(dāng)前的線上版本進(jìn)行橫向比較。因此,仿真測(cè)試能夠盡早發(fā)現(xiàn)各種功能、性能退化和穩(wěn)定性問(wèn)題,從而提高上線版本的質(zhì)量。
仿真測(cè)試主要分為環(huán)境克隆,環(huán)境適配和測(cè)試運(yùn)行三個(gè)階段:
環(huán)境克隆
環(huán)境克隆是實(shí)現(xiàn)整個(gè)仿真測(cè)試的基礎(chǔ),包括線上任務(wù)的挑選、克隆和測(cè)試數(shù)據(jù)的采樣。
Blink的線上任務(wù)分散在多個(gè)不同的工程中,數(shù)量較多。雖然,每一個(gè)線上任務(wù)都有其內(nèi)在的業(yè)務(wù)邏輯,但是,不同的任務(wù)可以根據(jù)其主要的處理邏輯進(jìn)行歸類,例如,以Agg操作為主的任務(wù)集合,以Sum操作為主的任務(wù)集合等,因此,Blink仿真測(cè)試需要對(duì)線上任務(wù)進(jìn)行甄別,挑選出其中最具有代表性的任務(wù)。
仿真測(cè)試的測(cè)試數(shù)據(jù)集是當(dāng)前線上任務(wù)輸入數(shù)據(jù)的采樣,僅在數(shù)據(jù)規(guī)模上有差異,并且,可以根據(jù)測(cè)試需求的不同進(jìn)行動(dòng)態(tài)地調(diào)節(jié),從而實(shí)現(xiàn)對(duì)測(cè)試目標(biāo)的精確衡量。
環(huán)境適配
環(huán)境適配是仿真測(cè)試過(guò)程中的初始化階段,主要進(jìn)行測(cè)試用例的修改,使其能夠正常運(yùn)行。該過(guò)程主要包括兩個(gè)步驟:更改測(cè)試數(shù)據(jù)輸入源和測(cè)試結(jié)果輸出地址和更新任務(wù)的資源配置。
測(cè)試運(yùn)行
測(cè)試運(yùn)行是仿真測(cè)試流程中的實(shí)際執(zhí)行模塊,包括測(cè)試用例的運(yùn)行和結(jié)果反饋兩個(gè)部分。
Blink仿真測(cè)試包括功能測(cè)試、性能測(cè)試和穩(wěn)定性測(cè)試等模塊,不同的測(cè)試模塊具有不同的衡量標(biāo)準(zhǔn)和反饋方式。這些測(cè)試模塊的測(cè)試結(jié)果與代碼質(zhì)量校驗(yàn)和集成測(cè)試的結(jié)果一起構(gòu)成Blink測(cè)試的結(jié)果集。
性能測(cè)試和功能測(cè)試以仿真任務(wù)和采樣數(shù)據(jù)作為輸入,對(duì)比和分析任務(wù)在不同執(zhí)行引擎上的執(zhí)行過(guò)程和產(chǎn)出。其中,性能測(cè)試重點(diǎn)考察執(zhí)行過(guò)程中不同執(zhí)行引擎對(duì)資源的利用率、吞吐量等性能指標(biāo)。功能測(cè)試則將執(zhí)行的最終結(jié)果進(jìn)行對(duì)比。需要特別指出的是,在功能測(cè)試中,線上版本的運(yùn)行結(jié)果被假定為真,即當(dāng)線上版本的執(zhí)行結(jié)果與開(kāi)發(fā)版本的執(zhí)行結(jié)果不同時(shí),認(rèn)為開(kāi)發(fā)版本的執(zhí)行存在錯(cuò)誤,需要修復(fù)開(kāi)發(fā)中引入的錯(cuò)誤。
穩(wěn)定性測(cè)試重點(diǎn)關(guān)注仿真測(cè)試任務(wù)在線上克隆環(huán)境、大數(shù)據(jù)量和長(zhǎng)時(shí)間運(yùn)行條件下的穩(wěn)定性。其以Blink開(kāi)發(fā)版本作為唯一的執(zhí)行引擎,通過(guò)收集執(zhí)行過(guò)程中的資源利用情況、吞吐量、failover等指標(biāo)來(lái)進(jìn)行度量。
兼容性測(cè)試
Blink兼容性測(cè)試主要用于發(fā)現(xiàn)Blink新、舊版本之間的兼容性問(wèn)題,從而為線上任務(wù)升級(jí)Blink執(zhí)行引擎的版本提供依據(jù)。目前,兼容性測(cè)試主要分為靜態(tài)檢查和動(dòng)態(tài)運(yùn)行兩個(gè)階段,其中,靜態(tài)檢查是整個(gè)兼容性測(cè)試的基礎(chǔ)。
靜態(tài)檢查
靜態(tài)檢查主要用于分析線上任務(wù)在不同執(zhí)行引擎下生成執(zhí)行計(jì)劃的不同,包括兩個(gè)方面的內(nèi)容:
?●??新的執(zhí)行引擎生成執(zhí)行計(jì)劃的正確性及生成執(zhí)行計(jì)劃的時(shí)間長(zhǎng)短。
?●??新、舊版本的執(zhí)行引擎生成的執(zhí)行計(jì)劃是否兼容。
在靜態(tài)檢查中,若新的執(zhí)行引擎不能正確地生成執(zhí)行計(jì)劃,或者生成執(zhí)行計(jì)劃的時(shí)間超出預(yù)期,都可以認(rèn)為靜態(tài)檢查失敗,Blink新版本中存在異常或者缺陷,需要查找原因。當(dāng)新版本能夠正確地生成執(zhí)行計(jì)劃時(shí),若新、舊版本的執(zhí)行引擎生成的執(zhí)行計(jì)劃不兼容,那么,需要將對(duì)比結(jié)果反饋給開(kāi)發(fā)人員以判斷該執(zhí)行計(jì)劃的更改是否符合預(yù)期;若執(zhí)行計(jì)劃兼容或者執(zhí)行計(jì)劃的更改符合預(yù)期,則可以直接進(jìn)行運(yùn)行時(shí)測(cè)試。
動(dòng)態(tài)運(yùn)行測(cè)試
Blink動(dòng)態(tài)運(yùn)行測(cè)試?yán)梅抡鏈y(cè)試中的功能測(cè)試模塊來(lái)進(jìn)行任務(wù)的運(yùn)行,是升級(jí)Blink新版本之前的最后一輪測(cè)試。若任務(wù)能夠正常啟動(dòng)且測(cè)試結(jié)果符合預(yù)期,則認(rèn)為該任務(wù)可以自動(dòng)升級(jí),反之,則需要人工介入進(jìn)行手動(dòng)升級(jí)。
展望
通過(guò)一年多的努力,Blink整體質(zhì)量已經(jīng)有很大幅度的提高,Blink的測(cè)試方法和工具也越來(lái)越成熟,Blink回饋社區(qū)之際,我們會(huì)逐步將測(cè)試工具一起輸出,回饋更多的社區(qū)開(kāi)發(fā)測(cè)試者,與此同時(shí),隨著B(niǎo)link用戶群的壯大,Blink業(yè)務(wù)開(kāi)發(fā)者對(duì)于業(yè)務(wù)任務(wù)的質(zhì)量保證需要日漸高漲,Blink測(cè)試團(tuán)隊(duì)未來(lái)會(huì)提供更多質(zhì)量保證和開(kāi)發(fā)效率工具,進(jìn)一步提升Blink開(kāi)發(fā)者工程效率。
原文鏈接?
轉(zhuǎn)載于:https://my.oschina.net/u/1464083/blog/2933870
總結(jié)
以上是生活随笔為你收集整理的这一年多来,阿里Blink测试体系如何从0走向成熟?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【数据结构和算法05】 红-黑树(转发)
- 下一篇: accept和select的区别