定時任務調度:在某個時間點觸發執行操做(CURD)。git
分佈式任務調度平臺的使用場景:數據同步、交易信息(對帳)、清除過時用戶信息、按期發送報表、消息推送。github
傳統的定時任務特徵:單點系統(job沒有集羣)數據庫
思考:若是job在高併發的狀況下,致使job服務器宕機以後,這時候應該如何處理?服務器
1.定時任務和業務服務放在用一個jvm中(小項目)併發
2.大型互聯網公司定時任務代碼執行與業務執行代碼服務器都是分開的,都是獨立的jvm。負載均衡
3.定時任務服務器是否須要考慮高併發狀況?須要,由於同一時間點可能執行多個任務。間隔執行場景不須要,同時執行須要考慮高併發狀況。運維
4.若是在高併發狀況下,定時job宕機後,該如何處理(只有一臺服務器的狀況下) ?使用心跳檢測監控自動重啓、補償機制,每一個任務作一個標記。jvm
定時任務在執行代碼的時候忽然報錯了,該如何處理?日誌記錄錯誤,跳過當前錯的任務,接着執行下一個任務。在使用定時job掃描錯誤日誌記錄,進行補償信息。分佈式
分佈式定時任務特徵:job使用集羣。高併發
產生問題:定時任務打成3個war包放在三個不一樣服務器上(8080、808一、8082)。定時任務在每一個war包中都是相同的,三臺服務器啓動以後,定時job會被重複執行3遍。
1.使用zookeeper實現分佈式鎖方式,不推薦效率低。
2.在配置文件中加上打開定時job的開關8080 設置flag=true、8081 設置flag=false、8082設置 flag=false,這種方法不屬於分佈式了 屬於單點的系統,不推薦。
3.啓動的時候使用數據庫的惟一標示,不推薦效率低。
4.使用分佈式任務調度平臺xxl-job、Elastric-job(依賴於zk)、TBSchedule。
xxl-job
1.支持集羣(保證冪等性問題)、job負載均衡輪詢機制。
2.支持job補償,若是job執行失敗的話,會自動實現重試機制,若是重啓屢次仍是失敗的話,會發送郵件給運維人員。
3.支持job日誌記錄。
4.動態配置定時規則,傳統的定時job規則都是寫死的。
.......
其餘優勢在文檔中能夠查看
xxl-job github地址:
https://github.com/xuxueli/xxl-job
xxl-job 文檔:
執行器:定時job實際執行的服務器地址。
任務管理:配置定時任務的規則、路由策略、運行模式、報警郵箱。
xxl-job-Admin:單獨的Web服務,是job的管理平臺。
步驟:
1.在xxl-job admin平臺建立執行器(job實際的執行地址)。
2.在xxl-job admin 平臺新建任務,填寫對應的執行器。
3.在job服務器代碼中,使用JobHandler標示該類爲job執行方法。
4.若是有任務須要執行的時候,先在xxl-job admin執行一次,獲取任務中的執行器(實際job地址)。
執行器項目啓動的時候,會將服務器本地信息註冊到xxl-job平臺,只要類上添加@JobHandler(value="name")註解 就會註冊到xxl-job平臺上。