Quartz定時任務集群,怎么解決任務重復執行問題


1 數據量評估

定時任務一般的使用場景是定時查詢出一批數據,對這一批數據進行業務操作。

根據數據量的大小決定是否使用分布式任務,如果數據量不大或者實時性要求不高,單機任務就夠了,也可以減少相應復雜度。

如果數據量大就需要部署分布式任務。分布式集群中的節點對數據進行分片處理,即每個節點拿一部分數據進行業務處理。
2 僅解決並發問題方案

(1) Quartz + 分布式鎖

假設定時任務部署了3台機器,在任務啟動時3台機器競爭分布式鎖,誰競爭到誰就執行,剩下2台不執行。分布式鎖可以使用Redis或者Zookeeper

(2) 開關方案

方案一:配置文件中設置開關是否開啟,執行任務前讀取該開關,開啟則執行。這種方式實現比較簡單,但是如果需要換另外一台機器執行,必須修改配置項並發布項目,維護成本較高

方案二:建一個數據庫配置表,配置表中配置可執行任務的機器標識,每台機器執行前讀取這個配置,看看是否是本機。如果是則執行,否則不執行

方案三:Zookeeper做一個全局配置,配置項內容是可執行任務的機器標識,執行原理同方案一
3 真正分布式任務方案

(1) Quartz官方分布式方案

我認為這種方式比較重,需要根據官方文檔新建數據表,個人並不推薦

(2) Elastic Job

當當網開源的一個分布式調度解決方案,在業界比較通用

(3) 自研分布式任務平台

有一定技術實力的公司,可以選擇自研分布式任務平台


免責聲明!

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



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