1 數據量評估
定時任務一般的使用場景是定時查詢出一批數據,對這一批數據進行業務操作。
根據數據量的大小決定是否使用分布式任務,如果數據量不大或者實時性要求不高,單機任務就夠了,也可以減少相應復雜度。
如果數據量大就需要部署分布式任務。分布式集群中的節點對數據進行分片處理,即每個節點拿一部分數據進行業務處理。
2 僅解決並發問題方案
(1) Quartz + 分布式鎖
假設定時任務部署了3台機器,在任務啟動時3台機器競爭分布式鎖,誰競爭到誰就執行,剩下2台不執行。分布式鎖可以使用Redis或者Zookeeper
(2) 開關方案
方案一:配置文件中設置開關是否開啟,執行任務前讀取該開關,開啟則執行。這種方式實現比較簡單,但是如果需要換另外一台機器執行,必須修改配置項並發布項目,維護成本較高
方案二:建一個數據庫配置表,配置表中配置可執行任務的機器標識,每台機器執行前讀取這個配置,看看是否是本機。如果是則執行,否則不執行
方案三:Zookeeper做一個全局配置,配置項內容是可執行任務的機器標識,執行原理同方案一
3 真正分布式任務方案
(1) Quartz官方分布式方案
我認為這種方式比較重,需要根據官方文檔新建數據表,個人並不推薦
(2) Elastic Job
當當網開源的一個分布式調度解決方案,在業界比較通用
(3) 自研分布式任務平台
有一定技術實力的公司,可以選擇自研分布式任務平台