定時任務調度:在某個時間點觸發執行操作(CURD)。
分布式任務調度平台的使用場景:數據同步、交易信息(對賬)、清除過期用戶信息、定期發送報表、消息推送。
傳統的定時任務與分布式定時任務的區別?
傳統的定時任務特征:單點系統(job沒有集群)
思考:如果job在高並發的情況下,導致job服務器宕機之后,這時候應該如何處理?
1.定時任務和業務服務放在用一個jvm中(小項目)
2.大型互聯網公司定時任務代碼執行與業務執行代碼服務器都是分開的,都是獨立的jvm。
3.定時任務服務器是否需要考慮高並發情況?需要,因為同一時間點可能執行多個任務。間隔執行場景不需要,同時執行需要考慮高並發情況。
4.如果在高並發情況下,定時job宕機后,該如何處理(只有一台服務器的情況下) ?使用心跳檢測監控自動重啟、補償機制,每個任務做一個標記。
定時任務在執行代碼的時候突然報錯了,該如何處理?日志記錄錯誤,跳過當前錯的任務,接着執行下一個任務。在使用定時job掃描錯誤日志記錄,進行補償信息。
分布式定時任務特征:job使用集群。
產生問題:定時任務打成3個war包放在三個不同服務器上(8080、8081、8082)。定時任務在每個war包中都是相同的,三台服務器啟動之后,定時job會被重復執行3遍。
分布式領域中服務器集群的情況下,如何保證job的冪等性?
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 文檔:
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平台上。