1. 程式人生 > >分散式多工排程的初探

分散式多工排程的初探

一、Quartz

在java程式設計中,常用的比較出名的任務排程工具是Quartz,該工具提供豐富的介面來幫助我們實現基於Cron Expression的定時任務以及按照固定頻率執行任務等。在執行過程中,該工具會建立執行緒池,所有任務會線上程池中執行,注意預設的執行緒池中執行緒數量有限,僅有10個執行緒,可以通過程式修改執行緒池的容量。當提交的job多於執行緒池的容量的時候,多餘的job會在等待佇列裡進行等待,如果有一些提交的job屬於長時間執行或者阻塞的任務,這樣的job多於執行緒池的容量的時候就會導致一些job長時間處在等待佇列裡不能執行,這時候排程器處於阻塞狀態。針對這個問題,可以採用增加執行緒池的容量的方法處理。

Quartz也支援分散式的實現,任務狀態資訊都儲存在資料庫中,基於資料庫引擎及 High-Available 的策略(叢集的一種策略)自動協調每個節點的 Quartz。不過Quartz在實現過程中效率相對低下,因為對於任務量比較大的場景下,會涉及到頻繁的任務切換,進而會涉及頻繁的加鎖和解鎖,甚至會帶來叢集間的主執行緒等待。

二、Elastic-Job,LTS, Niubi-Job

    這三者的定位就是要執行高效的分散式任務排程,這三者都是開源的,可以直接從Github上找到,都有一定的文件參考。目前對這三者處於瞭解階段,後續如果有進一步發現,再進行進一步的總結。