1. 程式人生 > >基於Zookeeper的TbSchedule任務排程服務部署以及應用

基於Zookeeper的TbSchedule任務排程服務部署以及應用

一、前言

前面已經說過zookeeper叢集的部署,接下來我們在zookeeper叢集的基礎上部署tbSchedule任務排程,開始部署之前我們先來簡要看看tbSchedule是什麼?

  • TBSchedule:分散式任務排程框架,主要是為了協調多節點處理相同任務的避免資料被重複處理的框架,處理方式主要分為“搶佔式”和“協同分配式”,通過叢集的節點分擔大批量任務的處理,提高批量任務的處理效率。

  • 不同處理方式的任務的側重點不同:

    “搶佔式”:沒法把單個任務的資料,讓其它節點協同處理,所以一般來說搶佔式任務處理方式一般用於處理資料量比較小,任務比較多的場景;

    “協同分配式”:

    處理可以把單個任務處理的資料均分到多個jvm中進行處理的,提高資料的並行處理能力。

二、控制檯部署

  1. 使用svn直接下載資源:http://code.taobao.org/svn/tbschedule/trunk
  2.  將原始碼目錄下的console\ScheduleConsole.war包部署到Web應用伺服器,本文以apache-tomcat-7.0.92為例,放在webapps資料夾下,啟動tomcat,位址列輸入地址:http://部署主機ip:8080(tomcat預設8080)/ScheduleConsole/schedule/index.jsp?manager=true,如果看到如下介面說明成功
  3. 修改上圖中紅框中的內容,第一個是zookeeper部署地址,多地址逗號隔開,第二個是指定任務排程相關資源的存放位置
  4. 點選儲存後,會提示 “錯誤資訊:Zookeeper connecting ……192.168.244.128:2181”,如果ZKServer配置正確可以不用理會,直接點選“管理主頁”,若不能正常跳轉到Index.jsp頁面請重新檢查Zookeeper的配置,建議關閉防火牆。
  5.  

    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 實現

  1. 測試程式碼:http://code.taobao.org/svn/tbschedule-test/
  2. 任務名稱:用於標識“任務”和策略的關聯關係;


    任務名稱:對應排程策略中的任務名稱,標識任務和策略的關聯關係;

    任務處理的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