這一年多來,阿里Blink測試體系如何從0走向成熟?

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

摘要:?引言 Apache Flink是面向數據流處理和批處理的分布式開源計算框架,2016年阿里巴巴引入Flink框架,改造為Blink。2017年,阿里整合了所有流計算產品,決定以Blink引擎為基礎,打造一款全球領先的實時計算引擎。

引言

Apache Flink是面向數據流處理和批處理的分布式開源計算框架,2016年阿里巴巴引入Flink框架,改造為Blink。2017年,阿里整合了所有流計算產品,決定以Blink引擎為基礎,打造一款全球領先的實時計算引擎。當年雙11,Blink支持了二十多個事業部/群,同時運行了上千個實時計算job,每秒處理的日志數峰值達到驚人的4.7億。因此Blink的可靠性和穩定性保障變得極其重要,搜索事業部的質量團隊為此專門成立了Blink測試小組,通過一年多的努力,建立了從代碼質量到持續集成再到預發測試的全面的測試體系,幫助Blink的質量取得大幅提高。

Blink測試平臺介紹

Blink測試團隊為Blink質量量身打造Blink測試平臺,內容如下圖所示:

Blink測試平臺包含了三個測試階段: 代碼質量校驗階段,主要進行靜態代碼掃描、單元測試和基于minicluster的測試;集成測試階段,主要是進行功能測試、性能測試和帶有破壞性的穩定性測試;而預發測試階段,主要是利用用戶的job進行仿真測試,并在版本發布之前做最后的版本兼容性測試。

平臺選取部分測試集合納入到precommit的驗證中,可盡早發現代碼中問題,而大規模的功能、性能、穩定性測試,通常作為dailybuild的集合。另外,Blink測試平臺建立了較為完善的質量度量體系,除去對代碼覆蓋率的統計及變化的分析,還可一鍵生成測試報告,并對不同版本的質量進行橫向對比。

代碼質量校驗階段

代碼質量校驗階段是整個Blink質量保障的基礎。主要包含單元測試,利用aone提供的"集團代碼規約掃描"工具對代碼進行規范掃描,單機運行的基于minicluster的集成測試,只有這三個階段都測試通過后才允許Blink代碼提交到項目git。

功能測試

Blink功能測試框架使用defender,該框架是由pytest[1]改造而來,很好地支持了BlinkSql測試的特性,并支持第三方插件的引入。在測試集群中可以端到端的對某一場景進行精準測試。具體流程如下圖所示,支持IDE和Jenkins兩種觸發模式,yarn_job、yarn_session和local三種case運行調度模式。執行結束后通過web頁面或郵件的形式對結果進行展示,并對運行結果進行持久化。具有如下優勢:

1、case的統一調度與精細化管理:現在Blink在defender上有12個場景4000多個case,可以每天定時進行dailyrun,如果某一類別的case出現問題可單獨執行,并可在頁面上顯示詳情。

2、case的三種運行模式滿足了不同場景的測試需求:其中yarn_session模式對一個模塊中存在sqlCase的場景較為適用,可大大減少與Yarn交互的時間。

3、case靈活配置:不僅可以支持系統配置,對每個case集所需資源(slot,memory等)或集群其他配置的不同進行單獨配置。

4、一個case可同時支持批和流兩種運行類型。

5、client類型靈活擴展:可對現有數據存儲和服務進行集成和擴展。現已支持多類型data store讀寫服務,yarn_session的啟動,Blink job交互等。

性能測試

Blink作為實時大數據處理引擎,其對單位時間內的數據處理能力和數據處理的實時性提出了非常嚴苛的要求。因此,性能測試是整個Blink測試中非常重要的一環,是衡量Blink新版本能否發布的核心標準之一。

Blink的性能測試主要包含Operator性能測試、SQL性能測試和runtime性能測試:

Operator指構成SQL語義的一個原子操作,例如Sum,Aggregate等,是一個不能再分割的算子。Operator的性能測試主要用于監控單個算子在整個開發過程中的性能變化,以保證局部處理的優化和提高。目前,Operator的測試分成兩個部分:單個算子的性能測試和算子組合的性能測試。Operator測試以Daily Run的方式反饋性能的變化。

SQL性能測試主要用于監控版本開發過程中單個SQL的性能變化。TPCH和TPCDS是業界SQL標準性能測試集,分別有22和103個測試用例。測試平臺將其引入到Blink性能測試中,以更全面地衡量Blink的性能變化。

Runtime性能測試主要為了保障runtime層面性能不回退,主要包含端到端性能測試和模塊性能測試。端到端性能測試首先根據梳理出測試場景,關注各場景job在指定數據量下的job運行時間,模塊性能測試主要包含網絡層性能測試,調度層性能測試,failover性能測試等,更關注在特定場景下job的處理時間。

