博客 / 詳情

返回

一種輕量級定時任務實現 | 京東雲技術團隊

現在市面上有各式各樣的分佈式定時任務,每個都有其獨特的特點,我們這邊的項目因為一開始使用的是分佈式開源調度框架TBSchedule,但是這個框架依賴ZK,由於ZK的不穩定性和項目老舊無人維護,導致我們的定時任務會偶發出現異常,比如:任務停止、任務項丟失、任務不執行等;

每逢618大促,在單量很大的情況下,如果出現定時任務異常,會導致訂單的積壓,進而導致訂單的履約時效,嚴重影響商家的履約效率,造成訂單取消、客户投訴等;

為了保障整體的穩定性,在改動成本比較小的情況下,達到快速實現,穩定運行,預防這種偶發異常,我們實現了一種輕量級定時任務來進行無縫隙降級;

我們使用的TBSchedule特性:

1.支持集羣、分佈式

2.靈活的任務分片

3.動態的服務擴容和資源回收

4.支持單個任務線程數的設置和實時調整

我們要實現的功能

1.為了保障單個系統的穩定性,我們去中心化,單獨調度自己的系統的任務

2.為了避免ZK的不穩定性,我們通過redis實現註冊中心和動態分片功能

3.避免使用timer,改用線程池來控制線程

4.為了減少改造成本,不需要業務系統改動代碼,我們自動實現TBSchedule內部方法,保持原來的入參

5.為了支持更多任務,支持動態調整線程數,增加系統的處理能力

方案實現

結果:

1.通過xml配置,引入jar包方式,實現快速接入

2.基本實現TBSchedule主要功能,基礎方法和TBSchedule保持一致,無切換成本

3.通過ducc配置,配合應急預案,支持手動或者自動進行降級,無縫銜接,可隨時隨地操作,為大促保駕護航

4.線上已運行,動態分片穩定,心跳檢查及時,隨時可降級,幫助訂單系統避免多次zk波動帶來的影響

通過輕量級的降級,搭配應急預案觸發,保障大促的穩定運行!!!!!

後續計劃:

1.改用Quartz作為定時任務的觸發器(也可搭配easyjob),支持更多形式的定時配置,完美替代TBSchedule;

2.提供可視化界面監控任務的運行情況

作者:京東零售 馬成龍

來源:京東雲開發者社區

user avatar 4znq03yt 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.