如何實現自己的任務排程系統?--開源軟體誕生18

35歲的程式設計師發表於2020-10-14

任務排程與ERP難捨難分--第18篇

用日誌記錄“開源軟體”的誕生

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

博主開源地址:

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

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

如何實現自己的任務排程系統?--開源軟體誕生18

 

什麼是任務排程?

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

它解決了什麼問題

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

為什麼單獨研發排程系統?

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

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

設計思路探討

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

1、統一靈活的任務配置

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

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

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

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

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

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

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

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

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

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

拋磚引玉的分散式

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

後記

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

 

【碼雲】或【GitHub】搜尋“赤龍ERP”點選星標,亦可加入我們! 讓我們從小開始做點偉大的事!與開發者交流 kzca2000

相關文章