Elastic-Job介紹

Elastic-Job噹噹網基於quartz 二次開發的彈性分佈式任務調度系統,功能豐富強大,採用zookeeper實現分 布式協調,實現任務高可用以及分片。它由兩個相互獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成,使用Elastic-Job可以快速實現分佈式任務調度。 


提供的功能:

分佈式調度協調:在分佈式環境中,任務能夠按指定的調度策略執行,並且能夠避免同一任務多實例重複執行。 

豐富的調度策略: 基於成熟的定時任務作業框架Quartz cron表達式執行定時任務。 

彈性擴容縮容:當集羣中增加某一個實例,它應當也能夠被選舉並執行任務;當集羣減少一個實例時,它所執行的任務能被轉移到別的實例來執行。 

失效轉移:某實例在任務執行失敗後,會被轉移到其他實例執行。 

錯過執行作業重觸發 :若因某種原因導致作業錯過執行,自動記錄錯過執行的作業,並在上次作業完成後自動觸發。 

支持並行調度 :支持任務分片,任務分片是指將一個任務分爲多個小任務項在多個實例同時執行。 

作業分片一致性 :當任務被分片後,保證同一分片在分佈式環境中僅一個執行實例。 

支持作業生命週期操作 :可以動態對任務進行開啓及停止操作。 

豐富的作業類型:支持Simple、DataFlow、Script三種作業類型,後續會有詳細介紹。 

Spring整合以及命名空間支持 :對Spring支持良好的整合方式,支持spring自定義命名空間,支持佔位符。 

運維平臺 :提供運維界面,可以管理作業和註冊中心。 

分片概念 

作業分片是指任務的分佈式執行,需要將一個任務拆分爲多個獨立的任務項,然後由分佈式的應用實例分別執行某 一個或幾個分片項。 

例如:Elastic-Job快速入門中文件備份的例子,現有2臺服務器,每臺服務器分別跑一個應用實例。爲了快速的執行作業,那麼可以將作業分成4片,每個應用實例個執行2片。作業遍歷數據的邏輯應爲:實例1查找text和image 類型文件執行備份;實例2查找radio和video類型文件執行備份。 如果由於服務器擴容應用實例數量增加爲4,則 作業遍歷數據的邏輯應爲:4個實例分別處理text、image、radio、video類型的文件。 

可以看到,通過對任務合理的分片化,從而達到任務並行處理的效果,最大限度的提高執行作業的吞吐量。 

分片項與業務處理解耦 

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

最大限度利用資源

將分片項設置爲大於服務器的數量,最好是大於服務器倍數的數量,作業將會合理的利用分佈式資源,動態的分配分片項。 

例如: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類型作業。這裏主要講解前兩者。Script類型作業意爲腳本類型作業,支持shell,python,perl等所有類型腳本,使用不多,可以參見github文檔。 

SimpleJob需要實現SimpleJob接口,意爲簡單實現,未經過任何封裝,與quartz原生接口相似。

Dataflflow類型的定時任務需實現DataflflowJob接口,該接口提供2個方法可供覆蓋,分別用於抓取(fetchData)和處理(processData)數據。Dataflflow類型用於處理數據流,它和SimpleJob不同,它以數據流的方式執行,調用fetchData抓取數據,直到抓取不到數據才停止作業。 

非流式處理數據則只會在每次作業執行過程中執行一次fetchData方法和processData方法,隨即完成本次作業。  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章