性能測試未來規劃是將E2E性能測試、模塊級別性能測試和參數調整整體聯動起來,使其能夠更好協助開發定位性能問題root cause和查看參數調優效果。

穩定性測試

對于支持高并發、多節點,集群物理環境復雜的分布式系統來說,類似磁盤打滿、網絡延遲等物理節點的異常很難避免。Blink作為一個高可用的分布式系統,必然要做到在異常情況下也能保證系統的穩定運行及數據的正常產出。“避免失敗的最好方法就是不斷地失敗”,因此,在Blink任務運行期間將可能發生的異常模擬出來,就能夠驗證Blink的穩定性。

我們把異常場景分為兩類:一類是"黑猴子",該類場景與運行環境相關,包括機器重啟、網絡異常、磁盤異常、cpu異常等,這部分異常主要用shell命令來模擬;另一類異常是"白猴子",此類場景與Blink job相關,包括rpc消息超時,task異常,heart beat消息超時等,主要通過byteman[2]軟件注入的方式來實現。在穩定性測試中,monkey作為調度會隨機選取上述異常場景進行組合,以模擬線上可能出現的所有異常場景。

考慮到Blink支持任務failover的特性和穩定性測試的自動運行,我們把穩定性測試設定為一輪輪的迭代循環,每一輪迭代都包含釋放出monkey,提交任務,等待job恢復,校驗四個階段,校驗主要包含checkpoint,container及slot資源等是否符合預期,校驗失敗就報警,校驗成功后通過后進入下一輪迭代,以驗證任務在長時間運行下的任務穩定性。

穩定性測試架構分為四層:組件層主要包含測試Blink job,monkeys和dumper;action層包含job啟動,狀態校驗,輸出校驗等;執行層包含service,monkey操作等,monkey操作時會根據ssh到具體機器,執行monkey操作;最上層是WebUI。詳情如下圖所示:

預發測試?

Blink預發測試階段主要通過克隆線上的真實任務和數據來進行復雜業務邏輯和大數據量的測試。因此,Blink 預發測試是對代碼質量校驗和集成測試的補充以及整個測試流程的完善,是Blink版本發布的最后一道關卡。

Blink預發測試主要分為兩個部分:仿真測試和兼容性測試。

仿真測試

仿真測試對Blink的功能、性能和穩定性等基礎測試指標進行進一步地衡量,并將開發中的版本與當前的線上版本進行橫向比較。因此,仿真測試能夠盡早發現各種功能、性能退化和穩定性問題,從而提高上線版本的質量。

仿真測試主要分為環境克隆,環境適配和測試運行三個階段:

環境克隆

環境克隆是實現整個仿真測試的基礎,包括線上任務的挑選、克隆和測試數據的采樣。

Blink的線上任務分散在多個不同的工程中,數量較多。雖然,每一個線上任務都有其內在的業務邏輯,但是,不同的任務可以根據其主要的處理邏輯進行歸類,例如,以Agg操作為主的任務集合,以Sum操作為主的任務集合等,因此,Blink仿真測試需要對線上任務進行甄別,挑選出其中最具有代表性的任務。

仿真測試的測試數據集是當前線上任務輸入數據的采樣,僅在數據規模上有差異,并且,可以根據測試需求的不同進行動態地調節,從而實現對測試目標的精確衡量。

環境適配

環境適配是仿真測試過程中的初始化階段,主要進行測試用例的修改,使其能夠正常運行。該過程主要包括兩個步驟:更改測試數據輸入源和測試結果輸出地址和更新任務的資源配置。

測試運行

測試運行是仿真測試流程中的實際執行模塊,包括測試用例的運行和結果反饋兩個部分。

Blink仿真測試包括功能測試、性能測試和穩定性測試等模塊,不同的測試模塊具有不同的衡量標準和反饋方式。這些測試模塊的測試結果與代碼質量校驗和集成測試的結果一起構成Blink測試的結果集。

性能測試和功能測試以仿真任務和采樣數據作為輸入,對比和分析任務在不同執行引擎上的執行過程和產出。其中,性能測試重點考察執行過程中不同執行引擎對資源的利用率、吞吐量等性能指標。功能測試則將執行的最終結果進行對比。需要特別指出的是,在功能測試中,線上版本的運行結果被假定為真,即當線上版本的執行結果與開發版本的執行結果不同時,認為開發版本的執行存在錯誤,需要修復開發中引入的錯誤。

