項目背景及社區力量
X-Job : 大眾點評公司下員工許雪里、貢獻者 3人; github有2470star、1015fork | QQ討論群6個 | 有登記在使用的超過40家公司 | 文檔齊全
E-Job : 當當網開源,貢獻者17人; github有2524star、1015fork | QQ討論群1個、源碼討論群1個 | 有登記在使用的超過50家公司 | 文檔齊全 | 有明確的發展計划
支持集群部署
X-Job : 集群部署唯一要求為:保證每個集群節點配置(db和登陸賬號等)保持一致。調度中心通過db配置區分不同集群。
執行器支持集群部署,提升調度系統可用性,同時提升任務處理能力。集群部署唯一要求為:保證集群中每個執行器的配置項 “xxl.job.admin.addresses/調度中心地址” 保持一致,執行器根據該配置進行執行器自動注冊等操作。
E-Job : 重寫Quartz基於數據庫的分布式功能,改用Zookeeper實現注冊中心
作業注冊中心: 基於Zookeeper和其客戶端Curator實現的全局作業注冊控制中心。用於注冊,控制和協調分布式作業執行。
多節點部署時任務不能重復執行
X-Job : 使用Quartz基於數據庫的分布式功能
E-Job : 將任務拆分為n個任務項后,各個服務器分別執行各自分配到的任務項。一旦有新的服務器加入集群,或現有服務器下線,elastic-job將在保留本次任務執行不變的情況下,下次任務開始前觸發任務重分片。
日志可追溯
X-Job : 支持,有日志查詢界面
E-Job : 可通過事件訂閱的方式處理調度過程的重要事件,用於查詢、統計和監控。Elastic-Job目前提供了基於關系型數據庫兩種事件訂閱方式記錄事件。
監控告警
X-Job : 調度失敗時,將會觸發失敗報警,如發送報警郵件。
任務調度失敗時郵件通知的郵箱地址,支持配置多郵箱地址,配置多個郵箱地址時用逗號分隔
E-Job : 通過事件訂閱方式可自行實現
作業運行狀態監控、監聽作業服務器存活、監聽近期數據處理成功、數據流類型作業(可通過監聽近期數據處理成功數判斷作業流量是否正常,如果小於作業正常處理的閥值,可選擇報警。)、監聽近期數據處理失敗(可通過監聽近期數據處理失敗數判斷作業處理結果,如果大於0,可選擇報警。)
彈性擴容縮容
X-Job : 使用Quartz基於數據庫的分布式功能,服務器超出一定數量會給數據庫造成一定的壓力
E-Job : 通過zk實現各服務的注冊、控制及協調
支持並行調度
X-Job : 調度系統多線程(默認10個線程)觸發調度運行,確保調度精確執行,不被堵塞。
E-Job : 采用任務分片方式實現。將一個任務拆分為n個獨立的任務項,由分布式的服務器並行執行各自分配到的分片項。
高可用策略
X-Job : “調度中心”通過DB鎖保證集群分布式調度的一致性, 一次任務調度只會觸發一次執行;
E-Job : 調度器的高可用是通過運行幾個指向同一個ZooKeeper集群的Elastic-Job-Cloud-Scheduler實例來實現的。ZooKeeper用於在當前主Elastic-Job-Cloud-Scheduler實例失敗的情況下執行領導者選舉。通過至少兩個調度器實例來構成集群,集群中只有一個調度器實例提供服務,其他實例處於”待命”狀態。當該實例失敗時,集群會選舉剩余實例中的一個來繼續提供服務。
失敗處理策略
X-Job : 調度失敗時的處理策略,策略包括:失敗告警(默認)、失敗重試;
E-Job : 彈性擴容縮容在下次作業運行前重分片,但本次作業執行的過程中,下線的服務器所分配的作業將不會重新被分配。失效轉移功能可以在本次作業運行中用空閑服務器抓取孤兒作業分片執行。同樣失效轉移功能也會犧牲部分性能。
動態分片策略
X-Job : 分片廣播任務以執行器為維度進行分片,支持動態擴容執行器集群從而動態增加分片數量,協同進行業務處理;在進行大數據量業務操作時可顯著提升任務處理能力和速度。
執行器集群部署時,任務路由策略選擇”分片廣播”情況下,一次任務調度將會廣播觸發對應集群中所有執行器執行一次任務,同時傳遞分片參數;可根據分片參數開發分片任務;
E-Job : 支持多種分片策略,可自定義分片策略
默認包含三種分片策略: 基於平均分配算法的分片策略、 作業名的哈希值奇偶數決定IP升降序算法的分片策略、根據作業名的哈希值對Job實例列表進行輪轉的分片策略,支持自定義分片策略
elastic-job的分片是通過zookeeper來實現的。分片的分片由主節點分配,如下三種情況都會觸發主節點上的分片算法執行:
a、新的Job實例加入集群
b、現有的Job實例下線(如果下線的是leader節點,那么先選舉然后觸發分片算法的執行)
c、主節點選舉”