1、前言:
雖然單個Quartz實例能給予咱們很好的任務job調度能力,但它不能知足典型的企業需求,如可伸縮性、高可靠性知足。假如你須要故障轉移的能力並能運行日益增多的 Job,Quartz集羣勢必成爲你應用的一部分了。使用 Quartz 的集羣能力能夠更好的支持你的業務需求,而且即便是其中一臺機器在最糟的時間掛掉了也能確保全部的 Job 獲得執行。html
2、Quartz集羣框架效果圖:
一個 Quartz 集羣中的每一個節點是一個獨立的 Quartz 應用,它又管理着其餘的節點。也就是你必須對每一個節點分別啓動或中止。不像許多應用服務器的集羣,獨立的Quartz 節點並不與另外一其的節點或是管理節點通訊。Quartz 應用是經過數據庫表來感知到另外一應用的。java
spring中quartz.properties配置quartz集羣功能:mysql
3、Quartz集羣的好處優點:
一、Quartz能完成較爲複雜的定時任務spring
二、 Quartz的集羣功能保證了任務可靠、高效的正常執行,當集羣中其中的一個節點出問題時,另外的節點接手任務,繼續工做。確保全部的job的到執行。sql
三、 Quartz功能強大但配置較爲簡單數據庫
四、 無環境依賴性,Java的普通應用均能使用express
4、Quartz集羣的缺點:
Quartz一點都不明確你是在同一臺機器上運行全部節點,仍是在不一樣的機器上運行全部節點。當集羣是放置在不一樣的機器上時,咱們稱之爲水平集羣。若是全部節點是跑在同一臺機器的時候,咱們稱之爲垂直集羣。對於垂直集羣,存在着單點故障的問題。這對高可用性的應用來講是個壞消息,由於一旦機器宕掉了,全部的節點也就被有效的終止了。而當你運行水平集羣時,一個嚴格的要求就是咱們的時鐘時間必需要同步,以避免出現離奇且不可預知的行爲。假如時鐘沒可以同步,Scheduler 實例將對其餘節點的狀態產生混亂,形成難以估計得麻煩。服務器
怎麼解決這個問題呢?app
俗話說,不能把全部的雞蛋放在一個籃子裏。在能知足業務或者性能要求的條件下,儘可能使用水平集羣。咱們有不少方法能夠來保證時間的同步。其中最簡單額就是把時間抽出來,單獨使用一個internet時間服務器(Internet Time Server ITS)來作標準時間,全部的節點都已這上面的時間爲準,時間就統一了。框架
Trigger配置文件更改時當數據庫qrtz_cron_triggers中cron_expression未更改,則觸發器的運行觸發規則未改變。
因此quartz集羣缺陷總結如下幾點:
一、時間規則更改不方便,需同步更改數據庫時間規則描述
二、Quartz集羣當全部節點跑在同一臺服務器上,當服務器崩潰時全部節點將終止,定時任務將不能正常執行
三、Quartz集羣當節點不在同一臺服務器上時,因時鐘的可能不一樣步致使節點對其餘節點狀態的產生影響。
而咱們的解決方案,參考本博客內容選用。慎用!