Elastic Job 分佈式任務調度

Elastic Job1.1前言**python

咱們開發定時任務通常都是使用quartz或者spring-task,不管是使用quartz仍是spring-task,咱們至少會遇到如下兩個痛點:spring

l  不敢輕易跟着應用服務器多節點部署,可能會重複屢次執行而引起系統邏輯的錯誤。shell

l  quartz的集羣僅僅只是用來HA,節點數量的增長並不能給咱們的每次執行效率帶來提高,即不能實現水平擴展。數據庫

說明:Elastic-job分佈式任務調度,就能夠幫咱們解決上面兩個痛點。安全

1.2介紹**服務器

Elastic-Job是噹噹開源的一款很是好用的分佈式任務調度框架,由兩個相互獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成。Elastic-Job-Lite定位爲輕量級無中心化解決方案,使用jar包的形式提供分佈式任務的協調服務。Elastic-Job-Lite這也是本次所要講解和使用的子項目。框架

主要功能運維

l  分佈式調度協調分佈式

l  彈性擴容縮容fetch

l  失效轉移

l  錯過執行做業重觸發

l  做業分片一致性,保證同一分片在分佈式環境中僅一個執行實例

l  自診斷並修復分佈式不穩定形成的問題

l  支持並行調度

l  支持做業生命週期操做

l  豐富的做業類型

l  Spring整合以及命名空間提供

l  運維平臺

官網http://www.elasticjob.io/

1.3基本概念**

n  分片概念

任務的分佈式執行,須要將一個任務拆分爲多個獨立的任務項,而後由分佈式的服務器分別執行某一個或幾個分片項。

例如:有一個遍歷數據庫某張表的做業,現有2臺服務器。爲了快速的執行做業,那麼每臺服務器應執行做業的50%。 爲知足此需求,可將做業分紅2片,每臺服務器執行1片。

n  分片項與業務處理解耦

Elastic-Job並不直接提供數據處理的功能,框架只會將分片項分配至各個運行中的做業服務器,開發者須要自行處理分片項與真實數據的對應關係。

n  個性化參數的適用場景

個性化參數即shardingItemParameter,能夠和分片項匹配對應關係,用於將分片項的數字轉換爲更加可讀的業務代碼。

例如:按照地區水平拆分數據庫,數據庫A是北京的數據;數據庫B是上海的數據;數據庫C是廣州的數據。 若是僅按照分片項配置,開發者須要瞭解0表示北京;1表示上海;2表示廣州。 合理使用個性化參數可讓代碼更可讀,若是配置爲0=北京,1=上海,2=廣州,那麼代碼中直接使用北京,上海,廣州的枚舉值便可完成分片項和業務邏輯的對應關係。

n  分佈式調度

Elastic-Job-Lite並沒有做業調度中心節點,而是基於部署做業框架的程序在到達相應時間點時各自觸發調度。註冊中心僅用於做業註冊和監控信息存儲。而主做業節點僅用於處理分片和清理等功能。

n  做業高可用

Elastic-Job-Lite提供最安全的方式執行做業。將分片總數設置爲1,並使用多於1臺的服務器執行做業,做業將會以1主n從的方式執行。

一旦執行做業的服務器崩潰,等待執行的服務器將會在下次做業啓動時替補執行。開啓失效轉移功能效果更好,能夠保證在本次做業執行時崩潰,備機當即啓動替補執行。

n  最大限度利用資源

Elastic-Job-Lite也提供最靈活的方式,最大限度的提升執行做業的吞吐量。將分片項設置爲大於服務器的數量,最好是大於服務器倍數的數量,做業將會合理的利用分佈式資源,動態的分配分片項。

例如:3臺服務器,分紅10片,則分片項分配結果爲服務器A=0,1,2;服務器B=3,4,5;服務器C=6,7,8,9。 若是服務器C崩潰,則分片項分配結果爲服務器A=0,1,2,3,4;服務器B=5,6,7,8,9。在不丟失分片項的狀況下,最大限度的利用現有資源提升吞吐量。

做業類型說明

Elastic-Job提供Simple、Dataflow和Script 3種做業類型。 方法參數shardingContext包含做業配置、分片和運行時信息。可經過getShardingTotalCount(),getShardingItem()等方法分別獲取分片總數,運行在本做業服務器的分片序列號等。

lSimple類型做業

意爲簡單實現,未經任何封裝的類型。需實現SimpleJob接口。該接口僅提供單一方法用於實現,此方法將定時執行。與Quartz原生接口類似,但提供了彈性擴縮容和分片等功能。

lDataflow類型做業

Dataflow類型用於處理數據流,需實現DataflowJob接口。該接口提供2個方法可供實現,分別用於抓取(fetchData)和處理(processData)數據。

lScript類型做業

意爲腳本類型做業,支持shell,python,perl等全部類型腳本。只需經過控制檯或代碼配置scriptCommandLine便可,無需編碼。執行腳本路徑可包含參數,參數傳遞完畢後,做業框架會自動追加最後一個參數爲做業運行時信息。

相關文章
相關標籤/搜索