淘寶開源分布式調(diào)度系統(tǒng)TBSchedule詳解

Console下載:trunk/console/ScheduleConsole.war

技術(shù)支持:忌少 jishao@taobao.com

推薦項目:QLExpress 簡介高效的腳本引擎

pom引用:

com.taobao.pamirs.schedule

tbschedule

3.2.6

3.0-QuickStart

使用的問題解答

重要更新

tbschedule

此文檔內(nèi)部包括:

1锨天、設(shè)計目標說明

2合冀、主要概念解釋

3、涉及的數(shù)據(jù)對象說明

4驼壶、涉及的業(yè)務(wù)接口說明

5琅捏、Sleep模式和NotSleep模式的區(qū)別

6逢渔、使用過程中的注意事項

1、調(diào)度器的設(shè)計目標

1飞蹂、tbschedule的目的是讓一種批量任務(wù)或者不斷變化的任務(wù)几苍,能夠被動態(tài)的分配到多個主機的JVM中,不同的線程組中并行執(zhí)行陈哑。所有的任務(wù)能夠被不重復(fù)妻坝,不遺漏的快速處理伸眶。

2、調(diào)度的Manager可以動態(tài)的隨意增加和停止

3刽宪、可以通過JMX控制調(diào)度服務(wù)的創(chuàng)建和停止

4厘贼、可以指定調(diào)度的時間區(qū)間:

PERMIT_RUN_START_TIME :允許執(zhí)行時段的開始時間crontab的時間格式.以startrun:開始,則表示開機立即啟動調(diào)度

PERMIT_RUN_END_TIME :允許執(zhí)行時段的結(jié)束時間crontab的時間格式,如果不設(shè)置圣拄,表示取不到數(shù)據(jù)就停止

PERMIT_RUN_START_TIME ='0 * * * * ?' 表示在每分鐘的0秒開始

PERMIT_RUN_START_TIME ='20 * * * * ?' 表示在每分鐘的20秒終止

就是每分鐘的0-20秒執(zhí)行嘴秸,其它時間休眠

格式信息請參照:http://dogstar.javaeye.com/blog/116130

2、主要概念

TaskType任務(wù)類型:

是任務(wù)調(diào)度分配處理的單位庇谆,例如:

1岳掐、將一張表中的所有狀態(tài)為STS=’N’的所有數(shù)據(jù)提取出來發(fā)送給其它系統(tǒng),同時將修改狀態(tài)STS=’Y’,就是一種任務(wù)族铆。TaskType=’DataDeal’

2岩四、將一個目錄以所有子目錄下的所有文件讀取出來入庫,同時把文件移到對應(yīng)的備份目錄中哥攘,也是一種任務(wù)剖煌。TaskType=’FileDeal’。

3逝淹、可以為一個任務(wù)類型自定義一個字符串參數(shù)由應(yīng)用自己解析耕姊。例如:"AREA=杭州,YEAR>30"

ScheduleServer任務(wù)處理器

1、是由一組線程【1..n個線程】構(gòu)成的任務(wù)處理單元栅葡,每一任務(wù)處理器有一個唯一的全局標識茉兰,

一般以IP$UUID[例如192.168.1.100$0C78F0C0FA084E54B6665F4D00FA73DC]的形式出現(xiàn)。 一個任務(wù)類型的數(shù)據(jù)可以由1..n個任務(wù)處理器同時進行欣簇。

2规脸、這些任務(wù)處理器可以在同一個JVM中,也可以分布在不同主機的JVM中熊咽。任務(wù)處理器內(nèi)部有一個心跳線程莫鸭,用于確定Server的狀態(tài)和任務(wù)的動態(tài)分配,

有一組工作線程横殴,負責(zé)處理查詢?nèi)蝿?wù)和具體的任務(wù)處理工作被因。

3、目前版本所有的心跳信息都是存放在Zookeeper服務(wù)器中的衫仑,所有的Server都是對等的梨与,當一個Server死亡后,其它Server會接管起擁有的任務(wù)隊列文狱,

期間會有幾個心跳周期的時延粥鞋。后續(xù)可以用類似ConfigerServer類的存儲。

4瞄崇、現(xiàn)有的工作線程模式分為Sleep模式和NotSleep模式呻粹。缺省是缺省是NOTSLEEP模式到踏。在通常模式下,在通常情況下用Sleep模式尚猿。

在一些特殊情況需要用NotSleep模式窝稿。兩者之間的差異在后續(xù)進行描述。

TaskItem任務(wù)項

是對任務(wù)進行的分片劃分凿掂。例如:

