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

任務調度與ERP難捨難分–第18篇

用日誌記錄「開源軟體」的誕生

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

部落客開源地址:

碼云://gitee.com/redragon/redragon-erp

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

 

什麼是任務調度?

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

它解決了什麼問題

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

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

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

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

設計思路探討

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

1、統一靈活的任務配置

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

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

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

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

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

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

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

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

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

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

拋磚引玉的分散式

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

後記

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

 

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