分散式任務排程系統設計小結
前言
分散式任務排程系統應用範圍很廣,或者說有很多偏後臺的分散式系統設計往往可以借鑑分散式排程系統的設計,目前也有很多分散式任務排程系統的開源,比如dkron,XXL-JOB等。這裡簡單的做一個任務排程系統設計小結,後續可以找時間實現。
業務場景
支援一次性任務
支援廣播任務
支援任務編排
支援靈活的時間排程
分散式任務排程系統核心需求
支援水平擴充套件(系統可以透過水平擴充套件提高整體系統的處理能力)
運維自動化(擴縮容自動化負載均衡)
高可用(不能有單點風險)
高效能(排程延遲儘量低)
高可靠(支援自動容錯,重試)
分散式任務排程系統架構設計
分散式任務排程系統的架構設計圍繞上面的核心需求和業務場景進行設計,目前我給出的解決方案。
支援水平擴充套件(master slave架構,master負責全域性的負載均衡,提供租約機制,slave負責具體的排程執行)
運維自動化(當出現自動擴縮容,master負責負載均衡,避免熱點問題)
高可用(master 透過etcd進行選主,避免單點,slave不存在單點)
高效能(slave上報延遲等資訊給master,由master進行均衡轉移,儘量平衡每個slave的負載)
高可靠(租約機制,後設資料存後設資料儲存,減少節點之間的依賴)
master 設計
master的核心是負責全域性資訊和負載均衡,下發租約,交換心跳資訊。master的啟動流程:
搶佔master鎖,保證高可用
等待server 透過心跳聯絡,交換資訊,下發租約
假如出現擴縮容或者負載不均衡,發起負載均衡操作(通知相關server停止部分遷移任務的排程,遷移任務通知新處理的server節點)
server 設計
server 是系統的核心設計,負責具體處理任務排程和執行,3個元件組成:
api(負責對外的api請求接入,支援webui和client接入)
scheduler(排程器負責任務的排程,workflow負責任務之間的編排,corn負責定時任務的排程,scheduler負責優先順序的排程)
executor(負責具體的任務執行,支援任務依賴,服務發現,服務通訊)
server api 的整體啟動流程:
接受任務的api請求,假如不存在任務依賴直接寫入到當前server的meta storage,存在依賴並不在當前server節點,寫入特殊的一個meta storage目錄,其他server可以watch並分別處理。
接受任務後傳送到排程器元件開始進行排程
server scheduler的整體設計:
收到api的任務放入cron元件,cron元件需要提供擴充套件介面,方便新的定時解析
cron元件任務排程時間到後,透過workflow組成任務編排。
任務編排後scheduler根據排程策略進行任務排程,併傳送給executor元件
server executor設計:
executor接受task後,需要先進行服務發現,發現上游執行節點(可上游透過client主動上報,也可直接配置,單播可RR執行,廣播則需要收集所有節點)
transport 實現和上游的通訊協議(可標準協議 http,也可透過client接入用rpc協議接入 預設標準http協議)
executor 負責具體的執行,需要支援任務依賴,不同的任務可並行執行,存在任務依賴的需要根據依賴執行,同時需要支援重試等策略,執行結果存入storage,方便後續查詢
容錯設計
分散式系統最大的難點就是容錯設計,這裡可能出現的錯誤:
server與meta 出現網路問題
server 可能出現fail,stop,recover
server 可能與master 出現網路問題
master出現fail,stop,recover
我們系統設計的解決方案
server與meta 出現網路問題(兩種解決方案 master直接回收租約,併發起任務遷移, 2 正常執行,發出告警,master負載均衡處理跳過這個節點)
server 可能出現fail,stop,recover(stop 發起任務遷移,recover 不需要處理,server自己恢復 master發現server下線後可等待一小段時間,假如一直不恢復進行遷移)
server 可能與master 出現網路問題(master發起遷移,server收到遷移資訊後,告警並停止任務排程執行)
master出現fail,stop,recover(master重新選主,server收到新的master通知主動聯絡)
來自 “ lancer ”, 原文作者:lancer的自留地;原文連結:https://mp.weixin.qq.com/s/mU60by90CZYNmblGPXxrOQ,如有侵權,請聯絡管理員刪除。
相關文章
- 分散式任務排程分散式
- 淺談分散式任務排程系統Celery的設計與實現分散式
- 分散式排程任務-ElasticJob分散式AST
- LTS分散式任務排程部署分散式
- ZooKeeper分散式任務排程中心分散式
- 開源分散式任務排程系統就選:DolphinScheduler分散式
- 【Python】輕量級分散式任務排程系統-RQPython分散式
- 系統架構設計之-任務排程系統的設計架構
- Aloha:一個分散式任務排程框架分散式框架
- 中介軟體---分散式任務排程---Celery分散式
- 分散式系統架構之構建你的任務排程中心分散式架構
- Easy Scheduler 1.0.2 釋出,分散式工作流任務排程系統分散式
- micro-job分散式任務排程框架更新分散式框架
- 新一代分散式任務排程框架分散式框架
- 帶有分散式鎖的Go計劃任務排程器- DEV分散式Godev
- 分散式任務排程平臺XXL-JOB分散式
- 系統設計:如何設計一個分散式作業排程器 ?- Rakshesh分散式
- Hadoop - 任務排程系統比較Hadoop
- Spring Boot Quartz 分散式叢集任務排程實現Spring Bootquartz分散式
- 在spring boot中3分鐘上手分散式任務排程系統xxl-jobSpring Boot分散式
- 任務排程
- 詳解BI系統中的任務排程
- 基於Redis的任務排程設計方案Redis
- 滿大街微服務的年代,滬江任務排程系統獨特的設計思維微服務
- 排程系統設計精要
- 分散式任務排程平臺XXL-JOB快速搭建教程分散式
- 整合了這個分散式任務排程平臺,真的很爽~~分散式
- 任務排程的思考和總結
- 分散式任務系統GEARMAN FOR PYTHON初探分散式Python
- Laravel 任務排程Laravel
- Airflow 任務排程AI
- LiteOS-任務篇-原始碼分析-任務排程函式原始碼函式
- Java 分散式任務排程平臺:PowerJob 快速開始+配置詳解Java分散式
- SpringBoot自定義starter開發分散式任務排程實踐Spring Boot分散式
- 基於任務排程的企業級分散式批處理方案分散式
- EasyTask——強大而簡單的分散式任務排程平臺分散式
- 分散式任務排程內的 MySQL 分頁查詢最佳化分散式MySql
- 嵌入式軟體開發之程式架構設計-任務排程架構