我需要一個大型動態任務集合的日程安排程序。目前我正在尋找resque-scheduler,rufus-scheduler和clockwork。對於選擇使用哪一個(或哪種替代方法)的建議,我將不勝感激。Ruby中的大規模日程安排
一些細節:
- 有一個大的採集任務(最多100K)要定期執行。
- 最短執行時間爲1小時。
- 新任務可能會不時出現。現有任務可能會更改或刪除。
- 調度延遲最小化在這裏不是任務關鍵(可擴展性和可持續性是最重要的)。
- 任務執行不是一項繁重的操作,而且可以很容易地並行。
彙總,我需要的東西比如cron對於Ruby項目,可處理的任務大,動態變化的集合。
更新:我花了一天的時間安排庫實驗,現在我想簡要總結一下新獲得的經驗。
我已經停止了我的注意,在發條和resque調度庫,因爲這些都是更詳細的文檔更成熟的項目。 Resque-scheduler基於rufus-scheduler,而Clockwork則受其啓發,兩者都可用於我正在尋找的解決方案。
兩者都是獨立的服務,應該在單獨的進程中運行,它可以處理幾乎無限量的計劃用於單個或循環執行的任務。任務在線程內執行。
發條優點:
- 它從數據庫中加載預定任務的能力(通過ActiveRecord的或任意的源)。
- 此外,它可以通過輪詢來自數據庫的數據更新來動態更新計劃任務。
發條缺點:
- DB查詢是這裏一個潛在的瓶頸。
- 輪詢間隔爲1分鐘(加上重新計劃所有任務的時間),這有點太慢了。
- 計劃任務尋址(未計劃或更改)沒有記錄,這就是爲什麼使用此功能看起來像一個黑客。
我已經爲Clockwork(這是控制調度的gem的核心部分)實現了一個替代Manager類,允許通過ZeroMQ消息進行調度控制。因此,我的項目中的主要服務可以向調度程序發送命令,例如「每天運行此任務」或「取消調度任務#10」,並且調度程序立即執行每個請求。
我對resque-scheduler的經驗不多,但在這一點上它看起來像是一個更好的解決方案。
resque調度優點:
- Redis的基於持久性。該手冊聲稱,服務重新啓動後可以挽救計劃任務。
- 使用乾淨的API進行動態調度。您只需致電
Resque.remove_schedule(name)
即可放棄特定任務。 - Web UI。不太重要,但很高興有。
resque調度:
- 它需要安裝Redis的。
在仔細觀察後可能會出現其他的東西,但目前沒有別的東西。
這就是我現在擁有的。順便說一句,我已經發布了一些鏈接到計劃相關的Ruby寶石on GitHub。
嘿,有什麼像Resque.list_all_schedule? –