基於Zookeeper的TbSchedule任務排程服務部署以及應用
一、前言
前面已經說過zookeeper叢集的部署,接下來我們在zookeeper叢集的基礎上部署tbSchedule任務排程,開始部署之前我們先來簡要看看tbSchedule是什麼?
-
TBSchedule:分散式任務排程框架,主要是為了協調多節點處理相同任務的避免資料被重複處理的框架,處理方式主要分為“搶佔式”和“協同分配式”,通過叢集的節點分擔大批量任務的處理,提高批量任務的處理效率。
-
不同處理方式的任務的側重點不同:
“搶佔式”:沒法把單個任務的資料,讓其它節點協同處理,所以一般來說搶佔式任務處理方式一般用於處理資料量比較小,任務比較多的場景;
“協同分配式”:
二、控制檯部署
- 使用svn直接下載資源:http://code.taobao.org/svn/tbschedule/trunk
- 將原始碼目錄下的console\ScheduleConsole.war包部署到Web應用伺服器,本文以apache-tomcat-7.0.92為例,放在webapps資料夾下,啟動tomcat,位址列輸入地址:http://部署主機ip:8080(tomcat預設8080)/ScheduleConsole/schedule/index.jsp?manager=true,如果看到如下介面說明成功
- 修改上圖中紅框中的內容,第一個是zookeeper部署地址,多地址逗號隔開,第二個是指定任務排程相關資源的存放位置
- 點選儲存後,會提示 “錯誤資訊:Zookeeper connecting ……192.168.244.128:2181”,如果ZKServer配置正確可以不用理會,直接點選“管理主頁”,若不能正常跳轉到Index.jsp頁面請重新檢查Zookeeper的配置,建議關閉防火牆。
-
TbSchedule Console Web站點對應的兩個地址
[監控頁面] http://192.168.244.128:8080/ScheduleConsole/schedule/index.jsp
[管理頁面] http://192.168.244.128:8080/ScheduleConsole/schedule/index.jsp?manager=true
如果以上地址能正常訪問則TbSchedule Console的部署配置完成。
三 、TBSchedule Worker Task 實現
- 測試程式碼:http://code.taobao.org/svn/tbschedule-test/
-
任務名稱:用於標識“任務”和策略的關聯關係;
任務名稱:對應排程策略中的任務名稱,標識任務和策略的關聯關係;任務處理的SpringBean:對應程式碼中排程任務的bean
每次獲取資料量:排程任務中selectTasks方法中 eachFetchDataNum引數接收
自定義引數:排程任務中selectTasks方法中 taskParameter 引數接收
任務分隔:就是“TaskItem任務項”的說明,參考:http://code.taobao.org/p/tbschedule/wiki/index/ 中的“TaskItem任務項”
處理模式:Sleep模式和NotSleep模式的區別
1、ScheduleServer啟動的工作執行緒組執行緒是共享一個任務池的。
2、在Sleep的工作模式:當某一個執行緒任務處理完畢,從任務池中取不到任務的時候,檢查其它執行緒是否處於活動狀態。如果是,則自己休眠;如果其它執行緒都已經因為沒有任務進入休眠,當前執行緒是最後一個活動執行緒的時候,就呼叫業務介面,獲取需要處理的任務,放入任務池中,同時喚醒其它休眠執行緒開始工作。
3、在NotSleep的工作模式:當一個執行緒任務處理完畢,從任務池中取不到任務的時候,立即呼叫業務介面獲取需要處理的任務,放入任務池中。
4、Sleep模式在實現邏輯上相對簡單清晰,但存在一個大任務處理時間長,導致其它執行緒不工作的情況。
5、在NotSleep模式下,減少了執行緒休眠的時間,避免大任務阻塞的情況,但為了避免資料被重複處理,增加了CPU在資料比較上的開銷。同時要求業務介面實現物件的比較介面。
6、如果對任務處理不允許停頓的情況下建議用NotSleep模式,其它情況建議用sleep模式。
TBSchedule 簡單Demo(Maven):
建立新任務時
執行開始時間:
每五分鐘執行 /5 * * *
每小時執行 0 * * * *
每天執行 0 0 * * *
每週執行 0 0 * * 0
每月執行 0 0 1 * *
每年執行 0 0 1 1 *
每分鐘的0秒開始 0 * * * * ?
表示式同Quartz設定的Crontab格式,有工具可以生成
詳細解釋參考:http://blog.csdn.net/liuziyingbeidou/article/details/52629596