2012-01-11 21 views
3

鑑於在AWS Elastic Beanstalk上運行的簡單Web應用程序(即負載平衡器後面的1..n個相同實例),我如何才能在一個實例上運行計劃後臺操作?在同一對等羣集內調度任務

我在web應用程序中有類似cron的調度機制,可以使用例如AWS Simple Queue Service排隊任務(並確保每個任務只執行一次)。但是,如何確保只有一個實例創建任務(以避免重複)?

顯然,我可以有一個負責創建任務的專用實例,但我正在尋找一種更動態的機制,讓其中一個常規實例能夠自動執行該角色。有任何想法嗎?

回答

3

看起來像這樣可以使用Hazelcast完成:只有集羣中最早的節點(可以通過API確定)創建並排隊任務。

2

Quartz Scheduler適合我們。節點在我們的beanstalk中來來去去,Quartz設法在調度程序指示它需要運行時正好在一個節點上運行作業。支持cron風格的調度以及其他一些格式。它具有容錯能力,並且可以運行由於任務執行時沒有可用實例或節點未能完成執行而錯過的作業。

假設您正在使用RDS或Quartz可以用作持久存儲的其他關係數據庫。

+0

那麼是否有一個Quartz插件,它可以檢測EC2安全組中的運行實例並協調作業執行?或者你如何防止重複的工作執行? – ejain 2012-05-03 16:57:01

+0

不需要插件,只需配置即可。例如,將EC2安全組中的所有節點指向同一個數據庫以存儲其Quartz作業數據將自動使其協調一致。每個節點上的Quartz代理檢查數據庫中集中的作業詳細信息。 – Jason 2012-05-07 16:46:40

+0

謝謝,發現這個:http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-09。看起來你需要一個關係數據庫或兵馬俑。 – ejain 2012-05-07 18:53:59