分散式2

weixin_41359873發表於2020-10-13

作業2Elastic-Job-lite

分散式排程x協調

1、分散式環境:

,部署到多臺機器或者叢集中(運⾏在分散式叢集環境下,同⼀個定時任務程式部署多份)

在這裡插入圖片描述

2、排程:

按照指定排程策略排程任務,並且能夠避免同⼀任務多例項重複執⾏

排程策略是為了控制任務下發到哪一臺臺環境上

3、分散式排程協調

在這裡插入圖片描述

在分散式環境中,任務能夠按指定的排程策略執⾏,並且能夠避免同⼀任務多例項重複執⾏

分散式任務排程,三個關鍵詞:分散式、任務排程、配置中心。

分散式:平臺是分散式部署的,各個節點之間可以無狀態和無限的水平擴充套件;

任務排程:涉及到任務狀態管理、任務排程請求的傳送與接收、具體任務的分配、任務的具體執行;(這裡又會遇到一共要處理哪些任務、任務要分配到哪些機器上處理、任務分發的時候判斷哪些機器可以用等問題,所以又需要一個可以感知整個叢集執行狀態的配置中心)

配置中心:可以感知整個叢集的狀態、任務資訊的註冊

一個分散式任務排程系統需要以下內容:

web模組、server模組、Scheduler模組、worker模組、註冊中心。

1、Web模組:用來提供任務的資訊,控制任務的狀態、資訊展示等。

2、Server模組:負責接收web端傳來的任務執行的資訊,下發任務排程請求給Scheduler,會去註冊中心進行註冊

3、Scheduler模組:接收server端傳來的排程請求,將任務進行更加細化的拆分然後下發,到註冊中心進行註冊,獲取到可以幹活的worker。

4、Worker模組:負責具體的任務執行。

5、註冊中心。


ElasticJob 是一個分散式排程解決方案,由 2 個相互獨立的子專案 ElasticJob Lite 和 ElasticJob Cloud 組成。

ElasticJob Lite 定位為輕量級無中心化解決方案,使用 jar 的形式提供分散式任務的協調服務;
ElasticJob Cloud 使用 Mesos + Docker(TODO)的解決方案,額外提供資源治理、應用分發以及程式隔離等服務。

ElasticJob 的各個產品使用統一的作業 API,開發者僅需要一次開發,即可隨意部署。

架構:

在這裡插入圖片描述

主要功能介紹

1、分散式排程協調
在分散式環境中,任務能夠按指定的排程策略執⾏,並且能夠避免同⼀任務多例項重複執⾏
2、豐富的排程策略 基於成熟的定時任務作業框架Quartz cron表示式執⾏定時任務
3、彈性擴容縮容

​ 當叢集中增加某⼀個例項,它應當也能夠被選舉並執⾏任務;當叢集減少⼀個例項
時,它所執⾏的任務能被轉移到別的例項來執⾏。
4、失效轉移 彈性擴容縮容在下次作業執行前重分片,但本次作業執行的過程中,下線的伺服器所分配的作業將不 會重新被分配。失效轉移功能可以在本次作業執行中用空閒伺服器抓取孤兒作業分片執行。同樣失效轉移功 能也會犧牲部分效能。
5、錯過執⾏作業重觸發 若因某種原因導致作業錯過執⾏,⾃動記錄錯過執⾏的作業,並在上次作業
完成後⾃動觸發。
6、⽀持並⾏排程 ⽀持任務分⽚,任務分⽚是指將⼀個任務分為多個⼩任務項在多個例項同時執⾏。
7、作業分⽚⼀致性 當任務被分⽚後,保證同⼀分⽚在分散式環境中僅⼀個執⾏例項


在這裡插入圖片描述

功能特性:

  • 分散式排程協調:用 ZK 實現註冊中心
  • 錯過執行作業重觸發(Misfire)
  • 支援並行排程(任務分片)
  • 作業分片一致性,保證同一分片在分散式環境中僅一個執行例項
  • 彈性擴容縮容:將任務拆分為 n 個任務項後,各個伺服器分別執行各自分配到的任務項。一旦有新的伺服器加入叢集,或現有伺服器下線,elastic-job 將在保留本次任務執行不變的情況下,下次任務開始前觸發任務重分片。
  • 失效轉移 failover:彈性擴容縮容在下次作業執行前重分片,但本次作業執行的過程中,下線的伺服器所分配的作業將不會重新被分配。失效轉移功能可以在本次作業執行中用空閒伺服器抓取孤兒作業分片執行。同樣失效轉移功能也會犧牲部分效能。
  • 支援作業生命週期操作(Listener)
  • 豐富的作業型別(Simple、DataFlow、Script)

配置分散式協調服務(zookper)

配置任務(時間、事件、任務邏輯、排程)

建立任務型別物件:任務型別分為:SimpleJob、DataflowJob、ScriptJob

建立排程器,由排程器把上面建立的各個物件關聯起來,觸發任務並寫入zookper的檔案,並初始化排程器

 <dependency>
     <groupId>com.dangdang</groupId>
     <artifactId>elastic-job-lite-spring</artifactId>
     <version>2.1.5</version>
</dependency>

<dependency>
    <artifactId>elastic-job-lite-core</artifactId>
    <groupId>com.dangdang</groupId>
    <version>2.1.5</version>
</dependency>

總的介紹:

ElasticJob

去中心化:沒有中心節點,各個服務是獨立的。是一模一樣的。唯一不一樣的是分片處理邏輯不同。

​ 各個作業節點並不知道自己什麼時間執行什麼任務

在這裡插入圖片描述

任務分片:任務的分散式執行,ElasticJob可以把作業分為多個的task(每⼀個task就是⼀個任務分⽚),每
⼀個task交給具體的⼀個機器例項去處理(⼀個機器例項是可以處理多個task的),但是具體每個task
執⾏什麼邏輯由我們⾃⼰來指定
在這裡插入圖片描述

彈性擴容 :新增加⼀個運⾏例項,它會⾃動註冊到註冊中⼼,註冊中⼼發現新的服務上線,註冊中⼼會通知
ElasticJob 進⾏重新分⽚

1)分⽚項也是⼀個JOB配置,修改配置,重新分⽚,在下⼀次定時運⾏之前會重新調⽤分⽚演算法,那麼
這個分⽚演算法的結果就是:哪臺機器運⾏哪⼀個⼀⽚,這個結果儲存到zk中的,主節點會把分⽚給分好
放到註冊中⼼去,然後執⾏節點從註冊中⼼獲取資訊(執⾏節點在定時任務開啟的時候獲取相應的分
⽚)。
2)如果所有的節點掛掉值剩下⼀個節點,所有分⽚都會指向剩下的⼀個節點,這也是ElasticJob的⾼可
⽤。

在這裡插入圖片描述


分散式 ElasticJob 詳解

https://blog.csdn.net/shadow_zed/article/details/99170221

相關文章