Saturn分布式調度之系統架構簡介


VOL 134

12

2020-06

今天距2021年202天

這是ITester軟件測試小棧第134次推文

點擊上方藍字“ITester軟件測試小棧“關注我,每周一五早上 07:30准時推送。

微信公眾號后台回復“資源測試工具包”領取測試資源,回復“21天打卡”一起學習成長,打怪升級。

本文2657字,閱讀約需7分鍾

在系統需要運行大量耗時定時任務的場景下,單使用類似Quartz或者Spring Task等定時任務框架無法滿足對並發處理性能、監控管理及運維拓展的要求,以下,介紹公司使用過的分布式定時任務調度框架Saturn。

Saturn簡介

1

簡介

Saturn 任務調度系統是唯品會開源的一個分布式任務調度平台,取代傳統的Linux Cron/Spring Batch Job的方式,做到全域統一配置,統一監控,任務高可用以及分片並發處理,更重要的是其還支持容器化技術,同時Saturn中的任務不僅支持Java,還支持Shell腳本,目前Saturn已經在Github上開源。

2

架構

Saturn定時任務調度的最小單位是分片,即任務的一個並行執行單元。Saturn的基本任務就是將任務分成多個分片,並將每個分片通過算法調度到對應的Executor上去執行。

3

特性

  • 支持多種語言作業,語言無關(Java/Go/C++/PHP/Python/Ruby/shell);

  • 支持秒級調度;

  • 支持作業分片並行執行;

  • 支持依賴作業串行執行;

  • 支持作業高可用和智能負載均衡;

  • 支持異常檢測和自動失敗轉移;

  • 支持多個集群部署;

  • 支持彈性動態擴容;

  • 支持優先級和權重設置;

  • 支持docker容器,容器化友好;

  • 支持cron時間表達式;

  • 支持多個時間段暫停執行控制;

  • 支持超時告警和超時強殺控制;

  • 支持灰度發布;

  • 支持異常、超時和無法高可用作業監控告警和簡易的故障排除;

  • 支持失敗率最高、最活躍和負荷最重的各域各節點TOP10的作業統計;

4

專業術語


組織名:每個namespace可以屬於一個組織。

作業(Job)和作業分片:作業(Job)是可以獨立運行的腳本(shell作業)或者具備某項功能的函數實現(java、消息作業)。作業可並發執行在多個執行節點(Executor)上,作業分片定義了作業並發執行的數量以及執行編號。

(Namespace):代表一組特定的執行結點和作業,作業必須而且只能屬於某一個特定的域。一個域下通常有若干個執行結點,執行結點必須而且只能屬於某一個特定的域。域下的全部執行結點功能是對等的,域下的任何一下執行結點均有能力執行域下的全部作業,換言之,作業可以在域下任何一個執行結點執行。

執行結點(Executor):是調用並執行作業的程序,它通過定時(quartz)驅動來觸發調用事件,並最終調用作業的執行入口(shell腳本或者函數實現),執行結點只會處理指派給它的作業分片。

控制台(Console):統一配置界面,可以使用控制台來查看作業狀態,執行結點狀態和執行日志,添加、刪除作業,修改作業屬性。

Saturn架構

1

原理

Saturn的基本原理是將作業在邏輯上划分為若干個作業分片,通過作業分片調度器將作業分片指派給特定的執行結點。執行結點通過quartz觸發執行作業的具體實現(以shell為例,則為shell腳本),在執行的時候,會將分片序號和參數作為參數傳入(見圖1)。作業的實現邏輯需分析分片序號和分片參數,並以此為依據來調用具體的實現(比如一個批量處理數據庫的作業,可以划分0號分片處理1-10號數據庫,1號分片處理11-20號數據庫)。

2

場景

有時候由於測試業務的需要,我們需要按照工作流的方式去調度作業:JobA調度成功后調度 JobB, JobB調度成功后調度 JobC。Saturn提供這個能力,我們稱之為作業編排。作業編排將作業形成一個有向無環圖,按照圖的順序依次調用。

3

組成

Saturn包括兩大部分,Saturn Console和Saturn Executor。

Saturn Console是一個GUI,用於作業/Executor管理,統計報表展現,系統配置等功能。它是整個調度系統的大腦:將作業任務分配到各Executor。為了實現Console的高可用性。希望Console有多台服務器所組成,只需要在多台不同的服務器的環境變量中指定相同的VIP_SATURN_CONSOLE_CLUSTER即可,至於VIP_SATURN_CONSOLE_CLUSTER的值可以自行指定,只是一個集群標識而已。

Saturn Executor是執行任務的Worker:按照作業配置的要求去執行部署於Executor所在容器或物理機當中的作業腳本和代碼。

今日問題:在電商項目中,你是如何進行壓力測試的? 

(歡迎在下方留言區發表你的看法)

留言福利:

抽取截止至6月14日留言點贊最多的一位幸運er,可獲得:漫畫算法:小灰的算法之旅(Python篇)

(幸運er名單將在下周一推文的置頂留言處公布)


以上


That‘s all

更多系列文章

敬請期待

ITester軟件測試小棧

往期內容寵幸

1.Python接口自動化-接口基礎(一)


2.Python接口自動化-接口基礎(二)


3.Python接口自動化-requests模塊之get請求


4.Python接口自動化-requests模塊之post請求


5.Python接口自動化之cookie、session應用


6.Python接口自動化之Token詳解及應用


7.Python接口自動化之requests請求封裝


8.Python接口自動化之pymysql數據庫操作


9.Python接口自動化之logging日志


10.Python接口自動化之logging封裝及實戰

想獲取更多最新干貨內容

快來星標 置頂 關注

每周一、三、五 07:30見

<<  滑動查看下一張圖片  >>


 后台 回復"資源"取干貨

回復"21天打卡"一起打怪升級

測試交流Q群:727998947

點亮一下在看,你更好看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM