阿里新一代分佈式任務調度平臺Schedulerx2.0破土而出

1. 產品簡介

Schedulerx2.0是阿里中間件自研的基於Akka架構的新一代分佈式任務調度平臺,提供定時、任務編排、分佈式跑批等功能。使用Schedulerx2.0,您能夠在控制檯配置管理您的定時任務,查詢歷史執行記錄,查看運行日誌。藉助Schedulerx2.0,您還能夠經過工做流進行任務編排和數據傳遞。Schedulerx2.0還提供了簡單易用的分佈式編程模型,簡單幾行代碼就能夠將海量數據分佈式到多臺機器上執行。前端

Schedulerx2.0提供了任務調度與執行的一整套解決方案,在阿里巴巴集團內部普遍使用並久經考驗,具備高可靠、海量任務、秒級別調度等能力。java

上線時間:2019-04-30python

2. 背景

Schedulerx2.0是Schedulerx1.0(DTS)的下一代產品,採用全新的架構,是全新自研的下一代分佈式任務調度平臺,不但解決了老產品的性能瓶頸,還提供了更多更快更強的能力。spring

  • 更多:支持多種時間表達式,任務編排,支持更多的業務場景。單集羣支持上千萬任務,一天上十億次調度,支持更多的任務數。
  • 更快:支持秒級別調度,處理準實時業務。
  • 更強:支持日誌查詢、原地重跑、重刷數據等多種操做,提供更強的運維能力和排錯手段,解決爲何沒跑,爲何失敗,爲何跑得慢等問題。

3. 功能

3.1 強大的定時調度器

3.1.1 Crontabshell

支持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 報警監控

  • 失敗報警
  • 超時報警
  • 報警方式:短信



本文做者:黃曉萌

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索