如何實現自己的任務調度系統?--開源軟件誕生18


任務調度與ERP難舍難分--第18篇

用日志記錄“開源軟件”的誕生

【點亮星標】----祈盼着一個鼓勵

博主開源地址:

碼雲:https://gitee.com/redragon/redragon-erp

GitHub:https://github.com/redragon1985/redragon-erp

 

什么是任務調度?

任務調度這個詞貌似很高大上,其實不難理解。我們知道一個應用它執行任務的方式默認是實時且同步的,而所謂的任務調度就是讓任務非實時的或異步的進行。換一個詞也可以把它理解成計划任務或定時任務。

它解決了什么問題

要分析任務調度所解決的問題,先要看這個任務的特點以及需要如何執行。首先這類任務一般是系統根據一定的預設邏輯去代替人工完成的一件事。其次這類事無需實時完成或需要在某個特定時間完成,任務啟動后只需在后台靜默執行,執行完成后有條件的通知用戶或用戶自主查詢執行結果即可。由此可見,以上需求是傳統的應用無法做到的,所以就需要任務調度系統去實現它。

為什么單獨研發調度系統?

從Java技術角度有很多定時任務的實現方式,比如Timer、ScheduledExecutor、Quartz,無論是哪種方式都可以簡單的在一個項目中去集成定時任務的功能,而無需單獨開發項目。那為什么我們在進行系統設計時,要提出任務調度系統這一思路呢?

那就需要先來分析下信息化系統的特點,首先信息化系統從功能設計的角度是分散的,即一個項目或模塊一般只完成一件事的情況下,我們從需要設計很多很多的應用才能滿足用戶需求。就拿ERP舉例,ERP包含計划預算、訂單管理、庫存管理、財務管理等一系列的模塊或系統,而這些系統都是與業務直接關聯的,所以哪個系統也離不開計划任務的功能,如果按照上述方式,我們必不可少的要將每個項目中都整合一套完整的計划任務組件才能滿足我們的需求。這種做法不僅開發時更加麻煩、同時也帶來了維護或擴展復雜度的指數提升,這種設計的風險可想而知。所以獨立的任務調度系統就應運而生。

設計思路探討

那么我們如何設計這個系統呢?我們來重點關注一下幾點。

1、統一靈活的任務配置

(1)任務實現可配置:任務的具體邏輯可以通過方法或存儲過程去實現,然后通過配置方式根據不同參數去自定義不同的任務需求。

(2)定時執行配置:定義好任務的邏輯后我們就需要配置執行邏輯,什么時間執行,是固定時間還是循環,何時開始何時結束,單次執行還是多次執行都需要詳細的配置。

(3)線程配置:任務需要同步執行還是異步執行,是守護線程還是非守護線程。異常處理機制等都需要分別配置好。

(4)任務流程配置:有的時候我們不僅僅需要執行一個任務,可能需要執行一系列的任務,而任務的執行又是有先后之分的,這時候我們可以將一個一個配置好的任務串聯成一個流程去執行。

2、便捷的任務啟動和反饋

(1)啟動任務:所有的任務配置好以后我們就需要啟動任務,通過API的方式啟動是最優的選擇。

(2)反饋機制:對於任務的執行效果要對用戶有一個反饋機制,給用戶通知、直接回調或反寫都是可以選擇的方式。

3、監控任務執行情況和日志追蹤

(1)任務監控:任務的執行過程不是一帆風順的,可能成功,也可能出現執行異常、意外終止、人工終止等多種情況,所以需要根據任務的執行情況顯示執行狀態,並根據需要,讓用戶可重啟或繼續任務。

(2)日志追蹤:如果出現重新執行仍然無法成功的情況,那么多數一定是出現了程序異常,所以日志的記錄就必不可少,可讓維護人員根據日志處理問題並解決問題。

拋磚引玉的分布式

當一個任務調度系統研發完成后,隨着使用頻率的增加,一定會遇到瓶頸,所以我們就會考慮到部署多個任務調度系統形成分布式,但部署多個系統,就會涉及到注冊中心、負載、路由、數據同步等各種問題。本文只是在討論如何設計任務調度系統的功能,並不涉及分布式調度的思路。在此不展開談,只是拋磚引玉,有興趣的朋友可以深入探索。

后記

如果您對我們正在做的開源軟件感興趣,歡迎各種形式的合作,作為貢獻者或直接加入我們!讓我們一起打造一套開源的信息化解決方案。

 

帶你了解不一樣的【赤龍ERP】:https://www.redragon-erp.com(赤龍官網查看企業數字化解決方案)


免責聲明!

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



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