1、clover分佈式調度介紹
clover分佈式任務調度是完全使用Java技術自主開發
特點如下:
1、防單點故障
2、job可部署多臺,但任務調度時,只有一臺參執行。如果一臺下線,
clover選擇其他已在zookeeper註冊job來執行。
3、可管理監控程序 ,相關負責人的job不可用會發送郵件通知
4、提供管理後臺,可手動停止任務,設置任務執行頻率、恢復策
略。人工干預指定哪些job來工作,可查看任務執行進度、任務執行失敗時會收到報警並記錄日誌。
5、執行中的任務,但未執行完成,不會再次調度任務
6、支持災難重現,server端不可用,但client端註冊job信息會存儲到臨時DB中,當server重啓後立即去讀臨時DB並執行相應job
7、job支持LOCAL、REMOTE模式以及ADD、UPDATE、DELETE操作
8、支持動態創建job、spring配置文件和註解方式註冊job
9、可以查詢所有運行報錯日誌查詢
10、管理後臺可以創建、修改、刪除job
2、 總體框架分析
3、 總體框架分析-系統流程圖
4、 技術-項目結構
5、 涉及技術
MongoDB集羣:負責存儲clover所有數據信息,當初想考慮使用LevelDB,但不方便管理,Redis完全放棄了,理由是對於頻繁寫操作性能下降、總有連接超時
ZK集羣:負責server和client啓動註冊信息,所有server、client信息都是有讀寫操作權限,目的防止被他人或程序修改
ZeroMQ:負責server和client消息通信&後臺管理頁面創建、修改、刪除job通信
使用ZeroMQ的理由:就是快,就是那麼任性,流式技術框架storm使用,未來會考慮使用Spark的akka消息通信框架
Monitor:負責死亡心跳檢測,監控server、client端,使用Java Timer實現
後臺管理頁面:bootstrap +jsp+highcharts
Spring:重新定義spring的xsd標籤以及Annotation註解方式,註冊job
Snappy:通信消息壓縮方式,減少網絡數據傳輸帶寬
Curator:監聽ZK數據包變更,並保持到內存中,方便程序快速獲取server和client端信息
Quartz:基於quartz重寫底層定時任務調度,考慮處理各種任務執行規則問題,而選擇quartz來調度任務
6、clover使用
6.3、 項目中定義ClientJobClass
6.4、 非spring項目使用-啓動clover-client
6.5、 非spring項目使用-啓動job
6.6、 spring項目使用-啓動clover-client
6.7、spring項目使用-啓動clover-client
7、後臺管理頁面
7.1、主頁面
7.2、zk管理頁面
7.3、job管理頁面
7.4、聯繫人管理頁面
7.5、日誌管理頁面
8、性能分析
8.1、clover server壓力
Server端只負責任務定時執行和分發到指定client端,由於使用了quartz,server端在定時輪訓執行任務以及解析定時任務時間方面,對性能壓力減少了很多
Server端分發消息,使用zeromq非阻塞方式發送消息給指定client端,目前部署兩臺服務器完全勝任所有性能壓力
Server端支持集羣部署,每次client發送消息隨機Hash到某一臺server服務器
當所有的server都不可用,爲了不影響client的使用,將會把clientjob信息存儲到臨時DB中,此刻還會發送郵件報警給相關server負責人,server立即重啓後,會把所有臨時DB中數據讀取並執行,此刻client可以繼續收到消息並執行業務邏輯
Server端監聽所有client端ZK消息後放入內存中,當client端zk數據信息發送變化後,才修改內存數據,這樣可以提供server端獲取client端zk信息速度,也減輕了zk不斷被訪問的壓力
8.2zk壓力
俺真心沒啥壓力,俺是一個大集羣,你們這些大爺和土豪就每次啓動容器時候將初始化信息放到我這邊,而當你們數據信息發生變化(修改節點數據、節點數據不可用),監聽者纔會訪問俺,其實想想你們沒事 肯定不會經常變更數據滴,(*^__^*),不過 當你們掛了 或者關閉應用程序時候,我會把你們全部刪除滴,這就會浪費倫家點時間和力氣吧
8.3MongoDB
8.4zeromq
8.5zeromq push/pull模式