穩定性測試重點關注仿真測試任務在線上克隆環境、大數據量和長時間運行條件下的穩定性。其以Blink開發版本作為唯一的執行引擎,通過收集執行過程中的資源利用情況、吞吐量、failover等指標來進行度量。

兼容性測試

Blink兼容性測試主要用于發現Blink新、舊版本之間的兼容性問題,從而為線上任務升級Blink執行引擎的版本提供依據。目前,兼容性測試主要分為靜態檢查和動態運行兩個階段,其中,靜態檢查是整個兼容性測試的基礎。

靜態檢查

靜態檢查主要用于分析線上任務在不同執行引擎下生成執行計劃的不同,包括兩個方面的內容:

?●??新的執行引擎生成執行計劃的正確性及生成執行計劃的時間長短。

?●??新、舊版本的執行引擎生成的執行計劃是否兼容。

在靜態檢查中,若新的執行引擎不能正確地生成執行計劃,或者生成執行計劃的時間超出預期,都可以認為靜態檢查失敗,Blink新版本中存在異常或者缺陷,需要查找原因。當新版本能夠正確地生成執行計劃時,若新、舊版本的執行引擎生成的執行計劃不兼容,那么,需要將對比結果反饋給開發人員以判斷該執行計劃的更改是否符合預期;若執行計劃兼容或者執行計劃的更改符合預期,則可以直接進行運行時測試。

動態運行測試

Blink動態運行測試利用仿真測試中的功能測試模塊來進行任務的運行,是升級Blink新版本之前的最后一輪測試。若任務能夠正常啟動且測試結果符合預期,則認為該任務可以自動升級,反之,則需要人工介入進行手動升級。

展望

通過一年多的努力,Blink整體質量已經有很大幅度的提高,Blink的測試方法和工具也越來越成熟,Blink回饋社區之際,我們會逐步將測試工具一起輸出,回饋更多的社區開發測試者,與此同時,隨著Blink用戶群的壯大,Blink業務開發者對于業務任務的質量保證需要日漸高漲,Blink測試團隊未來會提供更多質量保證和開發效率工具,進一步提升Blink開發者工程效率。

原文鏈接?

轉載于:https://my.oschina.net/u/1464083/blog/2933870

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537451.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

numpy中一些常見計算

文章目錄 numpy中的一些常見計算代碼方差標準差參考文獻numpy中的一些常見計算 代碼 import numpy as np from scipy import stats# 示例數據 data = np.array([1, 2,

system函數_自學C++基礎教程【函數】

函數的概念一個函數由:函數的返回值類型、函數名、參數表、函數體 這4個部分組成。int Add( int _a , int _b ) {return _a _b; }該函數 Add 完成對兩個整型數據的求和功能。函數的調用方式: 函數名(參數表);…

寧波政務云資源的介紹與申請

介紹 如圖所示: 寧波政務云分公共服務區與資源共享區。 公共服務區 公共服務區,一般部署允許互聯網訪問的系統,數據不敏感,不重要的,可對外開發的系統。 該區允許互聯網訪問,不允許訪問資源共享區&…

redis查數據

1 連接服務 12345[rootredis1-20 ~]# telnet 127.0.0.1 6380Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is ^].#用telnet也能登錄,但是無法查看key的value12[rootredis1-20 src]# ./redis-cli -p 6380#redis可能有好幾個服務,要指定端…

python幫助文檔在哪_python文檔在哪里

對于Python中一些不清楚的模塊,可以通過文檔學習如何使用,但是python文檔在哪里呢?這個問題我們可以使用Python命令進行查看。方法一 在python命令行輸入以下內容help(time) # 很詳細的模塊文檔 help(time.localtime()) # 很詳細的函數文檔 h…

政務云公共服務區與資源共享區數據交換的方式

上文《寧波政務云資源的介紹與申請》介紹過,公共服務區與資源共享區是不能互訪的,只能是資源共享區單向訪問公共服務區。 我有一項目,要能互聯網訪問,又要訪問“寧波大數據共享平臺”的接口,“寧波大數據共享平臺”在…

Java程序員的IntelliJ IDEA使用教程

前言 博主是Java程序員,以前一直都用myeclipse來開發的,說實話感覺myeclipse毫無美感可言,后來經過同事介紹,認識了IDEA,一眼就相中了IDEA黑色的主題風格,自此就拋棄了舊愛myeclipse。當時還不懂IDEA功能上…

python中random函數用法_random函數的用法

