Elastic-job說明

 

基本概念

Elastic-Job 是一個分佈式調度解決方案,由兩個相互獨立的子項目 Elastic-Job-Lite Elastic-Job-Cloud 組成。

  • Elastic-Job-Lite 定位爲輕量級無中心化解決方案,使用 jar 包的形式提供分佈式任務的協調服務。
  • Elastic-Job-Cloud 使用 Mesos + Docker(TBD) 的解決方案,額外提供資源治理、應用分發以及進程隔離等服務。

Elastic-Job-Lite Elastic-Job-Cloud 提供同一套 API 開發作業,開發者僅需一次開發,即可根據需要以 Lite Cloud 的方式部署。

Elastic-Job-Lite 架構圖

https://static.oschina.net/uploads/img/201705/26123315_WkLi.png

Elastic-Job-Cloud 架構圖

https://static.oschina.net/uploads/img/201705/26123318_NOUy.png

 

Elastic-Job-Lite定位爲輕量級無中心化解決方案,使用jar包的形式提供最輕量級的分佈式任務的協調服務,外部依賴僅Zookeeper

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

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

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

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

作業高可用
Elastic-Job-Lite提供最安全的方式執行作業。將分片總數設置爲1,並使用多於1臺的服務器執行作業,作業將會以1n從的方式執行。一旦執行作業的服務器崩潰,等待執行的服務器將會在下次作業啓動時替補執行。

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

實現原理

彈性分佈式實現

  • 第一臺服務器上線觸發主服務器選舉。主服務器一旦下線,則重新觸發選舉,選舉過程中阻塞,只有主服務器選舉完成,纔會執行其他任務。
  • 某作業服務器上線時會自動將服務器信息註冊到註冊中心,下線時會自動更新服務器狀態。
  • 主節點選舉,服務器上下線,分片總數變更均更新重新分片標記。
  • 定時任務觸發時,如需重新分片,則通過主服務器分片,分片過程中阻塞,分片結束後纔可執行任務。如分片過程中主服務器下線,則先選舉主服務器,再分片。
  • 通過上一項說明可知,爲了維持作業運行時的穩定性,運行過程中只會標記分片狀態,不會重新分片。分片僅可能發生在下次任務觸發前。
  • 每次分片都會按服務器IP排序,保證分片結果不會產生較大波動。
  • 實現失效轉移功能,在某臺服務器執行完畢後主動抓取未分配的分片,並且在某臺服務器下線後主動尋找可用的服務器執行任務。

註冊中心數據結構

註冊中心在定義的命名空間下,創建作業名稱節點,用於區分不同作業,所以作業一旦創建則不能修改作業名稱,如果修改名稱將視爲新的作業。作業名稱節點下又包含4個數據子節點,分別是config, instances, sharding, serversleader

 

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