#研發中間件介紹#定時任務調度與管理JobCenter

鄭昀 最後更新於2014/11/11
關鍵詞: 定時任務 、調度、監控報警、Job、crontab、Java

本文檔適用人員:研發員工
 
沒有JobCenter時咱們要面對的:
  電商業務鏈條很長,業務邏輯也較爲複雜,須要成百上千種定時任務。窩窩的大多數定時任務其實調用的是本地或遠端 Java/PHP/Python Web Service。若是沒有一個統一的調度和報警,在集羣環境下,咱們會:
  • 不知道哪個定時任務執行失敗或超時,不見得能第一時間知道——直到最終用戶投訴反饋過來;
    • 要求每個定時任務輸出統一格式的日誌供監控系統解析?
    • 對每一位定時任務維護者提出高要求?這不是咱們的解題思路。
  • 不知道哪個定時任務沒配好瞎跑;
    • 好比忘記配成開機自啓動;
    • 好比曾經線上環境B與環境A並存致使定時任務互相爭搶;
  • 不知道如今線上跑了多少個定時任務,都是幹什麼的,負責人都是誰;
  • 有些定時任務很是重要,不能單點,但又不能同時起多個 crontab,只能採起 master/slave 模式跑——好比退款處理。
 
什麼是JobCenter?
   窩窩的定時任務管理和調度平臺,一個實用工具, 它是一個由 任務管理、任務調度、任務監控報警以及宿主任務執行(注意再也不是 crontab了) 這四部分組成的,分佈式多任務協調系統
 
  2012年時,我看到暴風影音的馬晨開源了一個 CronHub(時間調度系統)項目 github 地址 ),也能夠看一下 百度文庫上的PPT。馬晨描述的需求與咱們類似,他對 CronHub 的功能設計給咱們很大啓發:
1 、大量的crontab管理起來好煩人
任務總是沒按時執行,各類緣由失敗,真讓人抓狂。
二、多臺服務器環境下,管理crontab更是煩上加煩,登陸每臺機器查看crontab結果不是折磨一向偷懶的程序員嗎?
三、要是能有個自動化管理,可供的GUI界面管理就行了。
因此暴風影音作一個「真正通用」,「真正解決平常需求」的時間調度系統。
  因爲前面說過大多數定時任務其實調用的是 Web 接口,因此咱們的作法與 CronHub 略有不一樣,說是定時任務,其實我只是 登記了要調用的遠端接口、通信協議、Crontab 時間格式表達式、執行機器組、超時時間、報警接收人等而已。已經沒有 crontab 了,全都是遠端 WebService。由 JobCenter 按時通知對端的接口,並接收任務執行者的進度反饋和最終執行結果,這些響應均爲 JSON 格式。還能夠爲同一個定時任務添加多個執行機器,JobCenter 保證通知成功
  JobCenter 是2013年初聶蘭彬構建的,那個歷史時期同時有多個研發內部項目啓動,如 NotifyServerTracing、Recsys、 ConfigServer。通過幾個月的線上試用和功能完善,咱們便開始督促各個研發組織把 Java/PHP 定時任務遷移到這個平臺裏。
  
  JobCenter 目前也歸入在咱們的 idcenter 體系下,這樣能夠共用一套賬號體系(LDAP),共用一套權限分配體系:

http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_idcenter1.png

圖1 jobcenter 在 idcenter 的入口 html

  它的主界面以下:
jobcenter主界面(bootstrap樣式)
圖2 jobcenter 主界面
 
JobCenter的優勢:
  1. 管理直觀
    • 能夠指定定時任務的 Worker 集羣,並指定執行策略,如隨機選取一臺機器執行,如第一臺執行;
    • 能夠指定通知策略:保證執行成功,只通知一次;
    • 能夠設置超時警告時間;
      • 並能夠進一步設置警告接收人(短信和郵件),以下圖所示:
        • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e6%8a%a5%e8%ad%a6.png
      • 任務失敗會發郵件給警告接收人;
  2. 調度方便
    • 集中查看全部定時任務的執行總況,以下圖所示:
      • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e4%bb%bb%e5%8a%a1%e8%b0%83%e5%ba%a6.png
      • 能夠在「定時任務調度」界面上,暫停定時任務,或者當即執行定時任務;
  3. 觀察方便
    • 按定時任務查看它的上次執行時間、耗時、是否超時、執行結果和通知結果。以下圖所示:
      • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_job-%e6%89%a7%e8%a1%8c%e6%83%85%e5%86%b5.png
    • 按定時任務查看它的執行趨勢圖,能直觀地反映每一次執行是否成功、耗時、是否超時,以下圖所示:
      • 能夠用鼠標在圖表上拖動放大時間軸;
      • 黃色歎號圖標表明超時了,紅色叉圖表明執行失敗,紅色橫線圖標表明任務未執行;
      • http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_job-%e6%89%a7%e8%a1%8c%e6%80%a7%e8%83%bd%e8%b6%8b%e5%8a%bf.png

 

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

 

JobCenter 的工做原理 程序員

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

http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e5%8e%9f%e7%90%86.png

圖3 jobcenter 示意圖 bootstrap

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

http://images.cnblogs.com/cnblogs_com/zhengyun_ustc/255879/o_jobcenter-%e6%b3%b3%e9%81%93%e5%9b%be.png

圖4 jobcenter 任務執行的泳道圖 服務器

 

JobCenter 的通知保證機制: 架構

  通知保證機制有如下3種: 異步

  • 只通知一次
  • 保證成功
  • 保證成功(任務不在執行中)

  特別對 「保證成功(任務不在執行中)」 做如下說明: 分佈式

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

 

窩窩的其餘解決方案介紹列表:

#研發解決方案介紹#Recsys-Evaluate(推薦評測) 

#研發解決方案介紹#Tracing(鷹眼)

#研發解決方案介紹#基於持久化配置中心的業務降級

#研發中間件介紹#異步消息可靠推送Notify

#研發解決方案介紹#IdCenter(內部統一認證系統)

#研發解決方案介紹#基於ES的搜索+篩選+排序解決方案

#數據技術選型#即席查詢Shib+Presto,集羣任務調度HUE+Oozie

-over-

相關文章
相關標籤/搜索