現在、毎日メールを送信するcronjobタブを備えた単一のサーバーがあります。そのサーバーを拡張したいと思います。このアプリケーションは、Amazonクラウドのcentosサーバーにデプロイされた標準のzendフレームワークアプリケーションです。
負荷分散、コンテンツ管理、および展開の管理はすでに行っています。ただし、一部のジョブは1回だけ実行されることを許可する必要があるため、cronジョブは依然として問題です。
たとえば、毎日の電子メールcronjobは、単一のサーバーで1回だけ実行する必要があります。1台のサーバーだけが1回だけ実行することを許可するための最良の方法を探しています。
私は2つの解決策を考えていますが、他の誰かが同じ問題を抱えているのではないかと思っていました。
- サーバーの1つを「マスター」にして、毎日の電子メールのみを送信します。サーバーが誤動作している場合、これは問題になります。通常、「特別な」サーバーは必要ありません。また、どのサーバーがマスターであるかを追跡する必要があることも意味します。
- 実行するスケジュールタスクのキューを用意します。各サーバーはそのキューを開き、実行する必要のあるタスクを確認します。タスクを「取得」した最初のサーバーは、タスクを実行し、完了としてマークします。私はキューの解決策としてアマゾンのシンプルなキューイングサービスを見ていました。
これらの解決策には両方とも長所と短所があり、誰かがここで私たちを助けるかもしれない他の誰かについて考えたかどうか疑問に思いました。