摘要:使用方法任務(wù)名稱對應(yīng)調(diào)度策略中的任務(wù)名稱任務(wù)處理的對應(yīng)處理機中的名稱心跳頻率秒假定服務(wù)死亡間隔秒保持默認(rèn)線程數(shù)處理該任務(wù)的線程數(shù),在沒有劃分多任務(wù)項的情況下,多線程是沒有意義的,且線程數(shù)大于任務(wù)項也是沒有意義的。
使用方法
任務(wù)名稱:對應(yīng)調(diào)度策略中的任務(wù)名稱
任務(wù)處理的SpringBean:對應(yīng)處理機中的Bean名稱
心跳頻率(秒)/假定服務(wù)死亡間隔(秒):保持默認(rèn)
線程數(shù):處理該任務(wù)的線程數(shù),在沒有劃分多任務(wù)項的情況下,多線程是沒有意義的,且線程數(shù) 大于任務(wù)項也是沒有意義的。如果要開啟多機多線程,必須對數(shù)據(jù)做任務(wù)項過濾
處理模式:SLEEP(推薦)、NOSLEEP(單個線程處理完分配到的數(shù)據(jù)后,立刻會重新獲取數(shù)據(jù))
每次獲取數(shù)據(jù)量:子計時單元開始,線程會不斷的去獲取數(shù)據(jù)(eachFetchDataNum參數(shù)),直到獲取不到數(shù)據(jù)子計時單元才結(jié)束
每次執(zhí)行數(shù)量:執(zhí)行機實現(xiàn)IScheduleTaskDealMulti接口時使用,handleTask方法參數(shù)arg0的數(shù)量(taskTypeInfo中executeNumber)
沒有數(shù)據(jù)時休眠時長(秒):
未設(shè)置開始時間:當(dāng)獲取不到數(shù)據(jù)時,休眠此時間,再執(zhí)行獲取數(shù)據(jù)操作
設(shè)置開始時間,未設(shè)置結(jié)束時間:無效(實際上子計時單元即將停止了)
設(shè)置開始時間,設(shè)置結(jié)束時間:當(dāng)獲取不到數(shù)據(jù)時,休眠此時間,再執(zhí)行獲取數(shù)據(jù)操作
每次處理完數(shù)據(jù)后休眠時間(秒):子計時單元內(nèi),兩次獲取數(shù)據(jù)操作間隔(對于總會返回數(shù)據(jù)的任務(wù),使用這個配置來控制間隔)
執(zhí)行開始時間:子計時任務(wù)開始時間
執(zhí)行結(jié)束時間:子計時任務(wù)結(jié)束時間
單線程組最大任務(wù)項:配置單JVM處理的最大任務(wù)項數(shù)量,多任務(wù)項情況下,可按需限制,一般默認(rèn),多執(zhí)行機會均衡分配(TBScheduleManager的任務(wù)調(diào)度器使用,未研究過。。)
策略名稱:策略標(biāo)示,隨意填寫
任務(wù)類型:一般保持默認(rèn)Schedule
任務(wù)名稱:對應(yīng)任務(wù)欄被調(diào)度任務(wù)名稱
任務(wù)參數(shù):一般不用,保持空
單JVM最大線程組數(shù)量:單個JVM允許開啟的線程數(shù)
最大線程組數(shù)量:多處理機情況下的線程總數(shù)限制(總線程數(shù)為2,如果配置任務(wù)項的線程為4是沒有意義的)
IP地址(逗號分隔):如圖說明,此處注意多處理機如果沒有根據(jù)任務(wù)項劃分?jǐn)?shù)據(jù)處理,會導(dǎo)致多處理機重復(fù)處理數(shù)據(jù)
TBScheduleProcessorSleep多線程工作原理啟動task配置的threadNum數(shù)量的線程去處理任務(wù)。由其中一個線程去獲取任務(wù)并放入taskList隊列中,所有的線程從這個隊列中獲取任務(wù)執(zhí)行。如果是Multi任務(wù),可以一次取多個任務(wù)執(zhí)行。在一個線程獲取任務(wù)的過程中,其他線程處于休眠狀態(tài),任務(wù)獲取完畢喚醒其他線程。
TBScheduleProcessorSleep#loadScheduleData
IScheduleTaskDeal#selectTasks,由此方法的實現(xiàn)返回獲取的任務(wù)
兩次loadScheduleData之間有休眠,即在task上配置的SleepTimeInterval(每次處理完數(shù)據(jù)后休眠時間)
一旦TBScheduleProcessorSleep啟動了,會一直循環(huán)執(zhí)行,直到PauseTimer讓其停止。但如果沒有配置結(jié)束時間,則一直運行。(對于運行間隔較短的任務(wù),應(yīng)通過上述休眠時間來實現(xiàn)控制)
注意事項計劃任務(wù)開始/恢復(fù)的時候Factory會創(chuàng)建TBScheduleProcessorSleep、TBScheduleProcessorNotSleep對象;計劃停止的時候,會將已經(jīng)在執(zhí)行的任務(wù)處理完,但是緩存在隊列中帶執(zhí)行的任務(wù)將被丟棄
IScheduleTaskDealSingle和IScheduleTaskDealMulti兩個接口,除了execute方法上參數(shù)不同,功能上沒有區(qū)別
處理模式為Sleep下getComparator()沒有作用,一般情況下,使用Sleep模式
原理 zk數(shù)據(jù)的大致結(jié)構(gòu)factory部分:
/rootPath/factory /rootPath/factory/facotoryUUID1 /rootPath/strategy /rootPath/strategy/strategy1 /rootPath/strategy/strategy1/factoryUUID1
factory(永久節(jié)點)存儲執(zhí)行機注冊的主機信息,每個執(zhí)行機啟動后,都會在factory下創(chuàng)建一個臨時順序子節(jié)點,該節(jié)點名是由TBSchedule源碼生成的主機唯一標(biāo)示。每個factory對應(yīng)一個執(zhí)行機啟動的TBScheduleManagerFactory實例,每個JVM可以有多個factory實例,factory實例也可以存在于不同的JVM中。(一般一個JVM對應(yīng)一個factory,即任務(wù)執(zhí)行終端)
strategy(永久節(jié)點)是在調(diào)度機配置的任務(wù)策略,每個factory啟動時候回去檢查自己能處理哪幾個strategy,如果能處理則在/rootPath/strategy/strategy1/路徑下注冊自己,注冊的這個信息在tbschedule源碼里叫做FactoryRunningInfo。
調(diào)度配置為永久節(jié)點
[zk: 172.26.50.86:2181(CONNECTED) 56] get /rootPath/strategy/IScheduleTaskDealSingleTest {"strategyName":"IScheduleTaskDealSingleTest","IPList":["127.0.0.1"],"numOfSingleServer":0,"assignNum":1,"kind":"Schedule","taskName":"IScheduleTaskDealSingleTest","taskParameter":"0","sts":"resume"} [zk: 172.26.50.86:2181(CONNECTED) 57] get /rootPath/strategy/IScheduleTaskDealSingleTest/127.0.0.1$IAN$7D3122FC0C574603B6CFD0C146641A77$0000000000 {"strategyName":"IScheduleTaskDealSingleTest","uuid":"127.0.0.1$IAN$7D3122FC0C574603B6CFD0C146641A77$0000000000","requestNum":1,"currentNum":0,"message":""}
ScheduleServer部分:
/rootPath/baseTaskType /rootPath/baseTaskType/task1 /rootPath/baseTaskType/task1/task1 /rootPath/baseTaskType/task1/task1/server /rootPath/baseTaskType/task1/task1/server/scheduleServerUUID1 /rootPath/baseTaskType/task1/task1/taskItem /rootPath/baseTaskType/task1/task1/taskItem/0 /rootPath/baseTaskType/task1/task1/taskItem/0/cur_server /rootPath/baseTaskType/task1/task1/taskItem/0/deal_desc /rootPath/baseTaskType/task1/task1/taskItem/0/parameter /rootPath/baseTaskType/task1/task1/taskItem/0/req_server /rootPath/baseTaskType/task1/task1/taskItem/0/sts
baseTaskType(永久節(jié)點)存儲調(diào)度機創(chuàng)建的任務(wù)信息
例如:task1是在后臺配置的任務(wù)。
/rootPath/baseTaskType/task1/task1/server/scheduleServerUUID1表示可以用來處理任務(wù)的調(diào)度器,每個factory實例可以有多個ScheduleServer實例。
/rootPath/baseTaskType/task1/task1/taskItem表示配置任務(wù)時,每個任務(wù)可以拆分成幾個小的任務(wù)項。該節(jié)點的子節(jié)點,表示這個任務(wù)項運行時的信息,例如cur_server表示這個taskItem正在被哪個ScheduleServer處理。這些在tbschedule源碼里也叫作runningInfo。
任務(wù)配置為永久節(jié)點
[zk: 172.26.50.86:2181(CONNECTED) 37] ls /rootPath/baseTaskType [IScheduleTaskDealSingleTest] [zk: 172.26.50.86:2181(CONNECTED) 39] get /rootPath/baseTaskType/IScheduleTaskDealSingleTest {"baseTaskType":"IScheduleTaskDealSingleTest","heartBeatRate":5000,"judgeDeadInterval":60000,"sleepTimeNoData":500,"sleepTimeInterval":0,"fetchDataNumber":500,"executeNumber":1,"threadNumber":1,"processorType":"SLEEP","permitRunStartTime":"0 * * * * ?","expireOwnSignInterval":1.0,"dealBeanName":"iScheduleTaskDealSingleTest","taskParameter":"0","taskKind":"static","taskItems":["0"],"maxTaskItemsOfOneThreadGroup":0,"version":0,"sts":"resume"}核心類圖
TBScheduleManagerFactoryfactory 實例對象,管理這個factory內(nèi)部所有的事情。
ZKManager 負(fù)責(zé)與zk之間的連接,數(shù)據(jù)交換。
IScheduleDataManager 負(fù)責(zé)/rootPath/baseTaskType及其子節(jié)點所有數(shù)據(jù)模型維護。
ScheduleDataManger4ZK 負(fù)責(zé)/rootPath/factory、/rootPath/strategy及其字節(jié)點數(shù)據(jù)模型維護。
IStrategyTask 每個實例代表一個線程組,每個strategy可對應(yīng)多個IStrategyTask實例,來真正處理配置的任務(wù)。
類之間的關(guān)系圖:
Factory 任務(wù)處理器(可以理解為JVM)
strategy 為配置的任務(wù)
一個Factory處理多個strategy,每個strategy下有多個IStrategyTask對象。
TBScheduleManager實現(xiàn)IStrategyTask接口,一個TBScheduleManager實例與ScheduleServer、IScheduleProcessor、IScheduleTaskDeal是一對一關(guān)系。
ScheduleServer是針對某個task的調(diào)度器
IScheduleProcessor是處理任務(wù)的多線程任務(wù)處理器,控制我們?nèi)蝿?wù)數(shù)據(jù)的循環(huán)執(zhí)行(有TBScheduleProcessorSleep、TBScheduleProcessorNotSleep兩種實現(xiàn))
IScheduleTaskDeal是我們需要實現(xiàn)的任務(wù)對象(架構(gòu)組提供的AbstractTaskDealSingle、AbstractTaskDealMulti為其abstract實現(xiàn))
http://www.jianshu.com/p/e925...
http://blog.csdn.net/taosir_z...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/68093.html
摘要:指南無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率使用團隊推薦的最新項目版本和技術(shù)。使用進行消息傳遞了解如何將用作消息代理。安全架構(gòu)的主題指南,這些位如何組合以及它們?nèi)绾闻c交互。使用的主題指南以及如何為應(yīng)用程序創(chuàng)建容器鏡像。 Spring 指南 無論你正在構(gòu)建什么,這些指南都旨在讓你盡快提高工作效率 — 使用Spring團隊推薦的最新Spring項目版本和技術(shù)。 入門指南 這些...
摘要:對于廣大的前端開發(fā)人員來說,網(wǎng)站構(gòu)建本是家常便飯其中也不得不涉及到性能優(yōu)化的問題。將不影響首屏的資源和當(dāng)前屏幕資源不用的資源放到用戶需要時才加載,可以大大提升重要資源的顯示速度和降低總體流量按需加載會導(dǎo)致大量重繪,影響渲染性能。對于廣大的前端開發(fā)人員來說,網(wǎng)站構(gòu)建本是家常便飯;其中也不得不涉及到性能優(yōu)化的問題。之前也有接觸過,今天總結(jié)一下這方面的技巧,下面是我的一下認(rèn)知,歡迎探討: ? Nu...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執(zhí)行次查詢之后,查詢優(yōu)化器都會重新評估查詢計劃。上一篇文章指南使用復(fù)合索引操作符如何使用索引索引對象和數(shù)組索引基數(shù)下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復(fù)合索引、$操作符如何使用索引、索引對象和數(shù)組、索引基數(shù)下一篇文章:MongoDB指南---13、索引類型 使用explain...
摘要:表示本次查詢使用了索引,具體來說,是使用了和上的索引,。建立索引時,或者是每執(zhí)行次查詢之后,查詢優(yōu)化器都會重新評估查詢計劃。上一篇文章指南使用復(fù)合索引操作符如何使用索引索引對象和數(shù)組索引基數(shù)下一篇文章指南索引類型 上一篇文章:MongoDB指南---11、使用復(fù)合索引、$操作符如何使用索引、索引對象和數(shù)組、索引基數(shù)下一篇文章:MongoDB指南---13、索引類型 使用explain...
閱讀 3213·2021-11-08 13:18
閱讀 1366·2021-10-09 09:57
閱讀 1198·2021-09-22 15:33
閱讀 3997·2021-08-17 10:12
閱讀 5079·2021-08-16 11:02
閱讀 2693·2019-08-30 10:56
閱讀 975·2019-08-29 18:31
閱讀 3263·2019-08-29 16:30