1伴榔、將一個數(shù)據(jù)表中所有數(shù)據(jù)的ID按10取模,就將數(shù)據(jù)劃分成了0庄萎、1踪少、2、3糠涛、4援奢、5、6忍捡、7集漾、8、9供10個任務(wù)項砸脊。

2具篇、將一個目錄下的所有文件按文件名稱的首字母(不區(qū)分大小寫),

就劃分成了A凌埂、B驱显、C、D瞳抓、E埃疫、F、G孩哑、H栓霜、I、J臭笆、K叙淌、L秤掌、M愁铺、N、O闻鉴、P茵乱、Q、R孟岛、S瓶竭、T督勺、U、V斤贰、W智哀、X、Y荧恍、Z供26個隊列瓷叫。

3、將一個數(shù)據(jù)表的數(shù)據(jù)ID哈希后按1000取模作為最后的HASHCODE,我們就可以將數(shù)據(jù)按[0,100)送巡、[100,200) 摹菠、[200,300)、[300,400) 骗爆、

[400,500)次氨、[500,600)、[600,700)摘投、[700,800)煮寡、[800,900)、 [900,1000)劃分為十個任務(wù)項犀呼,當然你也可以劃分為100個任務(wù)項洲押,最多是1000個任務(wù)項。

任務(wù)項是進行任務(wù)分配的最小單位圆凰。一個任務(wù)項只能由一個ScheduleServer來進行處理杈帐。但一個Server可以處理任意數(shù)量的任務(wù)項。

例如任務(wù)被劃分為了10個隊列专钉,可以只啟動一個Server挑童,所有的任務(wù)項都有這一個Server來處理;也可以啟動兩個Server跃须,每個Sever處理5個任務(wù)項站叼;

但最多只能啟動10個Server,每一個ScheduleServer只處理一個任務(wù)項菇民。如果在多尽楔,則第11個及之后的Server將不起作用,處于休眠狀態(tài)第练。

4阔馋、可以為一個任務(wù)項自定義一個字符串參數(shù)由應(yīng)用自己解析。例如:"TYPE=A,KIND=1"

TaskDealBean任務(wù)處理類

是業(yè)務(wù)系統(tǒng)進行數(shù)據(jù)處理的實現(xiàn)類娇掏。要求實現(xiàn)Schedule的接口IScheduleTaskDealMulti或者IScheduleTaskDealSingle呕寝。

接口主要包括兩個方法。一個是根據(jù)調(diào)度器分配到的隊列查詢數(shù)據(jù)的接口婴梧,一個是進行數(shù)據(jù)處理的接口下梢。

運行時間

1客蹋、可以指定任務(wù)處理的時間間隔,例如每天的1:00-3:00執(zhí)行孽江,或者每個月的第一天執(zhí)行讶坯、每一個小時的第一分鐘執(zhí)行等等。

間格式與crontab相同岗屏。如果不指定就表示一致運行闽巩。PERMIT_RUN_START_TIME,PERMIT_RUN_END_TIME

2、可以指定如果沒有數(shù)據(jù)了担汤,休眠的時間間隔涎跨。SLEEP_TIME_NODATA 單位秒

3、可以指定每處理完一批數(shù)據(jù)后休眠的時間間隔.SLEEP_TIME_INTERVAL 單位

OwnSign環(huán)境區(qū)域

是對運行環(huán)境的劃分崭歧,進行調(diào)度任務(wù)和數(shù)據(jù)隔離隅很。例如:開發(fā)環(huán)境、測試環(huán)境率碾、預(yù)發(fā)環(huán)境叔营、生產(chǎn)環(huán)境。

不同的開發(fā)人員需要進行數(shù)據(jù)隔離也可以用OwnSign來實現(xiàn)所宰,避免不同人員的數(shù)據(jù)沖突绒尊。缺省配置的環(huán)境區(qū)域OwnSign='BASE'。

例如:TaskType='DataDeal',配置的隊列是0仔粥、1婴谱、2、3躯泰、4谭羔、5、6麦向、7瘟裸、8、9诵竭。缺省的OwnSign='BASE'话告。

此時如果再啟動一個測試環(huán)境,則Schedule會動態(tài)生成一個TaskType='DataDeal-Test'的任務(wù)類型卵慰,環(huán)境會作為一個變量傳遞給業(yè)務(wù)接口沙郭,

由業(yè)務(wù)接口的實現(xiàn)類,在讀取數(shù)據(jù)和處理數(shù)據(jù)的時候進行確定呵燕。業(yè)務(wù)系統(tǒng)一種典型的做法就是在數(shù)據(jù)表中增加一個OWN_SIGN字段棠绘。

在創(chuàng)建數(shù)據(jù)的時候根據(jù)運行環(huán)境填入對應(yīng)的環(huán)境名稱件相,在Schedule中就可以環(huán)境的區(qū)分了再扭。

