定時任務調度與管理平台JobCenter | crontab替代者


定時任務調度與管理平台JobCenter

 

沒有JobCenter時我們要面對的:

 

電商業務鏈條很長,業務邏輯也較為復雜,需要成百上千種定時任務。窩窩的大多數定時任務其實調用的是本地或遠端 Java/PHP/Python Web Service。如果沒有一個統一的調度和報警,在集群環境下,我們會:

  • 不知道哪一個定時任務執行失敗或超時,不見得能第一時間知道——直到最終用戶投訴反饋過來;

    • 要求每一個定時任務輸出統一格式的日志供監控系統解析?

    • 對每一位定時任務維護者提出高要求?這不是我們的解題思路。

  • 不知道哪一個定時任務沒配好瞎跑;

    • 比如忘記配成開機自啟動;

    • 比如曾經線上環境B與環境A並存導致定時任務互相爭搶;

  • 不知道現在線上跑了多少個定時任務,都是干什么的,負責人都是誰;

  • 有些定時任務非常重要,不能單點,但又不能同時起多個 crontab,只能采取 master/slave 模式跑——比如退款處理。

 

什么是JobCenter?

 

窩窩的定時任務管理和調度平台,一個實用工具,它是一個由 任務管理、任務調度、任務監控報警以及宿主任務執行(注意不再是 crontab了) 這四部分組成的,分布式多任務協調系統。

 

2012年時,我看到暴風影音的馬晨開源了一個 CronHub(時間調度系統)項目(github 地址),也可以看一下百度文庫上的PPT。馬晨描述的需求與我們相似,他對 CronHub 的功能設計給我們很大啟發:

 

1 、大量的crontab管理起來好煩人

任務老是沒按時執行,各種原因失敗,真讓人抓狂。

2、多台服務器環境下,管理crontab更是煩上加煩,登錄每台機器查看crontab結果不是折磨一貫偷懶的程序員嗎?

3、要是能有個自動化管理,可供的GUI界面管理就好了。

所以暴風影音做一個“真正通用”,“真正解決日常需求”的時間調度系統。

 

由於前面說過大多數定時任務其實調用的是 Web 接口,所以我們的做法與 CronHub 有所不同,說是定時任務,其實我只是登記了要調用的遠端接口、通訊協議、Crontab 時間格式表達式、執行機器組、超時時間、報警接收人等而已。已經沒有 crontab 了,全都是遠端 WebService。由 JobCenter 按時通知對端的接口,並接收任務執行者的進度反饋和最終執行結果,這些響應均為 JSON 格式。還可以為同一個定時任務添加多個執行機器,JobCenter 保證通知成功。

 

JobCenter 是2013年初聶蘭彬構建的,那個歷史時期同時有多個研發內部項目啟動,如 NotifyServer、Tracing、Recsys、ConfigServer。經過幾個月的線上試用和功能完善,我們便開始督促各個研發組織把 Java/PHP 定時任務遷移到這個平台里。

 

JobCenter 目前也納入在我們的 idcenter 體系下,這樣可以共用一套帳號體系(LDAP),共用一套權限分配體系:

 

 

圖1 jobcenter 在 idcenter 的入口

 

它的主界面如下:

 

圖2 jobcenter 主界面

 

JobCenter的優點:

 

1. 管理直觀

  • 可以指定定時任務的 Worker 集群,並指定執行策略,如隨機選取一台機器執行,如第一台執行;

  • 可以指定通知策略:保證執行成功,只通知一次;

  • 可以設置超時警告時間;

    • 並可以進一步設置警告接收人(短信和郵件),如下圖所示:

 

    • 任務失敗會發郵件給警告接收人;

 

2. 調度方便

  • 集中查看所有定時任務的執行總況,如下圖所示:

 

 

  • 可以在“定時任務調度”界面上,暫停定時任務,或者立即執行定時任務;

 

3. 觀察方便

  • 按定時任務查看它的上次執行時間、耗時、是否超時、執行結果和通知結果。如下圖所示:

 

 

  • 按定時任務查看它的執行趨勢圖,能直觀地反映每一次執行是否成功、耗時、是否超時,如下圖所示:

    • 可以用鼠標在圖表上拖動放大時間軸;

    • 黃色嘆號圖標代表超時了,紅色叉圖代表執行失敗,紅色橫線圖標代表任務未執行;

 

總之,它借鑒了 CronHub 的界面設計和菜單,這是一款大幅提升實施和管理效率、方便易用的中間件。

 

JobCenter 的工作原理

 

下圖是聶蘭彬當年繪制的架構示意圖,后續雖然結構有所調整,但下圖還是能說明問題的:

 

 

圖3 jobcenter 示意圖

 

它如何調度宿主執行定時任務呢?如下圖所示:

 

圖4 jobcenter 任務執行的泳道圖

 

JobCenter 的通知保證機制:

 

通知保證機制有以下3種:

 

  • 只通知一次

  • 保證成功

  • 保證成功(任務不在執行中)

 

特別對 “保證成功(任務不在執行中)” 作以下說明:

當一個任務到了這一輪的通知時間,jobcenter 會去檢查這個任務之前的執行,是否還在執行中(如正在執行,客戶端未返回)。如果有,則本次執行直接失敗,不通知。

 

運維幫以前也介紹過一款開源的工具Rundeck,大家也可以試試,輕點下面鏈接

一款可以取代cron的集中式任務管理工具Rundeck


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM