1. 産品簡介
Schedulerx2.0是阿裡中間件自研的
基于Akka架構的新一代分布式任務排程平台,提供定時、任務編排、分布式跑批等功能。使用Schedulerx2.0,您可以在控制台配置管理您的定時任務,查詢曆史執行記錄,檢視運作日志。借助Schedulerx2.0,您還可以通過工作流進行任務編排和資料傳遞。Schedulerx2.0還提供了簡單易用的分布式程式設計模型,簡單幾行代碼就可以将海量資料分布式到多台機器上執行。
Schedulerx2.0提供了任務排程與執行的一整套解決方案,在阿裡巴巴集團内部廣泛使用并久經考驗,具有高可靠、海量任務、秒級别排程等能力。
上線時間:2019-04-30
釘釘群号:23103656
産品文檔:
https://help.aliyun.com/document_detail/125501.html2. 背景
Schedulerx2.0是Schedulerx1.0(DTS)的下一代産品,采用全新的架構,是全新自研的下一代分布式任務排程平台,不但解決了老産品的性能瓶頸,還提供了更多更快更強的能力。
- 更多:支援多種時間表達式,任務編排,支援更多的業務場景。單叢集支援上千萬任務,一天上十億次排程,支援更多的任務數。
- 更快:支援秒級别排程,處理準實時業務。
- 更強:支援日志查詢、原地重跑、重刷資料等多種操作,提供更強的運維能力和排錯手段,解決為什麼沒跑,為什麼失敗,為什麼跑得慢等問題。
3. 功能
3.1 強大的定時排程器
3.1.1 Crontab
支援unix crontab表達式,不支援秒級别。
3.1.2 Fixed rate
衆所周知,crontab必須被60整除,比如想每隔40分鐘跑一次,cron不支援。Fixed rate專門用來做定期輪詢,表達式簡單,不支援秒級别。
3.1.3 Fixed delay
适合對實時性要求比較高的業務,比如每次執行完成隔10秒再跑,那麼second delay非常适合你。并且second delay能支援到秒級别。
3.1.4 月曆
支援多種月曆,還可以自定義導入月曆。比如金融業務需要在每個交易日執行。
3.1.5 時區
跨國的業務,需要在每個國家的時區定時執行某個任務。
3.2 任務編排
支援工作流(DAG)進行任務編排,操作簡單,前端直接單手操作拖拖拽拽即可。詳細的任務狀态圖能一目了然看到下遊任務為什麼沒跑。

3.3 任務類型
支援多種任務類型,可以無限擴充。
- java:可以跑在使用者程序中,也可以上傳jar包動态加載。
- shell:前端直接寫shell腳本。
- python:前端直接寫python腳本,需要機器有python環境。
- go:前端直接寫go腳本,需要機器有go環境。
- 自定義:使用者甚至可以自定義任務類型,然後實作一個plugin就行了。
3.4 執行方式&分布式程式設計模型
3.4.1 執行方式
- 單機:随機挑選一台機器執行
- 廣播:所有機器同時執行且等待全部結束
- 并行計算:map/mapreduce模型,1~300個子任務,有子任務清單。
- 記憶體網格:map/mapreduce模型,10W以下子任務,無子任務清單,基于記憶體計算,比網格計算快。
- 網格計算:map/mapreduce模型,100W以下子任務,無子任務清單,基于檔案H2計算。
3.4.2 分布式程式設計模型
- Map模型:類似于hadoop mapreduce裡的map。隻要實作一個map方法,簡單幾行代碼就可以将海量資料分布式到客戶自己的多台機器上執行,進行跑批。
- MapReduce模型:MapReduce模型是Map模型的擴充,新增reduce接口,所有子任務完成後會執行reduce方法,可以在reduce方法中傳回該任務執行個體的執行結果,或者回調業務。
3.5 強大的運維能力
- 資料大盤:控制台提供了執行記錄大盤和執行清單,可以看到每個任務的執行曆史,并提供操作。
- 檢視日志:每條執行記錄,都可以詳情中的日志頁面實時看到日志。如果任務運作失敗了,前端直接就能看到錯誤日志,非常友善。
- 原地重跑:任務失敗,修改完代碼釋出後,可以點選原地重跑。
- 标記成功:任務失敗,如果背景把資料處理正确了,重跑又需要好幾個小時,直接标記成功就好了。
- Kill:實作JobProcessor的kill()接口,你就可以在前端kill正在運作的任務,甚至子任務。
3.6 資料時間
Schedulerx2.0可以處理有資料狀态的任務。建立任務的時候可以填資料偏移。比如一個任務是每天00:30運作,但是實際上要處理上一天的資料,就可以向前偏移一個小時。運作時間不變,執行的時候通過context.getDataTime()獲得的就是前一天23:30。
3.7 重刷資料
既然任務具有了資料時間,一定少不了重刷資料。比如一個任務/工作流最終産生一個報表,但是業務發生變更(新增一個字段),或者發現上一個月的資料都有錯誤,那麼就需要重刷過去一個月的資料。
通過重刷資料功能,可以重刷某些任務/工作流的資料(隻支援天級别),每個執行個體都是不同的資料時間。
3.8 失敗自動重試
- 執行個體失敗自動重試:在任務管理的進階配置中,可以配置執行個體失敗重試次數和重試間隔,比如重試3次,每次間隔30秒。如果重試3次仍舊失敗,該執行個體狀态才會變為失敗,并發送報警。
- 子任務失敗自動重試:如果是分布式任務(并行計算/内網網格/網格計算),子任務也支援失敗自動重試和重試間隔,同樣可以通過任務管理的進階配置進行配置。
3.9 支援原生Spring
之前的老産品Schedulerx1.0(DTS)和spring的結合非常暴力,對bean的命名有強要求,經常遇到注入失敗的問題。Schedulerx2.0支援原生spring文法,接入更加的友善。
3.10 報警監控
- 失敗報警
- 逾時報警
- 報警方式:短信
4. 未來展望
4.1 serverless
未來我們會和k8s以及EDAS serverless深度合作,使用者隻需要提供鏡像、jar包、腳本等,不需要購買機器就可以進行任務排程和執行。Schedulerx2.0 serverless結合自帶的分布式跑批能力,能支援在業務高峰期自動擴容快速處理業務,執行完作業又能夠自動回收資源,真正幫助使用者省錢。