分布式排程的理解

2021-10-24 22:03:09 字數 2976 閱讀 6094

分布式排程,指的是在分布式條件下,定時任務的執行和管理

定時任務是乙個很常見的場景,比如:

主要有兩個特性

運⾏在分布式集群環境下的排程任務,同⼀個定時任務程式可以部署多份,但是只應該有⼀個定時任務在執行

可以把⼀個⼤的作業任務拆分為多個⼩的作 業任務,同時執⾏

特性一: 可以部署多份,只有乙份執行

參見下圖,部署多份只有乙份執行是很有必要的,既可以節約不必要的資源浪費,也可以避免重複執行導致的潛在性錯誤。

特性二: 拆分為小任務執行

當某個定時任務比較重的時候,如果能夠利用分布式特性,將這個任務拆分出去,給多台機器執行,那麼肯定是比較符合我們的實際需求的。

如果說要讓我來實現分布式排程,我可能第一時間想到訊息佇列。

既然說到訊息佇列,可能有個疑問就是定時任務與訊息佇列有什麼區別和聯絡呢?

3.1.1 共同點

非同步處理

⽐如註冊、下單事件 應⽤解耦,不管定時任務作業還是mq都可以作為兩個應⽤之間的⻮輪實現應⽤

解耦這個⻮輪可以中轉 資料,當然單體服務不需要考慮這些,服務拆分的時候往往都會考慮

流量削峰

雙⼗⼀的時候,任務作業和mq都可以⽤來扛流量,後端系統根據服務能⼒定時處理訂單或者 從mq抓取訂單抓取到⼀個訂單到來事件的話觸發處理,對於前端⽤戶來說看到的結果是已經 下單成功了,下單是不受任何影響的

3.1.2區別一般來說,我們不用自己實現乙個分布式框架。如果要使用分布式排程,可以利用一些已經存在的框架。

回憶平時,使用定時任務的乙個常見情況是linux的crontab,使⽤時間表示式(包括:秒、分、時、⽇、周、年) 可以在本機配置定時任務什麼時間去執⾏。

elastic-job是噹噹⽹開源的⼀個分布式排程解決⽅案,也可以用時間表示式完成任務排程。

它是基於quartz⼆次開發的,由兩個相互獨⽴的⼦項 ⽬elastic-job-lite和elastic-job-cloud組成。

3.2.1 主要功能

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

豐富的排程策略 基於成熟的定時任務作業框架quartz cron表示式執⾏定時任務

彈性擴容縮容 當集群中增加某⼀個例項,它應當也能夠被選舉並執⾏任務;當集群減少⼀個例項 時,它所執⾏的任務能被轉移到別的例項來執⾏。

失效轉移 某例項在任務執⾏失敗後,會被轉移到其他例項執⾏

錯過執⾏作業重觸發 若因某種原因導致作業錯過執⾏,⾃動記錄錯過執⾏的作業,並在上次作業 完成後⾃動觸發。

⽀持並⾏排程 ⽀持任務分⽚,任務分⽚是指將⼀個任務分為多個⼩任務項在多個例項同時執⾏。

作業分⽚⼀致性 當任務被分⽚後,保證同⼀分⽚在分布式環境中僅⼀個執⾏例項

3.2.2 安裝

elastic-job依賴於zookeeper進⾏分布式協調,所以需要安裝zookeeper軟體(3.4.6版本以上),關於 zookeeper,此處我們不做詳解,只需要明⽩zookeeper的本質功能: 儲存+通知。

安裝zookeeper

2 進⼊conf⽬錄,cp zoo_sample.cfg zoo.cfg

3 進⼊bin⽬錄,啟動zk服務 啟動 ./zkserver.sh start 停⽌ ./zkserver.sh stop 檢視狀態 ./zkserver.sh status

工程中引入jar包

com.dangdang

elastic-job-lite-core

2.1.5

繼承******job類, 實現方法 ,然後是主類方法:

public

static

void

main

(string[

] args)

3.2.3 測試

可先啟動⼀個程序,然後再啟動⼀個程序(兩個程序模擬分布式環境下,通⼀個定時任務 部署了兩份在⼯作)

兩個程序逐個啟動,觀察現象

關閉其中執⾏的程序,觀察現象

3.2.4 leader節點擊舉機制

多個例項同時建立/leader節點

/leader節點只能建立⼀個,後建立的會失敗,建立成功的例項會被選為leader節點, 執⾏任務

3.2.5 elastic-job-lite輕量級去中⼼化的特點

3.2.6 任務分片

⼀個⼤的⾮常耗時的作業job,⽐如:⼀次要處理⼀億的資料,那這⼀億的資料儲存在資料庫中,如果 ⽤⼀個作業節點處理⼀億資料要很久,在互聯⽹領域是不太能接受的,互聯⽹領域更希望機器的增加去 橫向擴充套件處理能⼒。所以,elasticjob可以把作業分為多個的task(每⼀個task就是⼀個任務分⽚),每 ⼀個task交給具體的⼀個機器例項去處理(⼀個機器例項是可以處理多個task的),但是具體每個task 執⾏什麼邏輯由我們⾃⼰來指定。參見下面的分片示意圖:

strategy策略定義這些分⽚項怎麼去分配到各個機器上去,預設是平均去分,可以定製,⽐如某⼀個機 器負載 ⽐較⾼或者預配置⽐較⾼,那麼就可以寫策略。分⽚和作業本身是通過⼀個註冊中⼼協調的,因 為在分布式環境下,狀態資料肯定集中到⼀點,才可以在分布式中溝通。

3.2.7 彈性擴容

注意:分⽚項也是⼀個job配置,修改配置,重新分⽚,在下⼀次定時運⾏之前會重新調⽤分⽚演算法,那麼 這個分⽚演算法的結果就是:哪台機器運⾏哪⼀個⼀⽚,這個結果儲存到zk中的,主節點會把分⽚給分好 放到註冊中⼼去,然後執⾏節點從註冊中⼼獲取資訊(執⾏節點在定時任務開啟的時候獲取相應的分片

如果所有的節點掛掉值剩下⼀個節點,所有分⽚都會指向剩下的⼀個節點,這也是elasticjob的⾼可 ⽤。

分布式排程

1.在集群伺服器環境下排程任務 乙個網際網路應用不斷擴大單台伺服器是不夠的,同樣的 工程需要copy部署到多台伺服器,這樣的處理形式稱之為伺服器集群。而伴隨著伺服器集群帶來了乙個問題,比如定時的後台任務,例如資料統計 郵件傳送等我們希望這些任務同一時間只有乙個任務在進行,但是集群伺服器上面每台伺服器...

分布式任務排程

定時job,在什麼時間進行執行 任務。public static void main string args catch exception e thread thread new thread runnable thread.start public static void main string...

分布式排程系統 任務排程

這就是分布式任務排程所要解決的問題 舉個栗子 如何快速的做出大量的熱狗?如果將每乙個乙個熱狗按流程做的話,可見工作量會十分巨大而且效率低下 對任務按需求切分成多個子任務 再對所有的中間態結果進行reduce合併,得到最終結果 我們換個角度理解mapreduce操作 還會有一些廚師,按照一定的比例,將...