分布式多應用實現單一定時任務

2022-01-22 06:20:42 字數 495 閱讀 1035

目標:應用可以部署在多台伺服器上,但是定時任務只能由其中一台機器觸發。

方案:1. 應用部署前修改**或者修改配置,確定某台伺服器的某個應用可以啟用定時任務功能,其它禁用此功能。

優點:效能好

缺點:部署麻煩易出錯、應用一旦崩潰任務即停止。

2.使用分布式鎖,確保同一時刻,不會出現重複操作,然後記錄任務是否執行過,執行過的不執行。

優點:多應用分布式部署,只要有乙個應用可用即可用

3.使用資料庫樂觀鎖,程式中儲存最新執行版本號$ver,資料庫記錄任務日誌task_log:任務id、最新執行時間、執行版本號等,update task_log set time=now(),version=version+1 where version=$ver 成功,方可執行任務,然後儲存最新版本號。update失敗的獲取最新版本號也儲存下來。下次多應用併發或不併發均可僅執行一次任務。

優點:分布式部署高可用,使用資料庫樂觀鎖效能好,解決了方案2的弊端。

缺點:暫時沒發現

分布式定時任務

在做springboot專案的時候,需要定時做對賬任務。但因為專案是集群部署,就存在多個pod例項的定時任務同時執行,存在重複性。怎麼保證集群中不重複地完成定時任務?下面給出本人總結的方案。對賬任務表 merchant idname is done 是否對賬,0沒有對賬 1商家102 商家20 3商...

分布式定時任務元件對比

描述xxl job elastic job lite saturn 主要作者 大眾點評徐雪裡 當當網張亮 唯品會開源,基於elastic job 特殊環境 mysql5.7 zookeeper 同elastic job 特殊功能 策略豐富,支援分片 子任務 支援分片,分片策略比xxl job豐富,支...

redis解決分布式定時任務問題

場景分析 多伺服器針對於定時任務帶來的問題,保證任務只在乙個伺服器上在執行。解決方案1 redis bean public defaultredisscript redisscript scheduled cron 40 public void testscheduled else catch in...