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


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

方案:

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

優點:性能好

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

 

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

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

缺點:某些場景不適用(是否執行過很難判斷,比如每隔一分鍾執行一次的任務,因為不同服務器和數據庫服務器的時間很難確保一致,每隔1天的任務,就推薦這樣子做)

 

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

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

缺點:暫時沒發現

 


免責聲明!

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



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