背景
我經常使用spring自帶的輕量級的定時任務實現,即@Scheduled註解
但是在分佈式環境下,這種定時任務是不支持集羣配置的
我現在面對的場景如下:
1.雙機部署
2.系統在啓動時,需要進行一系列的數據初始化,但是這種初始化是需要持久化到集中式緩存中,或者數據庫中,或者保存到相應的隊列中,等待處理
問題: 怎麼能保證雙機情況下(或者是集羣情況下),相應的任務只會執行一次。
想到的方案
1.全局鎖機制
對於只需要執行一次初始化的操作,在全局緩存中設置一個全局鎖,拿到這個鎖的節點執行相應的任務。
2.數據庫層面的狀態標記
對於有些定時任務,我們只希望執行一次,也就是說多個節點,只有一個節點在執行這個定時任務
可以在數據庫對這個任務進行狀態標記,根據狀態來調節節點間定時任務的執行
3.代碼分離
如果有可能,將定時任務獨立出來,成爲一個單獨的項目工程,部署單節點,避免集羣部署
暫時只能有這麼幾種膚淺的看法