良くも悪くも、LAMP Webアプリケーション全体を専用マシンからクラウド(Amazon EC2マシン)に移行しました。これまでのところ順調ですが、cronの実行方法は最適ではありません。「Amazonの方法」を使用してクラウドでcronジョブを最適に管理する方法について、Amazon固有の質問があります。
問題:複数のウェブサーバーがあり、RSSフィードの作成、メールのトリガーなど、実際にはさまざまなことを行うために、cronジョブを実行する必要があります。ただし、cronジョブはデータベースに頻繁に書き込み、複数のマシンで実行すると結果が重複するため、1つのマシンでのみ実行する必要があります。
これまでのところ、1つのWebサーバーを「マスターWebサーバー」として指定しており、他のWebサーバーにはない「特別な」タスクがいくつかあります。クラウドコンピューティングのトレードオフは信頼性です。「マスターWebサーバー」は単一障害点であるため、必要ありません。これらはすべて同じであり、マスターWebサーバーをクラスターから削除しないことを忘れずにアップスケールおよびダウンスケールできるようにしたいと考えています。
アプリケーションを再設計して、Linux cronジョブを単一障害点のない一時的な作業項目に変換するにはどうすればよいですか?
これまでの私の考え:
- 実行中のcronのみに専用のマシンを用意します。これはもう少し管理しやすくなりますが、それでも単一障害点であり、余分なインスタンスを使用していくらかのお金を浪費します。
- 一部のジョブはLinux cronからMySQLイベントに移動される可能性がありますが、アプリケーションロジックをデータベースレイヤーに配置したくないので、このアイデアの大ファンではありません。
- おそらく、すべてのマシンですべての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から欠落しており、プロセスをウォークスルーするチュートリアルがないようです。基本的に、私はまだアドバイスやヒントを探しています。