調(diào)度策略

是指某一個任務(wù)在調(diào)度集群上的分布策略氧苍,可以制定:

1、可以指定任務(wù)的機器IP列表泛范。127.0.0.1和localhost表示所有機器上都可以執(zhí)行

2让虐、可以指定每個機器上能啟動的線程組數(shù)量,0表示沒有限制

3罢荡、可以指定所有機器上運行的線程組總數(shù)赡突。

3、業(yè)務(wù)接口說明

包含三個業(yè)務(wù)接口区赵,:

1惭缰、IScheduleTaskDeal 調(diào)度器對外的基礎(chǔ)接口,是一個基類笼才,并不能被直接使用

2漱受、IScheduleTaskDealSingle 單任務(wù)處理的接口,繼承 IScheduleTaskDeal

3、IScheduleTaskDealMulti 可批處理的任務(wù)接口,繼承 IScheduleTaskDeal

IScheduleTaskDeal 調(diào)度器對外的基礎(chǔ)接口

public interface IScheduleTaskDeal {

/**

* 根據(jù)條件骡送,查詢當前調(diào)度服務(wù)器可處理的任務(wù)

* @param taskParameter 任務(wù)的自定義參數(shù)

* @param ownSign 當前環(huán)境名稱

* @param taskQueueNum 當前任務(wù)類型的任務(wù)隊列數(shù)量

* @param taskQueueList 當前調(diào)度服務(wù)器昂羡,分配到的可處理隊列

* @param eachFetchDataNum 每次獲取數(shù)據(jù)的數(shù)量

* @return

* @throws Exception

*/

public List selectTasks(String taskParameter,String ownSign,int taskQueueNum,List taskItemList,int eachFetchDataNum) throws Exception;

/**

* 獲取任務(wù)的比較器,只有在NotSleep模式下需要用到

* @return

*/

public Comparator getComparator();

}

IScheduleTaskDealSingle 單任務(wù)處理的接口

public interface IScheduleTaskDealSingle extends IScheduleTaskDeal {

/**

* 執(zhí)行單個任務(wù)

* @param task Object

* @param ownSign 當前環(huán)境名稱

* @throws Exception

*/

public boolean execute(T task,String ownSign) throws Exception;

}

IScheduleTaskDealMulti 可批處理的任務(wù)接口

public interface IScheduleTaskDealMulti? extends IScheduleTaskDeal {

/**

* 執(zhí)行給定的任務(wù)數(shù)組。因為泛型不支持new 數(shù)組摔踱,只能傳遞OBJECT[]

* @param tasks 任務(wù)數(shù)組

* @param ownSign 當前環(huán)境名稱

* @return

* @throws Exception

*/

public boolean execute(Object[] tasks,String ownSign) throws Exception;

}

4虐先、Sleep模式和NotSleep模式的區(qū)別

1、ScheduleServer啟動的工作線程組線程是共享一個任務(wù)池的派敷。

2蛹批、在Sleep的工作模式:當某一個線程任務(wù)處理完畢,從任務(wù)池中取不到任務(wù)的時候篮愉,檢查其它線程是否處于活動狀態(tài)般眉。如果是,則自己休眠潜支;

如果其它線程都已經(jīng)因為沒有任務(wù)進入休眠甸赃,當前線程是最后一個活動線程的時候,就調(diào)用業(yè)務(wù)接口冗酿,獲取需要處理的任務(wù)埠对,放入任務(wù)池中,

同時喚醒其它休眠線程開始工作裁替。

3项玛、在NotSleep的工作模式:當一個線程任務(wù)處理完畢,從任務(wù)池中取不到任務(wù)的時候弱判,立即調(diào)用業(yè)務(wù)接口獲取需要處理的任務(wù)襟沮,放入任務(wù)池中。

4、Sleep模式在實現(xiàn)邏輯上相對簡單清晰开伏,但存在一個大任務(wù)處理時間長膀跌,導(dǎo)致其它線程不工作的情況。

5固灵、在NotSleep模式下捅伤,減少了線程休眠的時間,避免大任務(wù)阻塞的情況巫玻,但為了避免數(shù)據(jù)被重復(fù)處理丛忆,增加了CPU在數(shù)據(jù)比較上的開銷。

同時要求業(yè)務(wù)接口實現(xiàn)對象的比較接口仍秤。

6熄诡、如果對任務(wù)處理不允許停頓的情況下建議用NotSleep模式,其它情況建議用sleep模式诗力。

5粮彤、使用過程中的注意事項(待續(xù))

其他可以參考的內(nèi)容

我:

