spring scheduled-task集羣問題

背景

我經常使用spring自帶的輕量級的定時任務實現,即@Scheduled註解

但是在分佈式環境下,這種定時任務是不支持集羣配置的

我現在面對的場景如下:

1.雙機部署

2.系統在啓動時,需要進行一系列的數據初始化,但是這種初始化是需要持久化到集中式緩存中,或者數據庫中,或者保存到相應的隊列中,等待處理


問題: 怎麼能保證雙機情況下(或者是集羣情況下),相應的任務只會執行一次。


想到的方案

1.全局鎖機制

   對於只需要執行一次初始化的操作,在全局緩存中設置一個全局鎖,拿到這個鎖的節點執行相應的任務。

2.數據庫層面的狀態標記

  對於有些定時任務,我們只希望執行一次,也就是說多個節點,只有一個節點在執行這個定時任務

  可以在數據庫對這個任務進行狀態標記,根據狀態來調節節點間定時任務的執行

3.代碼分離

  如果有可能,將定時任務獨立出來,成爲一個單獨的項目工程,部署單節點,避免集羣部署


暫時只能有這麼幾種膚淺的看法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章