分布式排程任務管理 Dkron(1)執行機制

2022-07-10 16:09:13 字數 1169 閱讀 9555

dkron是乙個分布式,啟動迅速,容錯的定時任務系統,支援cron表示式。

dkron是用go編寫的,它利用raft協議和serf的強大功能提供容錯性、可靠性和可擴充套件性,同時保持簡單易安裝。

dkron每個節點都是由乙個web服務、grpc服務、raft服務、serf服務、badger資料庫構成。

web負責**來自前端job的元資訊給grpc服務,一般的grpc操作都在leader節點進行。job的排程和修改儲存都要通過leader,只有獲取job的資訊不需要到leader節點,因為每個節點的資料是一致的。有人會說這樣的話那是不是leader的壓力會不會太大,不必擔心,由於對於job的增刪改其實請求是很小的,而且job的執行也不是在leader,所以大可不必擔心。

serf用於服務發現和節點故障提醒,提供節點成員資訊,執行job任務。

嵌入式資料庫badger負責在每個節點儲存資料,通過raft協議保證資料一致性。

dkron的每個節點在執行的服務上都是相同的,但存在乙個仲裁節點leader,job的增刪改都需要直接通過它來進行,但查詢job不需要通過leader在本機即可查詢。job更新後leader的排程器job schedule會重啟一次,排程器只會在leader節點執行。

當集群中當前的leader失去leader地位時,它會關閉job schedule,而獲得leader地位的節點會啟動job schedule,這就保證了任務只會執行一次。

當leader的排程器檢查到將有任務需要執行時,它會發乙個serf的訊息,serf會隨機傳送給任意乙個節點去執行,當執行完成後會通知leader的執行結果,並寫進資料庫。

在leader節點處,當job schedule的任務觸發時,leader傳送乙個serf訊息(1-serf msg),serf會隨機選擇乙個節點傳送。當收到serf傳送的執行job的訊息後,節點會啟動乙個協程去執行job(2-run job),接著返回給serf收到執行訊息並正在執行任務的響應(3-serf msg resp)。

當run job結束後會根據hash一致性隨機選擇乙個節點傳送grpc訊息,將執行結果傳送出去(4-job done),這裡為什麼不直接發給leader呢?是因為有可能當時存在leader未選舉出來。因此隨機選擇乙個節點,再將請求**到leader,保證執行結果一定能發到leader(5-job done)。

最後leader會通過raft把資料複製到各個節點,最終乙個任務就執行結束了。

分布式任務排程

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

分布式排程系統 任務排程

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

quartz的分布式任務排程

在實際的併發量較高的專案中,架構師通常會對伺服器進行集群或者對專案架構進行分布式部署 請允許筆者模擬乙個場景 某專案構架採用了nginx進行三颱應用型伺服器的負載均衡,並且每台伺服器部署同一套 這裡顯然要對quartz相應的進行集群 假設,該專案中存在乙個定時器模組 如果這裡不做特殊處理的話,三颱應...