天天看點

blink測試技術介紹引言:Blink測試平台介紹展望

引言:

  flink是面向資料流處理和批處理的分布式開源計算架構。2016年阿裡巴巴引入flink架構,改造為blink,将其運用到搜尋及推薦的離線實時計算中,成功解決了搜尋、推薦實時大資料量計算的痛點。2017年5月,集團整合了所有流計算産品,決定以blink引擎為基礎,打造一款全球領先的實時計算引擎。2017年的雙11,blink支援了20多個事業部/群,同時運作了1100+實時計算job,每秒處理的日志數峰值達到驚人的4.7億。集團内部Blink使用者群已經超過1400+的開發同學。是以blink品質保障變得極其重要,blink測試團隊成立一年多的時間,從無到有,逐漸建立起完整的blink測試體系,全方位保障blink品質。

Blink測試平台介紹

  blink測試團隊為blink品質量身打造blink測試平台,内容如下圖所示:

blink測試技術介紹引言:Blink測試平台介紹展望

   blink測試平台包含了三個測試階段: 代碼品質校驗階段,主要進行靜态代碼掃描、單元測試和基于minCluster的測試;內建測試階段主要是進行功能測試、性能測試和帶有破壞性的穩定性測試;而預發測試階段,主要是利用使用者的job進行仿真測試,并在版本釋出之前做最後的版本相容性測試。

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

代碼品質校驗階段:

  代碼品質校驗階段是整個blink品質保障的基礎。主要包含單元測試,利用aone提供的"集團代碼規約掃描"工具對代碼進行規範掃描,單機運作的基于minicluster的內建測試,隻有這三個階段都測試通過後才允許blink代碼送出到項目git。

blink測試技術介紹引言:Blink測試平台介紹展望

功能測試:

   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測試中非常重要的一環,是衡量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運作時間,子產品性能測試主要包含網絡層性能測試,排程層性能測試,faliover性能測試等,更關注在特定場景下job的處理時間。

  性能測試未來規劃是将E2E性能測試,子產品級别性能測試和參數調整整體關聯起來,使其能夠更好協助開發定位性能問題root cause和檢視參數調優效果。

blink測試技術介紹引言:Blink測試平台介紹展望

穩定性測試:

  對于支援高并發、多節點,叢集實體環境複雜的分布式系統來說,類似磁盤打滿、網絡延遲等實體節點的異常很難避免。Blink作為一個高可用的分布式系統,必然要做到在異常情況下也能保證系統的穩定運作及資料的正常産出。“避免失敗的最好方法就是不斷地失敗”,是以,在Blink任務運作期間将可能發生的異常模拟出來,就能夠驗證blink的穩定性。

  我們把異常場景分為兩類:一類是"黑猴子",該類場景與運作環境相關,包括機器重新開機、網絡異常、磁盤異常、cpu異常等,這部分異常主要用shell指令來模拟;另一類異常是"白猴子",此類場景與blink job相關,包括rpc消息逾時,task異常,heartbeat消息逾時等,主要通過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預發測試主要分為兩個部分:仿真測試和相容性測試。

仿真測試

  仿真測試對Blink的功能、性能和穩定性等基礎測試名額進行進一步地衡量,并将開發中的版本與目前的線上版本進行橫向比較。是以,仿真測試能夠盡早發現各種功能、性能退化和穩定性問題,進而提高上線版本的品質。

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

環境克隆

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

blink測試技術介紹引言:Blink測試平台介紹展望

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

  仿真測試的測試資料集是目前線上任務輸入資料的采樣,僅在資料規模上有差異,并且,可以根據測試需求的不同進行動态地調節,進而實作對測試目标的精确衡量。

環境适配

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

測試運作

  測試運作是仿真測試流程中的實際執行子產品,包括測試用例的運作和結果回報兩個部分。

  Blink仿真測試包括功能測試、性能測試和穩定性測試等子產品,不同的測試子產品具有不同的衡量标準和回報方式。這些測試子產品的測試結果與代碼品質校驗和內建測試的結果一起構成Blink測試的結果集。

blink測試技術介紹引言:Blink測試平台介紹展望

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

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

相容性測試

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

靜态檢查

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

  1、新的執行引擎生成執行計劃的正确性及生成執行計劃的時間長短

  2、新、舊版本的執行引擎生成的執行計劃是否相容

blink測試技術介紹引言:Blink測試平台介紹展望

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

動态運作測試

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

展望

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

[1] pytest: 

https://docs.pytest.org/en/latest/

[2] byteman:

http://byteman.jboss.org/

我們緻力打造優秀的大資料測試團隊,歡迎有興趣的同學加入,釘釘聯系—枕水 or 溶月