xxl-job工作原理解析


XXL-JOB是一個分布式任務調度平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展。現已開放源代碼並接入多家公司線上產品線,開箱即用。在眾多XXL-Job平台的特征中,有如下幾條需要關注的:

1、使用簡單:支持通過Web頁面對任務配置,降低操作任務的難度;

2、動態:支持動態修改任務狀態、啟動/停止任務,以及終止運行中任務,即時生效;

3、調度中心HA(中心式):調度采用中心式設計,“調度中心”自研調度組件並支持集群部署,可保證調度中心HA;

4、執行器HA(分布式):任務分布式執行,任務”執行器”支持集群部署,可保證任務執行HA;

5、注冊中心: 執行器會周期性自動注冊任務, 調度中心將會自動發現注冊的任務並觸發執行。同時,也支持手動錄入執行器地址;

6、彈性擴容縮容:一旦有新執行器機器上線或者下線,下次調度時將會重新分配任務;

7、觸發策略:提供豐富的任務觸發策略,包括:Cron觸發、固定間隔觸發、固定延時觸發、API(事件)觸發、人工觸發、父子任務觸發;

其他的特性這里不贅述了,有興趣的同學可以去官網查看。

 

3.XXL-Job系統組成

在XXL-Job的設計思路中將調度行為抽象形成“調度中心”公共平台,而平台自身並不承擔業務邏輯,“調度中心”負責發起調度請求。將任務抽象成分散的JobHandler,交由“執行器”統一管理,“執行器”負責接收調度請求並執行對應的JobHandler中業務邏輯。因此,“調度”和“任務”兩部分可以相互解耦,提高系統整體穩定性和擴展性。

如圖1 所示,我們來分別描述調度中心和執行器肩負的工作:

  • 調度中心: 負責管理調度信息,按照調度配置發出調度請求,自身不承擔業務代碼。調度系統與任務解耦,提高了系統可用性和穩定性,同時調度系統性能不再受限於任務模塊; 支持可視化、簡單且動態的管理調度信息,包括任務新建,更新,刪除,任務報警等,所有上述操作都會實時生效,同時支持監控調度結果以及執行日志,支持執行器Failover

  • 執行器: 負責接收調度請求並執行任務邏輯。任務模塊專注於任務的執行等操作,開發和維護更加簡單和高效; 接收“調度中心”的執行請求、終止請求和日志請求等

 

圖1

4.XXL-Job工作原理

前面說了調度中心和執行器之間是如何分工的,接下來介紹一下兩者之間是如何協同工作的,這部分也是XXL-Job的工作原理,如圖2所示。

  1. 任務執行器根據配置的調度中心的地址,啟動注冊線程向調度中心的執行器管理發起自動注冊。執行器管理中保存着注冊執行器,后續會根據這個注冊信息給執行器下發任務。

  2. 如果此時有需要執行的任務,任務管理模塊會根據執行器管理中注冊的執行器信息,向任務執行器下發任務。任務執行器中的任務執行服務接受到任務以后會將任務發送到待執行任務的隊列中,隊列中的任務會由執行線程JobHandler依次獲取並且執行。這里會維護一個任務執行的線程池,池中就是一個個JobHandler線程,它們是執行任務的主力軍。

  3. JobHandler執行器基於線程池執行任務,並把執行結果放入執行結果隊列中,同時會把執行日志寫入任務日志文件中,以供日志查詢。然后通知毀掉線程,告知任務執行完畢,回調線程會通知調度中心的監控運維模塊,任務執行完畢。

  4. 用戶可以在調度中心查看任務日志,其過程是通過發送日志查詢請求給任務執行器中的日志服務,然后查詢任務日志文件實現的。

 

圖2

 


免責聲明!

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



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