Elastic_Job學習(1)——Elastic_Job簡介
概述
Elastic-Job是一個分散式排程解決方案,由兩個相互獨立的子專案Elastic-Job-Lite和Elastic-Job-Cloud組成。
Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分散式任務的協調服務;Elastic-Job-Cloud採用自研Mesos Framework的解決方案,額外提供資源治理、應用分發以及程序隔離等功能。 —— [Elastic-Job]
功能列表
任務分片
將整體任務拆解為多個子任務
可通過伺服器的增減彈性伸縮任務處理能力
分散式協調,任務伺服器上下線的全自動發現與處理多工型別
基於時間驅動的任務
基於資料驅動的任務(TBD)
同時支援常駐任務和瞬時任務
多語言任務支援雲原生
完美結合Mesos或Kubernetes等排程平臺
任務不依賴於IP、磁碟、資料等有狀態元件
合理的資源排程,基於Netflix的Fenzo進行資源分配容錯性
支援定時自我故障檢測與自動修復
分散式任務分片唯一性保證
支援失效轉移和錯過任務重觸發任務聚合
相同任務聚合至相同的執行器統一處理
節省系統資源與初始化開銷
動態調配追加資源至新分配的任務易用性
完善的運維平臺
提供任務執行歷史資料追蹤能力
註冊中心資料一鍵dump用於備份與除錯問題
基本概念
1. 分片概念
任務的分散式執行,需要將一個任務拆分為多個獨立的任務項,然後由分散式的伺服器分別執行某一個或幾個分片項。
例如:有一個遍歷資料庫某張表的作業,現有2臺伺服器。為了快速的執行作業,那麼每臺伺服器應執行作業的50%。 為滿足此需求,可將作業分成2片,每臺伺服器執行1片。作業遍歷資料的邏輯應為:伺服器A遍歷ID以奇數結尾的資料;伺服器B遍歷ID以偶數結尾的資料。 如果分成10片,則作業遍歷資料的邏輯應為:每片分到的分片項應為ID%10,而伺服器A被分配到分片項0,1,2,3,4;伺服器B被分配到分片項5,6,7,8,9,直接的結果就是伺服器A遍歷ID以0-4結尾的資料;伺服器B遍歷ID以5-9結尾的資料。
2. 分片項與業務處理解耦
Elastic-Job並不直接提供資料處理的功能,框架只會將分片項分配至各個執行中的作業伺服器,開發者需要自行處理分片項與真實資料的對應關係。
3. 個性化引數的適用場景
個性化引數即shardingItemParameter,可以和分片項匹配對應關係,用於將分片項的數字轉換為更加可讀的業務程式碼。
例如:按照地區水平拆分資料庫,資料庫A是北京的資料;資料庫B是上海的資料;資料庫C是廣州的資料。 如果僅按照分片項配置,開發者需要了解0表示北京;1表示上海;2表示廣州。 合理使用個性化引數可以讓程式碼更可讀,如果配置為0=北京,1=上海,2=廣州,那麼程式碼中直接使用北京,上海,廣州的列舉值即可完成分片項和業務邏輯的對應關係。
核心理念
1. 分散式排程
Elastic-Job-Lite並無作業排程中心節點,而是基於部署作業框架的程式在到達相應時間點時各自觸發排程。
註冊中心僅用於作業註冊和監控資訊儲存。而主作業節點僅用於處理分片和清理等功能。
2. 作業高可用
Elastic-Job-Lite提供最安全的方式執行作業。將分片總數設定為1,並使用多於1臺的伺服器執行作業,作業將會以1主n從的方式執行。
一旦執行作業的伺服器崩潰,等待執行的伺服器將會在下次作業啟動時替補執行。開啟失效轉移功能效果更好,可以保證在本次作業執行時崩潰,備機立即啟動替補執行。
3. 最大限度利用資源
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。在不丟失分片項的情況下,最大限度的利用現有資源提高吞吐量。