阿里新一代分布式任务调度平台Schedulerx2.0破土而出
1. 產(chǎn)品簡介
Schedulerx2.0是阿里中間件自研的基于Akka架構(gòu)的新一代分布式任務(wù)調(diào)度平臺,提供定時、任務(wù)編排、分布式跑批等功能。使用Schedulerx2.0,您可以在控制臺配置管理您的定時任務(wù),查詢歷史執(zhí)行記錄,查看運(yùn)行日志。借助Schedulerx2.0,您還可以通過工作流進(jìn)行任務(wù)編排和數(shù)據(jù)傳遞。Schedulerx2.0還提供了簡單易用的分布式編程模型,簡單幾行代碼就可以將海量數(shù)據(jù)分布式到多臺機(jī)器上執(zhí)行。
Schedulerx2.0提供了任務(wù)調(diào)度與執(zhí)行的一整套解決方案,在阿里巴巴集團(tuán)內(nèi)部廣泛使用并久經(jīng)考驗,具有高可靠、海量任務(wù)、秒級別調(diào)度等能力。
上線時間:2019-04-30
釘釘群號:23103656
2. 背景
Schedulerx2.0是Schedulerx1.0(DTS)的下一代產(chǎn)品,采用全新的架構(gòu),是全新自研的下一代分布式任務(wù)調(diào)度平臺,不但解決了老產(chǎn)品的性能瓶頸,還提供了更多更快更強(qiáng)的能力。
- 更多:支持多種時間表達(dá)式,任務(wù)編排,支持更多的業(yè)務(wù)場景。單集群支持上千萬任務(wù),一天上十億次調(diào)度,支持更多的任務(wù)數(shù)。
- 更快:支持秒級別調(diào)度,處理準(zhǔn)實時業(yè)務(wù)。
- 更強(qiáng):支持日志查詢、原地重跑、重刷數(shù)據(jù)等多種操作,提供更強(qiáng)的運(yùn)維能力和排錯手段,解決為什么沒跑,為什么失敗,為什么跑得慢等問題。
3. 功能
3.1 強(qiáng)大的定時調(diào)度器
3.1.1 Crontab
支持unix crontab表達(dá)式,不支持秒級別。
3.1.2 Fixed rate
眾所周知,crontab必須被60整除,比如想每隔40分鐘跑一次,cron不支持。Fixed rate專門用來做定期輪詢,表達(dá)式簡單,不支持秒級別。
3.1.3 Fixed delay
適合對實時性要求比較高的業(yè)務(wù),比如每次執(zhí)行完成隔10秒再跑,那么second delay非常適合你。并且second delay能支持到秒級別。
3.1.4 日歷
支持多種日歷,還可以自定義導(dǎo)入日歷。比如金融業(yè)務(wù)需要在每個交易日執(zhí)行。
3.1.5 時區(qū)
跨國的業(yè)務(wù),需要在每個國家的時區(qū)定時執(zhí)行某個任務(wù)。
3.2 任務(wù)編排
支持工作流(DAG)進(jìn)行任務(wù)編排,操作簡單,前端直接單手操作拖拖拽拽即可。詳細(xì)的任務(wù)狀態(tài)圖能一目了然看到下游任務(wù)為什么沒跑。
3.3 任務(wù)類型
支持多種任務(wù)類型,可以無限擴(kuò)展。
- java:可以跑在用戶進(jìn)程中,也可以上傳jar包動態(tài)加載。
- shell:前端直接寫shell腳本。
- python:前端直接寫python腳本,需要機(jī)器有python環(huán)境。
- go:前端直接寫go腳本,需要機(jī)器有g(shù)o環(huán)境。
- 自定義:用戶甚至可以自定義任務(wù)類型,然后實現(xiàn)一個plugin就行了。
3.4 執(zhí)行方式&分布式編程模型
3.4.1 執(zhí)行方式
- 單機(jī):隨機(jī)挑選一臺機(jī)器執(zhí)行
- 廣播:所有機(jī)器同時執(zhí)行且等待全部結(jié)束
- 并行計算:map/mapreduce模型,1~300個子任務(wù),有子任務(wù)列表。
- 內(nèi)存網(wǎng)格:map/mapreduce模型,10W以下子任務(wù),無子任務(wù)列表,基于內(nèi)存計算,比網(wǎng)格計算快。
- 網(wǎng)格計算:map/mapreduce模型,100W以下子任務(wù),無子任務(wù)列表,基于文件H2計算。
3.4.2 分布式編程模型
- Map模型:類似于hadoop mapreduce里的map。只要實現(xiàn)一個map方法,簡單幾行代碼就可以將海量數(shù)據(jù)分布式到客戶自己的多臺機(jī)器上執(zhí)行,進(jìn)行跑批。
- MapReduce模型:MapReduce模型是Map模型的擴(kuò)展,新增reduce接口,所有子任務(wù)完成后會執(zhí)行reduce方法,可以在reduce方法中返回該任務(wù)實例的執(zhí)行結(jié)果,或者回調(diào)業(yè)務(wù)。
3.5 強(qiáng)大的運(yùn)維能力
- 數(shù)據(jù)大盤:控制臺提供了執(zhí)行記錄大盤和執(zhí)行列表,可以看到每個任務(wù)的執(zhí)行歷史,并提供操作。
- 查看日志:每條執(zhí)行記錄,都可以詳情中的日志頁面實時看到日志。如果任務(wù)運(yùn)行失敗了,前端直接就能看到錯誤日志,非常方便。
- 原地重跑:任務(wù)失敗,修改完代碼發(fā)布后,可以點(diǎn)擊原地重跑。
- 標(biāo)記成功:任務(wù)失敗,如果后臺把數(shù)據(jù)處理正確了,重跑又需要好幾個小時,直接標(biāo)記成功就好了。
- Kill:實現(xiàn)JobProcessor的kill()接口,你就可以在前端kill正在運(yùn)行的任務(wù),甚至子任務(wù)。
3.6 數(shù)據(jù)時間
Schedulerx2.0可以處理有數(shù)據(jù)狀態(tài)的任務(wù)。創(chuàng)建任務(wù)的時候可以填數(shù)據(jù)偏移。比如一個任務(wù)是每天00:30運(yùn)行,但是實際上要處理上一天的數(shù)據(jù),就可以向前偏移一個小時。運(yùn)行時間不變,執(zhí)行的時候通過context.getDataTime()獲得的就是前一天23:30。
3.7 重刷數(shù)據(jù)
既然任務(wù)具有了數(shù)據(jù)時間,一定少不了重刷數(shù)據(jù)。比如一個任務(wù)/工作流最終產(chǎn)生一個報表,但是業(yè)務(wù)發(fā)生變更(新增一個字段),或者發(fā)現(xiàn)上一個月的數(shù)據(jù)都有錯誤,那么就需要重刷過去一個月的數(shù)據(jù)。
通過重刷數(shù)據(jù)功能,可以重刷某些任務(wù)/工作流的數(shù)據(jù)(只支持天級別),每個實例都是不同的數(shù)據(jù)時間。
3.8 失敗自動重試
- 實例失敗自動重試:在任務(wù)管理的高級配置中,可以配置實例失敗重試次數(shù)和重試間隔,比如重試3次,每次間隔30秒。如果重試3次仍舊失敗,該實例狀態(tài)才會變?yōu)槭?#xff0c;并發(fā)送報警。
- 子任務(wù)失敗自動重試:如果是分布式任務(wù)(并行計算/內(nèi)網(wǎng)網(wǎng)格/網(wǎng)格計算),子任務(wù)也支持失敗自動重試和重試間隔,同樣可以通過任務(wù)管理的高級配置進(jìn)行配置。
3.9 支持原生Spring
之前的老產(chǎn)品Schedulerx1.0(DTS)和spring的結(jié)合非常暴力,對bean的命名有強(qiáng)要求,經(jīng)常遇到注入失敗的問題。Schedulerx2.0支持原生spring語法,接入更加的方便。
3.10 報警監(jiān)控
- 失敗報警
- 超時報警
- 報警方式:短信
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的阿里新一代分布式任务调度平台Schedulerx2.0破土而出的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云李刚:下一代低延时的直播CDN
- 下一篇: 阿里开发者们的第15个感悟:做一款优秀大