3

AWS Elastic Beanstalkで実行されている単純なWebアプリケーション(つまり、ロードバランサーの背後にある1..nの同一インスタンス)を考えると、1つのインスタンスでのみ実行されるスケジュールされたバックグラウンド操作をどのように行うことができますか?

私はWebアプリケーション内にcronのようなスケジューリングメカニズムを持っており、たとえばAWS Simple Queue Serviceを使用してタスクをキューに入れることができます(各タスクが1回だけ実行されるようにします)。しかし、(重複を避けるために)1つのインスタンスのみがタスクを作成するようにするにはどうすればよいですか?

もちろん、タスクの作成を担当する専用のインスタンスを持つこともできますが、通常のインスタンスの1つがその役割を自動的に引き受けることができるより動的なメカニズムを探しています。何か案は?

4

2 に答える 2

3

これはHazelcastを使用して実現できるようです。クラスター内の最も古いノード(APIを介して決定可能)のみがタスクを作成してキューに入れます。

于 2012-01-12T18:41:04.877 に答える
2

QuartzSchedulerは私たちにとって非常にうまく機能します。ノードはBeanstalkで出入りし、Quartzは、スケジューラーが実行する必要があることを示したときにたまたま稼働しているノードでジョブを実行することができます。cronスタイルのスケジューリングと他のいくつかの形式をサポートします。フォールトトレラントであり、タスクを実行する必要があるときにインスタンスが使用できなかったため、またはノードが実行を完了できなかった場合に、失敗したジョブを実行できます。

Quartzが永続ストアとして使用できるRDSまたはその他のリレーショナルDBを使用していることを前提としています。

于 2012-05-03T15:31:21.477 に答える