1. 程式人生 > >分散式多應用實現單一定時任務

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

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

方案:

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

優點:效能好

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

 

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

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

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

 

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

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

缺點:暫時沒發現