展開全部 用法: 1、隨2113機生成(0,1)之間的浮點數 random.random() 2、隨機生成100-200的整數5261 random.randint(100,200) 3、隨機產生范圍為410210間隔為2的數 random.randrange(0,11,2) 注:這里輸出(0,2,4,6,8,10…

提防易怒的危機

我工作多年,多年來認識一些官場、商場的人。 我與他們相處時,深深體會到太忙、太累的主管,常呈現的狀態是“易怒”。 這些人精神繃得太緊,體力透支,睡眠不足,開會太久,長期都在趕進度。 易怒…

2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) 思路: A Exam 思路:水題 代碼: #include<bits/stdc.h> using namespace std; int main(){int k;scanf("%d",&k);char s1[1010],s2[1010];scanf("%s%s",s1,s2);int same0;int ns…

python random()*10的值不可能是_Python

Python 生成隨機數、隨機字符串 #!/usr/bin/python # -*- coding: UTF-8 -*- import random import string # 隨機整數&#xff1a; print random.randint(1,50) # 隨機選取0到100間的偶數&#xff1a; print random.randrange(0, 101, 2) # 隨機浮點數&#xff1a; print rand…

Prince2與PMP的區別

p2有7個原則&#xff0c;7個主題&#xff0c;7個流程&#xff0c;即37二十一。 P2有26個管理產品模板。 2009版本是經典版本&#xff0c;2017版本與2009版本內容基本沒變&#xff0c;梳理了目錄&#xff0c;使內容更加有可讀性。 P2是非常好的項目管理方法論&#xff0c;任何…

html實體編碼_深入研究瀏覽器解析和XSS有效負載編碼

翻譯文章&#xff0c; 原文&#xff1a;Deep dive into browser parsing and XSS payload encoding[1]這篇博客文章將深入探討HTML&#xff0c;URL和JavaScript的規范和解析器&#xff0c;以及它們之間的交互如何在跨站點腳本轉義中有所作為。對于您而言&#xff0c;這可能很難…

2021-02-03-延長一天時間的有效方法

方法1&#xff1a;給對的事情花時間 分清事情輕重緩急&#xff0c;做了對的事情會讓人感到開心。有個原則&#xff0c;就是事后回想這件事&#xff0c;會讓自己感到開心。 比如玩了一晚上游戲和學習&#xff0c;可能更多人的開心是后者。 比如健身運動與長時間學習&#xff…

[洛谷P1341]無序字母對

題目大意&#xff1a;給一張無向圖&#xff0c;找一條字典序最小的歐拉路徑 題解&#xff1a;若圖不連通或有兩個以上的奇數點&#xff0c;則沒有歐拉路徑&#xff0c;可以$dfs$&#xff0c;在回溯時把這個節點加入答案 卡點&#xff1a;沒有在回溯時加入答案&#xff0c;導致出…

產品部門四大角色——PM/PD/UE/UI

按照產品從規劃到最終成型的任務流方向&#xff0c;從抽象到具體、商業到技術的過程&#xff0c;涉及產品經理、產品設計師、用戶體驗師、視覺設計師四個角色。 PM&#xff1a;產品經理&#xff0c;俗稱老大。一個產品&#xff0c;首先由PM來分析細分市場、目標客戶的訴求&…

拉取遠程分支_git clone切換分支步驟,代理設置,作者信息設置

1.克隆遠程倉庫git clone git地址2.查看所有分支git branch –a3.切換分支git checkout branchName4.查看當前所在分支git branch5.拉取代碼git pull6.提交代碼git add file/folder git commit -m comment git push可能遇到的問題&#xff1a;A.error: fatal: unable to acce…

[學習筆記]半平面交

一個直線把平面分成兩部分&#xff0c;就是兩個半平面 處理這兩個平面的交的信息&#xff0c;就是半平面交 推薦&#xff1a; 計算幾何之半平面交算法模板及應用 bzoj 2618 半平面交模板學習筆記 【總結】半平面交 可以用于求任意多邊形交&#xff0c;任意多邊形內核。 &#x…

Project計算項目進度

1.設立根節點 2.資源列表 3.資源成本 4.基準 在任務分配狀況 視圖里&#xff0c;添加“基線工時”“實際工時”“BCWS(計劃&#xff09;”“ACWP(實際&#xff09;”“BCWP&#xff08;掙值&#xff09;”&#xff0c;“SV(>0 提前&#xff0c;<0 延后&#xff09;”、…

jquery動態綁定事件的方法_Jquery綁定事件及動畫效果

綁定事件bind(type, data, fuc)one(type, data, fuc) //只執行一次常見事件類型名稱含義blur失去焦點focus獲得焦點load加載resize重置大小scroll滾動unload卸載click點擊dblclick雙擊mousedown鼠標按下mouseup鼠標彈起mousemove鼠標移動mouseover鼠標懸停mouseout鼠標移走mous…