1、培訓(xùn)過(guò)程中,如有部分內(nèi)容理解不透或消化不好,可免費(fèi)在以后培訓(xùn)班中重聽(tīng); 2、培訓(xùn)結(jié)束后,授課老師留給學(xué)員聯(lián)系方式,保障培訓(xùn)效果,免費(fèi)提供課后技術(shù)支持。 3、培訓(xùn)合格學(xué)員可享受免費(fèi)推薦就業(yè)機(jī)會(huì)。
作為一個(gè)開(kāi)發(fā)者,避免不了定時(shí)任務(wù)的問(wèn)題,最粗暴和簡(jiǎn)單直接的解決方案就是crontab。當(dāng)然在機(jī)器少,任務(wù)不多,定時(shí)任務(wù)之間關(guān)聯(lián)少的情況下,crontab效率還是比較高和便捷的。但當(dāng)機(jī)器越多、定時(shí)任務(wù)越多,各個(gè)任務(wù)聯(lián)系越緊密的情況下,用crontab進(jìn)行定時(shí)任務(wù)的管理配置,就會(huì)非常混亂,嚴(yán)重影響工作效率。
?
機(jī)器多、定時(shí)任務(wù)多的情況下,就會(huì)遇到以下問(wèn)題:
1、每個(gè)服務(wù)器各個(gè)用戶下的crontab任務(wù)管理混亂,生命周期無(wú)法統(tǒng)一協(xié)調(diào)管理
2、定時(shí)任務(wù)運(yùn)行異常告警難以統(tǒng)一對(duì)接
3、任務(wù)A和任務(wù)B如果存在互斥關(guān)系,crontab很難進(jìn)行互斥處理
4、隨著時(shí)間增長(zhǎng),當(dāng)定時(shí)任務(wù)達(dá)到幾千上萬(wàn)的時(shí)候,定時(shí)任務(wù)就非常難以管理,線上跑了多個(gè)定時(shí)任務(wù),每個(gè)定時(shí)任務(wù)什么時(shí)候運(yùn)行,屬于哪個(gè)應(yīng)用和哪個(gè)開(kāi)發(fā)負(fù)責(zé)等等問(wèn)題變得很難解決。
Linux原生Crontab調(diào)度系統(tǒng)和Quartz對(duì)比:
1、執(zhí)行粒度方面:
Crontab:進(jìn)程調(diào)度
Quartz:線程調(diào)度
線程調(diào)度優(yōu)勢(shì):一是更節(jié)省資源,二是可以在進(jìn)程內(nèi)做數(shù)據(jù)交換,做數(shù)據(jù)交換這點(diǎn)很重要。
2、平臺(tái)依賴性:
Crontab支持Linux系統(tǒng)
Quartz由于是Java實(shí)現(xiàn),所以支持跨平臺(tái)。
3、調(diào)度操作集上:
Quartz的設(shè)置更為靈活,可以很方便的通過(guò)代碼完成各種自定義需求,而且完全閉包Crontab。
但是Crontab的最小調(diào)度單元為分鐘級(jí),而Quartz可以更細(xì),Crontab實(shí)現(xiàn)自定義需求比較麻煩。
4、Job監(jiān)控方面:
Quartz支持Listener,對(duì)job運(yùn)行情況監(jiān)控很方便,并且能用JobStores進(jìn)行調(diào)度信息的持久化(內(nèi)存、DB均可),進(jìn)而可以實(shí)現(xiàn)job可視化
5、高可用:
Quartz支持分布式集群,這一點(diǎn)很重要,而且實(shí)現(xiàn)很方便。
為什么要用分布式集群任務(wù)調(diào)度?
想象一下,現(xiàn)在有 A 、B、 C ?3 臺(tái)機(jī)器同時(shí)作為集群服務(wù)器對(duì)外統(tǒng)一提供 SERVICE,3 臺(tái)機(jī)器上各有一個(gè) QUARTZ ?Job,它們會(huì)按照即定的 SCHEDULE 自動(dòng)執(zhí)行各自的任務(wù)。由于三臺(tái)SERVER 里都有 QUARTZ ,因此會(huì)存在重復(fù)處理 TASK 的現(xiàn)象。一般的解決方案是只在一臺(tái)服務(wù)器上裝 QUARTZ ,其它兩臺(tái)不裝,這樣的話其實(shí)就是單機(jī)了,quartz會(huì)存在單點(diǎn)問(wèn)題,一旦裝有quartz的服務(wù)器宕了,服務(wù)就無(wú)法提供了。當(dāng)然通過(guò)改 QUARTZ JOB 的代碼也可以實(shí)現(xiàn),但是這對(duì)開(kāi)發(fā)人員要求比較高,而且可能會(huì)出現(xiàn)其他問(wèn)題。然而quartz本身就提供了很好的集群方案。quartz集群需要數(shù)據(jù)庫(kù)的支持(JobStore TX或者JobStoreCMT),從本質(zhì)上來(lái)說(shuō),是使集群上的每一個(gè)節(jié)點(diǎn)通過(guò)共享同一個(gè)數(shù)據(jù)庫(kù)來(lái)工作而達(dá)到高可用的。分布式集群任務(wù)調(diào)度,quartz是一個(gè)比較好的選擇。簡(jiǎn)單,強(qiáng)大,穩(wěn)定。
分布式集群時(shí)有個(gè)問(wèn)題,就是所有服務(wù)器時(shí)鐘應(yīng)當(dāng)要同步,以免出現(xiàn)離奇且不可預(yù)知的問(wèn)題。
本課程從最開(kāi)始的quatz框架講起,由淺到深,從使用到結(jié)構(gòu)分析,再到源碼分析,深入解析quatz、spring+quatz,并且會(huì)講解相關(guān)原理, 讓大家充分的理解這個(gè)框架和框架的設(shè)計(jì)思想。由于互聯(lián)網(wǎng)的復(fù)雜性,為了滿足我們特定的需求,需要對(duì)spring+quatz進(jìn)行二次開(kāi)發(fā),整個(gè)二次開(kāi)發(fā)過(guò)程都會(huì)講解。?
課程大綱:
1、分布式任務(wù)調(diào)度需求說(shuō)明
2、分布式任務(wù)調(diào)度之quartz初體驗(yàn)
3、分布式任務(wù)調(diào)度Trigger之simpleTrigger
4、分布式任務(wù)調(diào)度Trigger之DailyTimetrigger和calendartrigger
5、分布式任務(wù)調(diào)度Trigger之crontrigger
6、分布式任務(wù)調(diào)度job和jobdetail講解
7、分布式任務(wù)調(diào)度Schduler講解
8、分布式任務(wù)調(diào)度quartz源碼解析之建造者模式
9、分布式任務(wù)調(diào)度quartz源碼解析之scheduler源碼解析
10、分布式任務(wù)調(diào)度quartz源碼解析之scheduler源碼分析總結(jié)
11、分布式任務(wù)調(diào)度之觸發(fā)器、調(diào)度器建造者源碼分析?
12、分布式任務(wù)調(diào)度之觸發(fā)器建造者、各類調(diào)度器建造者源碼分析?
13、分布式任務(wù)調(diào)度之job源碼分析?
14、分布式任務(wù)調(diào)度之JobRunShell源碼分析?
15、分布式任務(wù)調(diào)度之spring+quartz整合?
16、分布式任務(wù)調(diào)度之spring+quartz源碼解析之事件驅(qū)動(dòng)模型原理講解?
17、分布式任務(wù)調(diào)度之spring+quartz源碼解析之事件驅(qū)動(dòng)模型代碼講解?
18、分布式任務(wù)調(diào)度之spring+quartz源碼解析之生命周期機(jī)制混合使用講解
19、分布式任務(wù)調(diào)度之spring+quartz源碼解析之生命周期機(jī)制混合使用代碼講解?
20、分布式任務(wù)調(diào)度之Spring+quatz源碼深度剖析?
21、分布式任務(wù)調(diào)度之Spring+quatz源碼解析總結(jié)?
22、分布式任務(wù)調(diào)度之二次開(kāi)發(fā)需求講解?
23、分布式任務(wù)調(diào)度之二次開(kāi)發(fā)代碼編寫1?
24、分布式任務(wù)調(diào)度之二次開(kāi)發(fā)代碼編寫2?
25、分布式任務(wù)調(diào)度之二次開(kāi)發(fā)代碼編寫3?