
quartz
支援叢集和分布式,但是沒有友好的管理界面,功能單一,對于管理調用的任務比較困難。
quartz使用資料庫鎖。在quartz的叢集解決方案裡有張表scheduler_locks,quartz采用了悲觀鎖的方式對triggers表進行行加鎖,以保證任務同步的正确性。一旦某一個節點上面的線程擷取了該鎖,那麼這個Job就會在這台機器上被執行,同時這個鎖就會被這台機器占用。同時另外一台機器也會想要觸發這個任務,但是鎖已經被占用了,就隻能等待,直到這個鎖被釋放。
quartz的分布式排程政策是以資料庫為邊界資源的一種異步政策。各個排程器都遵守一個基于資料庫鎖的操作規則進而保證了操作的唯一性。同時多個節點的異步運作保證了服務的可靠。但這種政策有自己的局限性:叢集特性對于高CPU使用率的任務效果很好,但是對于大量的短任務,各個節點都會搶占資料庫鎖,這樣就出現大量的線程等待資源。這種情況随着節點的增加會越來越嚴重。
缺點:quartz的分布式隻是解決了高可用的問題,并沒有解決任務分片的問題,還是會有單機處理的極限。
xxl-job
輕量級分布式任務排程平台,其核心設計目标是開發迅速、學習簡單、輕量級、易擴充。目前擁有大量的it企業使用該架構,文檔齊全,教程很多,遇到問題也比較容易找到解決方案。
主要特性
- 簡單:支援通過Web頁面對任務進行CRUD操作,操作簡單,一分鐘上手;
- 排程中心HA(中心式):排程采用中心式設計,“排程中心”基于叢集Quartz實作并支援叢集部署,可保證排程中心HA;
- 執行器HA(分布式):任務分布式執行,任務"執行器"支援叢集部署,可保證任務執行HA;
- 彈性擴容縮容:一旦有新執行器機器上線或者下線,下次排程時将會重新配置設定任務;
- 分片廣播任務:執行器叢集部署時,任務路由政策選擇"分片廣播"情況下,一次任務排程将會廣播觸發叢集中所有執行器執行一次任務,可根據分片參數開發分片任務;
- 動态分片:分片廣播任務以執行器為次元進行分片,支援動态擴容執行器叢集進而動态增加分片數量,協同進行業務處理;在進行大資料量業務操作時可顯著提升任務處理能力和速度。
- 動态:支援動态修改任務狀态、暫停/恢複任務,以及終止運作中任務,即時生效;
- 注冊中心: 執行器會周期性自動注冊任務, 排程中心将會自動發現注冊的任務并觸發執行。同時,也支援手動錄入執行器位址;
- 一緻性:“排程中心”通過DB鎖保證叢集分布式排程的一緻性, 一次任務排程隻會觸發一次執行;
其他特性
- 路由政策:執行器叢集部署時提供豐富的路由政策,包括:第一個、最後一個、輪詢、随機、一緻性HASH、最不經常使用、最近最久未使用、故障轉移、忙碌轉移等;
- 故障轉移:任務路由政策選擇"故障轉移"情況下,如果執行器叢集中某一台機器故障,将會自動Failover切換到一台正常的執行器發送排程請求。
- 阻塞處理政策:排程過于密集執行器來不及處理時的處理政策,政策包括:單機串行(預設)、丢棄後續排程、覆寫之前排程;
- 任務逾時控制:支援自定義任務逾時時間,任務運作逾時将會主動中斷任務;
- 任務失敗重試:支援自定義任務失敗重試次數,當任務失敗時将會按照預設的失敗重試次數主動進行重試;其中分片任務支援分片粒度的失敗重試;
- 任務失敗告警;預設提供郵件方式失敗告警,同時預留擴充接口,可方面的擴充短信、釘釘等告警方式;
- 事件觸發:除了"Cron方式"和"任務依賴方式"觸發任務執行之外,支援基于事件的觸發任務方式。排程中心提供觸發任務單次執行的API服務,可根據業務事件靈活觸發。
- 任務進度監控:支援實時監控任務進度;
- 腳本任務:支援以GLUE模式開發和運作腳本任務,包括Shell、Python、NodeJS、PHP、PowerShell等類型腳本;
- 排程線程池:排程系統多線程觸發排程運作,確定排程精确執行,不被堵塞;
- 資料加密:排程中心和執行器之間的通訊進行資料加密,提升排程資訊安全性;
- 郵件報警:任務失敗時支援郵件報警,支援配置多郵件位址群發報警郵件;
- 運作報表:支援實時檢視運作資料,如任務數量、排程次數、執行器數量等;以及排程報表,如排程日期分布圖,排程成功分布圖等;
- 全異步:任務排程流程全異步化設計實作,如異步排程、異步運作、異步回調等,有效對密集排程進行流量削峰,理論上支援任意時長任務的運作;
功能齊全,文檔也很齊全,有使用教程,但是上手門檻稍微高了;
Elastic-Job
分布式排程解決方案,由兩個互相獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成。
Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分布式任務的協調服務。選擇該項目可以滿足大多數it企業的需求。
Elastic-Job-Cloud使用Mesos + Docker的解決方案,額外提供資源治理、應用分發以及程序隔離等服務。
- 輕量級無中心化:Elastic-Job-Lite并無作業排程中心節點,而是基于部署作業架構的程式在到達相應時間點時各自觸發排程。
- 靈活的增删改查作業,集中式管理排程作業
- 支援高可用:一旦執行作業的伺服器崩潰,等待執行的伺服器将會在下次作業啟動時替補執行。開啟失效轉移功能效果更好,可以保證在本次作業執行時崩潰,備機立即啟動替補執行。
- 支援分片:作業分片一緻性,保證同一分片在分布式環境中僅一個執行執行個體
- 任務監控:通過監聽Elastic-Job-Lite的zookeeper注冊中心的幾個關鍵節點即可完成作業運作狀态監控功能
- 一緻性:使用zookeeper作為注冊中心,為了保證作業的在分布式場景下的一緻性,一旦作業與注冊中心無法通信,運作中的作業會立刻停止執行,但作業的程序不會退出,這樣做的目的是為了防止作業重分片時,将與注冊中心失去聯系的節點執行的分片配置設定給另外節點,導緻同一分片在兩個節點中同時執行。
- 同時支援動态擴容,将任務拆分為n個任務項後,各個伺服器分别執行各自配置設定到的任務項。一旦有新的伺服器加入叢集,或現有伺服器下線,elastic-job将在保留本次任務執行不變的情況下,下次任務開始前觸發任務重分片
Saturn
基于當當Elastic Job代碼基礎上自主研發的任務排程系統,是唯品會開源的分布式作業排程平台,取代傳統的Linux Cron/Spring Batch Job的方式,做到統一配置,統一監控,任務高可用以及分片并發處理。主要是去中心化,高可用,可分片,動态擴容,有認證和授權功能。
主要特性
- 支援多種語言作業,語言無關(Java/Go/C++/PHP/Python/Ruby/shell)
- 支援秒級排程
- 支援作業分片并行執行
- 支援依賴作業串行執行
- 支援作業高可用和智能負載均衡
- 支援異常檢測和自動失敗轉移
- 支援異地容災
- 支援多個叢集部署
- 支援跨機房區域部署
- 支援彈性動态擴容
- 支援優先級和權重設定
- 支援docker容器,容器化友好
- 支援cron時間表達式
- 支援多個時間段暫停執行控制
- 支援逾時告警和逾時強殺控制
- 支援灰階釋出
- 支援異常、逾時和無法高可用作業監控告警和簡易的故障排除
- 支援失敗率最高、最活躍和負荷最重的各域各節點TOP10的作業統計
優點:源碼清晰,學習入手容易。應用部署簡單,提供運維控制台,集中管理作業,運維控制台功能強大,提供作業統計報表 ,告警,增删改查作業,作業統一配置。
以上是各個分布式任務排程架構技術的對比,建議使用Saturn,saturn是elastic的更新版本。
本文連結:https://blog.csdn.net/thver/article/details/87480971
作者: thver