文章來源 : Radish 任務搶佔系統git
項目開源地址 gitee: https://gitee.com/shensuoyao/radishgithub
項目開源地址 github:https://github.com/shensuoyao/radish安全
項目開發過程當中不可避免須要用到定時任務,開發定時任務有時候是個頭疼的事情。尤爲是對中小項目來講,任務每每被嵌入在項目中。然而定時任務一般是難以測試的,這樣就致使了定時任務的開發困難,測試困難。伴隨着項目的迭代更新,任務也跟着每次從新部署。產生的不可控致使bug常出。網絡
聰明的開發者每每會把任務和項目分開,爲了達到解耦的目的,最簡單粗暴的方法就是使用腳本語言編寫定時任務,而後配置到系統調度器crontab中,這樣業務項目就跟定時任務解耦了。雖然這樣作對於中小項目的定時任務能夠達到必定的效果,但一樣也存在一些問題,最簡單好比任務的日誌,你須要知道任務的執行成功與失敗,有時候還須要查看任務的日誌數據是否知足要求等等,對於這種狀況就顯得很不方便了。併發
這裏推薦一款開源的任務搶佔系統,適用於中小項目的任務管理。部署簡單,依賴少。測試
Radish 任務搶佔系統,根據做者的介紹,該系統適用於中小項目,可貴的是竟然還實現了任務依賴和監控。spa
Radish區別與傳統的任務調度系統點在於其理念新穎,傳統的任務調度系統是經過主控調度器生成任務,並選擇執行機執行。任務調度不夠靈活,對於複雜的任務依賴問題難於解決,當任務併發量增大時,主調度器就顯得有些吃力了。而任務的調度器和執行機之間經過RPC雙向依賴執行,在專有網絡或私有集羣中通常沒法實現雙向依賴部署(出於安全的考慮,通常是專有網絡能訪問外網,而外網沒法直接訪問專有網絡中的機器)。Radish則將任務解釋爲「配置」,而具體的任務執行解釋爲「事件」。 調度器經過任務「配置」,每次調度生成一個可執行「事件」。客戶機經過單項RPC向主控服務請求觸發可執行「事件」,執行機之間經過搶佔的方式獲取可執行事件到本地執行,最後將執行結果反饋給主控服務。這種模式解決了由主控來統一調度任務的複雜度。而且經過任務的「配置」,能夠很方便的定義任務之間的依賴關係。當生成可執行事件的時候,若是某一事件的執行必須在另外一事件完成後的條件下才能執行,那麼該事件就會一直等待,直到其依賴的事件被執行後才能被執行。經過這種方式很好的解決了任務鏈的場景(舉個簡單的例子,工做流中的各節點事件,就能夠定義爲一個獨立的任務鏈來執行)。日誌