1. 程式人生 > >Elastic_Job學習(1)——Elastic_Job簡介

Elastic_Job學習(1)——Elastic_Job簡介

概述

Elastic-Job是一個分散式排程解決方案,由兩個相互獨立的子專案Elastic-Job-Lite和Elastic-Job-Cloud組成。 
Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分散式任務的協調服務;Elastic-Job-Cloud採用自研Mesos Framework的解決方案,額外提供資源治理、應用分發以及程序隔離等功能。 —— [Elastic-Job]

功能列表

  1. 任務分片

    將整體任務拆解為多個子任務 
    可通過伺服器的增減彈性伸縮任務處理能力 
    分散式協調,任務伺服器上下線的全自動發現與處理

  2. 多工型別

    基於時間驅動的任務 
    基於資料驅動的任務(TBD) 
    同時支援常駐任務和瞬時任務 
    多語言任務支援

  3. 雲原生

    完美結合Mesos或Kubernetes等排程平臺 
    任務不依賴於IP、磁碟、資料等有狀態元件 
    合理的資源排程,基於Netflix的Fenzo進行資源分配

  4. 容錯性

    支援定時自我故障檢測與自動修復 
    分散式任務分片唯一性保證 
    支援失效轉移和錯過任務重觸發

  5. 任務聚合

    相同任務聚合至相同的執行器統一處理 
    節省系統資源與初始化開銷 
    動態調配追加資源至新分配的任務

  6. 易用性

    完善的運維平臺 
    提供任務執行歷史資料追蹤能力 
    註冊中心資料一鍵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。在不丟失分片項的情況下,最大限度的利用現有資源提高吞吐量。

整體架構圖

Elastic-Job