【淘淘】Quartz之集群利弊


一、前言:

      雖然單個Quartz實例能給予我們很好的任務job調度能力,但它不能滿足典型的企業需求,如可伸縮性、高可靠性滿足。假如你需要故障轉移的能力並能運行日益增多的 Job,Quartz集群勢必成為你應用的一部分了。使用 Quartz 的集群能力可以更好的支持你的業務需求,並且即使是其中一台機器在最糟的時間掛掉了也能確保所有的 Job 得到執行。

      

二、Quartz集群框架效果圖:

                

        一個 Quartz 集群中的每個節點是一個獨立的 Quartz 應用,它又管理着其他的節點。也就是你必須對每個節點分別啟動或停止。不像許多應用服務器的集群,獨立的Quartz 節點並不與另一其的節點或是管理節點通信。Quartz 應用是通過數據庫表來感知到另一應用的。

 

spring中quartz.properties配置quartz集群功能:

 

 

[html]  view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. org.quartz.jobStore.isClustered= true   
  2. org.quartz.jobStore.clusterCheckinInterval =20000  

 

三、Quartz集群的好處優勢:

 

 

1、Quartz能完成較為復雜的定時任務

 

2、 Quartz的集群功能保證了任務可靠、高效的正常執行,當集群中其中的一個節點出問題時,另外的節點接手任務,繼續工作。確保所有的job的到執行。

 

3、 Quartz功能強大但配置較為簡單

 

4、 無環境依賴性,Java的普通應用均能使用

 

四、Quartz集群的缺點:

 

         Quartz一點都不明確你是在同一台機器上運行所有節點,還是在不同的機器上運行所有節點。當集群是放置在不同的機器上時,我們稱之為水平集群。如果所有節點是跑在同一台機器的時候,我們稱之為垂直集群。對於垂直集群,存在着單點故障的問題。這對高可用性的應用來說是個壞消息,因為一旦機器宕掉了,所有的節點也就被有效的終止了。而當你運行水平集群時,一個嚴格的要求就是我們的時鍾時間必須要同步,以免出現離奇且不可預知的行為。假如時鍾沒能夠同步,Scheduler 實例將對其他節點的狀態產生混亂,造成難以估計得麻煩。

 怎么解決這個問題呢?

         俗話說,不能把所有的雞蛋放在一個籃子里。在能滿足業務或者性能要求的條件下,盡量使用水平集群。我們有很多方法可以來保證時間的同步。其中最簡單額就是把時間抽出來,單獨使用一個internet時間服務器(Internet Time Server ITS)來做標准時間,所有的節點都已這上面的時間為准,時間就統一了。

 

         Trigger配置文件更改時當數據庫qrtz_cron_triggers中cron_expression未更改,則觸發器的運行觸發規則未改變。

 

所以quartz集群缺陷總結以下幾點:

 

1、時間規則更改不方便,需同步更改數據庫時間規則描述

 

2、Quartz集群當所有節點跑在同一台服務器上,當服務器崩潰時所有節點將終止,定時任務將不能正常執行

 

3、Quartz集群當節點不在同一台服務器上時,因時鍾的可能不同步導致節點對其他節點狀態的產生影響。

而我們的解決方案,參考本博客內容選用。慎用!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM