日常業務都有一些調度的需求,最簡單的方式就是在代碼裡使用spring 的定時調度, 但是這種方式存在幾種問題:
難以控制有且只調度一次
難以控制容災場景
每個業務需要實現一套調度邏輯
針對以上問題,中間件提供單獨的調度平臺 scheduler, 讓業務更加專注業務價值而非底層調度實現。 第三方調度平臺設計上需要考慮幾個場景:
按時調度、不漏觸發、不重複觸發
容災性:調度節點宕機以後,不影響正常調度。
AntScheduler 1.0 消息時代是老闆scheduler 基於消息調度的時代,這個版本主要依賴消息解耦,以消息未渠道將調度事件告知給業務。
一. 調度架構
整體架構
因為 螞蟻特殊的 LDC 架構,業務會在不同的zone 部署,同時考慮容災等場景調度組件和其他組件一樣,也是每個zone 單獨部署。 而調度組件不同的點是,調度只zone 內收斂隔離,一個 zone 的 scheduler 集群只負責本zone 業務調度。 整體架構如下:
任務會在不同的zone 單獨上線、啟動、禁用。 zone 與 zone 之間的隔離的。因此用戶需要為task在不同的zone 進行配置。
任務原數據只有一份,每個zone 都共享一份配置。 如 cron 表達式、策略等。
調度一個zone 內一套單獨的集群,有master-slave。 master 負責任務分配,每個節點都負責任務調度。
一次任務調度,只會下發到一臺業務機器。 如果需要提高並行處理能力,可以在任務上面配置分片能力,則一次性下發多次觸發消息,那就會有多臺消息收到消息。
任務是分片調度的,master 按一致性hash算法將任務分配到同zone 內的不同節點,每個節點加載自己負責的任務進行調度。這樣保證一個任務在一個服務機器上調度,避免重複觸發問題。 一次任務觸發只會有一個業務機器收到消息,可以避免業務機器多機器執行問題。 當然為了提高併發性,調度也提供了分片能力,及一次調度下發多個消息,可以被多臺機器接收。
A/B Zone 策略
在主站內部 A/B 是互備 Zone。 但對於調度來說 A/B Zone 都是一個普通的zone, 沒有設置 A/B 互備概念。 所以只要在 A/B Zone 任意zone 開啟任務都會觸發,而不是隻單純觸發 A zone 或 B zone。 因此業務對 A/B Zone 比較敏感的話,任務的配置和開啟需要額外主要。
沒有理解 A/B Zone 配置規則也會引起一些問題,例如 :調度任務AB組引發SQL熱點的“冷思考”
容災切換
發生容災以後,在將原zone 的任務遷移到 目標zone 加載觸發。 如果目標zone和原zone 都啟動了,則只會在目標zone 觸發一次。
msgbroker 超時重試
經常有業務反饋說自己的消息同一時刻會收到多條, 通過查看 任務調度的調度情況,都是正常觸發。經排查大部分都是 msgbroker 感知業務消息處理超時後,重新下發給業務。 msgbroker 默認消息處理超時時間是 10s, 如果沒處理完成則重發。 解決重發問題有兩種:
同步轉異步
修改 msgbroker 超時時間配置
二. 三層分發
簡單的消息任務只會把消息唯一下發給一臺機器處理,機器收到消息後處理業務邏輯。針對大數據任務,如果交給一臺機器處理會耗時很久,其他機器可能處於閒置狀態。 為了充分利用集群能力,提高並行處理性能,提供了三層分發框架。 詳見:三層分發框架
三層分發框架主要解決集群處理任務,提高數據處理性能。框架將任務分為三層:
第一層拆分層。接收任務調度的觸發事件,調度 splitor 接口執行拆分。業務可以根據自己的業務場景拆分為多個分片。
第二層加載層。 加載層根據每個分片去加載數據,為了提高加載性能會將分片發送給遠程機器加載數據。
第三層執行層。 每個分片撈取的數據記錄存在多條,大量的數據在單臺節點執行也存在性能瓶頸,單機處理效率也低。 因此和加載層一樣,將撈取的數據分發到其他機器去執行。充分利用集群能力,提高並行處理能力。
三. 研發流程
迭代流程
linke 配置定時任務信息
linke 配置消息任務配置
常見問題排查
消息任務-業務方未收到消息排查指南
四. 小節
本文主要介紹 任務調度1.0 以消息未主的老闆任務調度平臺的原理,主要使用消息任務來完成觸發時間的通知。為了提高處理性能提供了三層分發利器,重複利用集群能力。
但基於消息模式採用異步模式,導致調度平臺對執行結果無感知,也不能在上面提供豐富的人工干預、結果監控等功能。同時三層分發提高了集群的利用率,但是沒有提供限流等功能,如果業務對數據流量比較敏感時,業務只能自己通過guardian 等方式解決限流問題。
為了解決這些問題,在AntScheduler 2.0 RPC 時代提供RPC任務,豐富的人工干預功能等。在後面的 「AntScheduler 2.0之RPC時代」會介紹其內容和原理。