從 XXL-JOB 看主流分布式任務調度平臺怎樣設計調度中心和執行器這兩個核心組件!
大家好,我是君哥。
分布式任務調度平臺執行一次調度任務,一般會經歷下面的過程。
圖片
在上圖中,調度中心從注冊中心拉取執行器列表,然后選擇一個執行器來執行任務,任務執行完成后,執行器會把任務執行結果通知調度中心。
主流的分布式任務調度平臺,比如 XXL-JOB、PowerJob 等都設計了調度中心、執行器這兩個核心組件。
1.調度中心
調度中心的作用不光是簡單的任務觸發,還包括管理執行器列表、任務結果管理等。
1.1 任務調度方式
任務調度方式主要包括定時調度和 API 觸發調度。
定時調度有兩種方式,一種是調度中心在配置的任務執行時間給執行器發送任務調度信號,直接把任務發起。第二種是調度中心給任務執行器發送任務觸發時間,任務執行器自己觸發,比如使用延遲隊列。
API 觸發調度一般是調度中心收到外部 API 請求后,發起任務調度。
1.2 任務管理
調度中心可以創建、更新、刪除任務。下圖來自 XXL-JOB 官網,XXL-JOB 在調度中心配置任務。
圖片
1.3 任務結果
調度中心監控任務執行結果,查看任務執行日志,對于執行失敗的任務也可以采取一些處置措施,比如重新觸發任務執行。
1.4 調度時效
定時任務對執行開始時間有要求,這就需要調度中心能夠高效地把任務調度請求發出去,不能積壓調度任務。
1.5 調度策略
調度策略決定了調度中心選擇哪一個執行器來執行任務,比如第一個、最后一個、隨機、輪詢、廣播等。
2.執行器
執行器是分布式任務調度系統中最核心的部分,它是真正執行跑批任務、決定跑批結果的組件。
2.1 執行器注冊
執行器要想收到任務觸發信號,必須首先在注冊中心進行注冊,被調度中心成功拉取到。
注冊成功后,需要周期性地給注冊中心發送心跳,讓調度中心感知到。
2.2 集群部署
為了保證整個調度平臺的高可用,執行器必須集群部署,這樣如果調度中心選擇調度的節點出現故障,可以進行重試把信號發送給下一個節點,不用擔心任務不能被成功調度。
圖片
2.3 多線程設計
執行器為了提高執行效率,一般會啟動多線程。執行器應該能支持線程數量靈活配置。比如一個數據量比較大的任務,可以配置多線程分段處理。但為了不影響同一個執行器上的其他任務,不能把線程數配置地太高,比如可以使用一半的線程處理當前任務。
對于更加復雜的批量任務,也可以設計成多個執行器參與來提高效率。比如一個任務調度到 4 個執行器執行,每個執行器 4 個線程參與,提高執行效率。
圖片
2.4 動態擴容
當所有的執行器都滿負荷運行,會出現任務排隊的情況,如果執行器集群可以動態擴容,就可以增加幾個執行器節點,調度中心把任務調度到新的節點上。
2.5 阻塞控制
單個執行器很可能會出現批次任務排隊的情況,有必要采取一些阻塞控制策略。比如按照入隊順序依次執行,或者丟棄排隊的任務直接給調度中心返回失敗。
3 總結
調度中心和執行器是分布式任務調度平臺的兩個核心組件,調度中心負責任務觸發和調度,執行器負責任務執行和結果反饋。理解了這 2 個核心概念,就可以很容易地理解主流分布式調度平臺的設計原理了。



