https://yun.baidu.com/share/home?uk=2214641459&view=share#category/type=0

我:

https://my.oschina.net/treeHeartPig/blog/841775

我:

http://www.cnblogs.com/lengfo/p/4146797.html

我:

http://blog.csdn.net/neutrojan/article/details/9109657

我:

http://code.taobao.org/p/tbschedule/wiki/index/

2.字段 允許值 允許的特殊字符

3.秒 0-59 , - * /

4.分 0-59 , - * /

5.小時 0-23 , - * /

6.日期 1-31 , - * ? / L W C

7.月份 1-12 或者 JAN-DEC , - * /

8.星期 1-7 或者 SUN-SAT , - * ? / L C #

9.年(可選) 留空, 1970-2099 , - * /

10.表達式意義

秒 分 時 ?日 月 星 年

11."0 0 12 * * ?" 每天中午12點觸發(fā)

12."0 15 10 ? * *" 每天上午10:15觸發(fā)

13."0 15 10 * * ?" 每天上午10:15觸發(fā)

14."0 15 10 * * ? *" 每天上午10:15觸發(fā)

15."0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā)

16."0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發(fā)

17."0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發(fā)

18."0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發(fā)

19."0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發(fā)

20."0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā)

21."0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā)

22."0 15 10 15 * ?" 每月15日上午10:15觸發(fā)

23."0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā)

24."0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發(fā)

25."0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發(fā)

26."0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發(fā)

27.每天早上6點

28.0 6 * * *

29.每兩個小時

30.0 */2 * * *

31.晚上11點到早上8點之間每兩個小時,早上八點

32.0 23-7/2姜骡,8 * * *

33.每個月的4號和每個禮拜的禮拜一到禮拜三的早上11點

34.0 11 4 * 1-3

35.1月1日早上4點

36.0 4 1 1 *

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末导坟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子圈澈,更是在濱河造成了極大的恐慌惫周,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件康栈,死亡現(xiàn)場離奇詭異递递,居然都是意外死亡,警方通過查閱死者的電腦和手機啥么,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門登舞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悬荣,你說我怎么就攤上這事菠秒。” “怎么了氯迂?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵践叠,是天一觀的道長。 經(jīng)常有香客問我嚼蚀,道長禁灼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任轿曙,我火速辦了婚禮弄捕,結(jié)果婚禮上僻孝,老公的妹妹穿的比我還像新娘。我一直安慰自己守谓,他們只是感情好穿铆,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著分飞,像睡著了一般悴务。 火紅的嫁衣襯著肌膚如雪睹限。 梳的紋絲不亂的頭發(fā)上譬猫,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天,我揣著相機與錄音羡疗,去河邊找鬼染服。 笑死,一個胖子當著我的面吹牛叨恨,可吹牛的內(nèi)容都是我干的柳刮。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼痒钝,長吁一口氣:“原來是場噩夢啊……” “哼秉颗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起送矩,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤蚕甥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后栋荸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體菇怀,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年晌块,在試婚紗的時候發(fā)現(xiàn)自己被綠了爱沟。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡匆背,死狀恐怖呼伸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钝尸,我是刑警寧澤蜂大,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蝶怔,受9級特大地震影響奶浦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜踢星,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一澳叉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦成洗、人聲如沸五督。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽充包。三九已至,卻和暖如春遥椿,著一層夾襖步出監(jiān)牢的瞬間基矮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工冠场, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留家浇,地道東北人。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓碴裙,卻偏偏與公主長得像钢悲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舔株,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 《分布式任務(wù)調(diào)度平臺XXL-JOB》 一莺琳、簡介 1.1 概述 XXL-JOB是一個輕量級分布式任務(wù)調(diào)度框架,其核心...
    許雪里閱讀 16,800評論 3 29
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理载慈,服務(wù)發(fā)現(xiàn)惭等,斷路器,智...
    卡卡羅2017閱讀 134,719評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法娃肿,類相關(guān)的語法咕缎,內(nèi)部類的語法,繼承相關(guān)的語法料扰,異常的語法凭豪,線程的語...
    子非魚_t_閱讀 31,668評論 18 399
  • 經(jīng)常聽到許多病友提到血稠拯钻,這其實不是一個醫(yī)學(xué)術(shù)語帖努。血稠就是高脂血癥,就是血管里面的油多了粪般,血流速度減慢拼余,導(dǎo)致腦部供...
    低調(diào)的小明同學(xué)閱讀 839評論 0 0
  • 作者|Curry悅超 今天在火車上匙监,我坐在11號車廂凡橱,有個男的過來跟我說:“能不能跟我女票換一個位子,她在16號車...
    星際旅人閱讀 888評論 0 2