1. 程式人生 > >Elastic-Job實現原理

Elastic-Job實現原理

原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/theory/

實現原理

彈性分散式實現

  • 第一臺伺服器上線觸發主伺服器選舉。主伺服器一旦下線,則重新觸發選舉,選舉過程中阻塞,只有主伺服器選舉完成,才會執行其他任務。

  • 某作業伺服器上線時會自動將伺服器資訊註冊到註冊中心,下線時會自動更新伺服器狀態。

  • 主節點選舉,伺服器上下線,分片總數變更均更新重新分片標記。

  • 定時任務觸發時,如需重新分片,則通過主伺服器分片,分片過程中阻塞,分片結束後才可執行任務。如分片過程中主伺服器下線,則先選舉主伺服器,再分片。

  • 通過上一項說明可知,為了維持作業執行時的穩定性,執行過程中只會標記分片狀態,不會重新分片。分片僅可能發生在下次任務觸發前。

  • 每次分片都會按伺服器IP排序,保證分片結果不會產生較大波動。

  • 實現失效轉移功能,在某臺伺服器執行完畢後主動抓取未分配的分片,並且在某臺伺服器下線後主動尋找可用的伺服器執行任務。

註冊中心資料結構

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

概覽

註冊中心資料結構

config節點

作業全域性配置資訊

子節點名 臨時節點 描述
jobClass 作業實現類名稱
shardingTotalCount 作業分片總數
cron 作業啟動時間的cron表示式
shardingItemParameters 分片序列號和個性化引數對照表
jobParameter 作業自定義引數
monitorExecution 監控作業執行時狀態
processCountIntervalSeconds 統計作業處理資料數量的間隔時間
concurrentDataProcessThreadCount 同時處理資料的併發執行緒數
fetchDataCount 每次抓取的資料量
streaming-process 是否流式處理資料
如果流式處理資料, 則fetchData
不返回空結果將持續執行作業
如果非流式處理資料, 則處理資料完成後作業結束
maxTimeDiffSeconds 允許的本機與註冊中心的時間誤差秒數
failover 是否開啟失效轉移
misfire 是否開啟錯過任務重新執行
description 作業描述資訊
scriptCommandLine 指令碼型作業作業執行命令列

servers節點

作業伺服器資訊,子節點是作業伺服器的IP地址。IP地址節點的子節點儲存詳細資訊。同一臺作業伺服器只能執行一個相同的作業例項,因為作業執行時是按照IP註冊和管理的。

子節點名 臨時節點 描述
hostName 作業伺服器名稱
status 作業伺服器狀態,分為READY和RUNNING
用於表示伺服器在等待執行作業還是正在執行作業
如果status節點不存在則表示作業伺服器未上線
disabled 作業伺服器狀態是否禁用
可用於部署作業時,先禁止啟動,部署結束後統一啟動
sharding 該作業伺服器分到的作業分片項
多個分片項用逗號分隔
如:0, 1, 2代表該伺服器執行第1, 2, 3片分片
processSuccessCount 統計一段時間內處理資料成功的數量
統計間隔可通過config\processCountIntervalSeconds配置
processFailureCount 統計一段時間內處理資料失敗的數量
統計間隔可通過config\processCountIntervalSeconds配置
paused 暫停作業的標記,暫停的作業不會終止排程器執行。作業程式再次啟動時不會清理此標記
shutdown 關閉作業的標記,關閉的作業將停止排程,並可通過控制檯刪除。只有作業程式再次啟動時才會清理此標記
trigger 立刻觸發作業的標記,作業在不與上次執行中作業衝突的情況下將立刻啟動,並在啟動後自動清理此標記

execution節點

執行時資訊,子節點是分片項序號,從零開始,至分片總數減一。分片項序號的子節點儲存詳細資訊。可通過配置config\monitorExecutionfalse關閉記錄作業執行時資訊。

子節點名 臨時節點 描述
running 分片項正在執行的狀態
如果沒有此節點,並且沒有completed節點,表示該分片未執行
completed 分片項執行完成的狀態
下次作業開始執行時會清理
failover 如果該分片項被失效轉移分配給其他作業伺服器,則此節點值記錄執行此分片的作業伺服器IP
lastBeginTime 該分片項最近一次的開始執行時間
nextFireTime 該分片項下次作業觸發時間
lastCompleteTime 該分片項最近一次的結束執行時間
misfire 是否開啟錯過任務重新執行

leader節點

作業伺服器主節點資訊,分為electionshardingexecution三個子節點。分別用於主節點選舉,分片和作業執行時處理。

leader節點是內部使用的節點,如果對作業框架原理不感興趣,可不關注此節點。

子節點名 臨時節點 描述
election\host 主節點伺服器IP地址
一旦該節點被刪除將會觸發重新選舉
重新選舉的過程中一切主節點相關的操作都將阻塞
election\latch 主節點選舉的分散式鎖
curator的分散式鎖使用
sharding\necessary 是否需要重新分片的標記
如果分片總數變化,或作業伺服器節點上下線或啟用/禁用,以及主節點選舉,會觸發設定重分片標記
作業在下次執行時使用主節點重新分片,且中間不會被打斷
作業執行時不會觸發分片
sharding\processing 主節點在分片時持有的節點
如果有此節點,所有的作業執行都將阻塞,直至分片結束
主節點分片結束或主節點崩潰會刪除此臨時節點
execution\necessary 是否需要修正作業執行時分片項資訊的標記
如果分片總數變化,會觸發設定修正分片項資訊標記
作業在下次執行時會增加或減少分片項數量
execution\cleaning 主節點在清理上次作業執行時狀態時所持有的節點
每次開始新作業都需要清理上次執行完成的作業資訊
如果有此節點,所有的作業執行都將阻塞,直至清理結束
主節點分片結束或主節點崩潰會刪除此臨時節點
failover\items\分片項 一旦有作業崩潰,則會向此節點記錄
當有空閒作業伺服器時,會從此節點抓取需失效轉移的作業項
failover\items\latch 分配失效轉移分片項時佔用的分散式鎖
curator的分散式鎖使用

流程圖

作業啟動

作業啟動

作業執行

作業執行



===========================================================================================================