任務框架需求:
- 分布式任務框架,需要一個分布式鎖,只有獲得鎖的才能執行任務。
解決方案:redis,zookeeper,DB - 運維工具。日志、監控、任務配置等
- 高可用性。保證任務能夠執行,且不重復跑。用途就是在分布式環境使用,可以輕松實現。
第1、3點不復雜代碼量也不多,可以自己實現,但第2點需要大量的code,需要從網上找現成的框架。
下面調研了4種分布式任務調度框架,整理如下:
可用性 | 運維工具 | 復雜度 | 任務分片 | 並行調度 | 文檔 | 部署方式 | |
tbschedule | 高 | 豐富 | 中 | 支持 | 支持 | 一般 | 獨立 |
clover | 高 | 豐富 | 高 | 支持 | 支持 | 一般 | 獨立 |
quartz | 中 | 無 | 低 | 不支持 | 支持 | 豐富 | 集成 |
elastic-job | 高 | 豐富 | 中 | 支持 | 支持 | 豐富 | 獨立 |
tbschedule:淘寶開源的產品,除官方資料外其他資料較少
clover:系統較復雜(mongo存儲數據,redis緩存,zk調度,ZeroMQ做server和client通信)
quartz:以DB來作為分布式鎖,與主體項目一起部署,團隊學習成本低,但是缺少運維工具(日志、監控、任務配置等)。任務按時間觸發,獲取DB中行級鎖,執行任務。
elastic-job:當當網開源產品,資料比tbschedule豐富。作業服務器啟動后向zk注冊,選舉主服務器。任務觸發時,由主服務器分片,然后按IP獲取分片並執行。
結論:elastic-job勝出。