良くも悪くも、LAMP Web アプリケーション全体を専用マシンからクラウド (Amazon EC2 マシン) に移行しました。これまでのところ順調に進んでいますが、cronの実行方法は最適ではありません。「Amazon 方式」を使用してクラウドで cron ジョブを最適に管理する方法について、Amazon 固有の質問があります。
問題: 複数の Web サーバーがあり、RSS フィードの作成、電子メールのトリガー、実際にはさまざまなことなど、バッチ ジョブのために cron を実行する必要があります。ただし、cron ジョブはデータベースに書き込むことが多いため、1 台のマシンでのみ実行する必要があり、複数のマシンで実行すると結果が複製されます。
これまでのところ、Web サーバーの 1 つを「マスター Web サーバー」として指定しました。これには、他の Web サーバーにはない「特別な」タスクがいくつかあります。クラウド コンピューティングのトレードオフは信頼性です。単一障害点になるため、「マスター Web サーバー」は必要ありません。マスター Web サーバーをクラスターから外さないことを忘れずに、それらをすべて同一にして、アップスケールおよびダウンスケールできるようにしたいと考えています。
アプリケーションを再設計して、Linux cron ジョブを単一障害点のない一時的な作業項目に変換するにはどうすればよいでしょうか?
これまでの私の考え:
- cron の実行専用のマシンを用意します。これはもう少し管理しやすくなりますが、それでも単一障害点であり、余分なインスタンスを持つことでいくらかのお金を無駄にします.
- 一部のジョブは、Linux cron からMySQL Eventsに移動できる可能性がありますが、アプリケーション ロジックをデータベース レイヤーに配置したくないので、私はこのアイデアの大ファンではありません。
- おそらく、すべてのマシンですべてのcronを実行できますが、cronスクリプトを変更して、ロックメカニズムを実装する少しのロジックですべて開始し、1つのサーバーのみが実際にアクションを実行し、他のサーバーはスキップするようにします. 私はこのアイデアのファンではありません。バグが発生する可能性があるためです。また、独自のものを作成するよりも、Amazon のベスト プラクティスを使用することを好みます。
- ジョブがどこかでスケジュールされ、キューに追加され、Web サーバーがそれぞれワーカーになり、「ねえ、これを取ります」と言うことができる状況を想像しています。Amazon Simple Workflow Serviceはまさにこの種のことのように聞こえますが、私は現在それについてあまり知りません。cron のような単純なものには、ちょっと重いように見えますか? それは適切なサービスですか、それともより適切な Amazon サービスはありますか?
更新:質問をして以来、 YouTube でAmazon Simple Workflow Serviceウェビナーを見て、34:40 に気づいた ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s )サンプル アプリケーションとして cron ジョブに言及しているスライド。ドキュメント ページ「Amazon SWF の AWS Flow Framework サンプル」で、Amazon は cron のサンプル コードがあると述べています。
... > Cron ジョブこのサンプルでは、実行時間の長いワークフローが定期的にアクティビティを実行します。実行を非常に長期間にわたって実行できるように、実行を新しい実行として継続する機能が実証されています。...
AWS SDK for Java ( http://aws.amazon.com/sdkforjava/ ) をダウンロードしましたが、いくつかの Java コード ( ) がフォルダーのばかげた層に埋もれていることを確認しました ( aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow
)。
問題は、正直なところ、私のスキルセットで簡単に消化できるものではないため、これはあまり役に立たないことです. 同じサンプルが PHP SDK になく、プロセスを説明するチュートリアルもないようです。基本的に、私はまだアドバイスやヒントを探しています。