あるサーバーでアプリケーションをホストし、別のサーバーでジョブをキューに入れることは可能ですか?
考えられる例:
2つの異なるEC2インスタンス。1つはメインサーバーを使用し、もう1つはキューイングサービスを使用します。
Herokuでアプリをホストし、キューイングサービスでEC2インスタンスを使用します
それは可能ですか?
ありがとう
あるサーバーでアプリケーションをホストし、別のサーバーでジョブをキューに入れることは可能ですか?
考えられる例:
2つの異なるEC2インスタンス。1つはメインサーバーを使用し、もう1つはキューイングサービスを使用します。
Herokuでアプリをホストし、キューイングサービスでEC2インスタンスを使用します
それは可能ですか?
ありがとう
はい、間違いなく。私が働いている場所では、delayed_jobをそのように設定しました。
それが機能するためのいくつかの要件があります:
これを行うには、両方(または、2つ以上の場合はすべて)のサーバーに同じアプリケーションを配置し、ジョブを処理するサーバーでワーカーを起動します。どちらのサーバーも引き続きジョブをキューに入れることができますが、実際に処理するのはワーカーが実行されているサーバーのみです。
たとえば、1台interface
のサーバー、1台のサーバー、db
および複数のworker
サーバーがあります。サーバーはinterface
Apache/Passengerを介してアプリケーションにサービスを提供し、Railsアプリケーションをdb
サーバーに接続します。にはworkers
同じアプリケーションがありますが、Apacheは実行されておらず、httpからアプリケーションにアクセスすることはできません。一方、delayed_jobsワーカーが実行されています。一般的なシナリオでは、interface
サーバーはでジョブをキューに入れdb
、worker
サーバーはそれらを処理します。
注意点:アプリケーション内の物理ファイル(添付ファイル、ログファイル、ダウンロードしたXMLなど)に依存している場合は、それらのファイルを保持するためにS3などのソリューションが必要になる可能性があります。これは、個々のサーバーに実際のファイルがない可能性があるためです。この例として、ユーザーが自分のプロフィール写真をWebに面したサーバーにアップロードした場合、ファイルはそのサーバーに保存される可能性があります。その後、プロフィール写真のサイズを変更する別のサーバーがある場合、その画像はワーカーサーバーに存在しません。
別の実行可能なオプションを提供するためだけに、EC2内のクラウドサーバーのエラスティックファームに完全に依存するIronWorkerのような新しいワーカーサービスを使用できます。
このようにして、実行するジョブをキューに入れたりスケジュールしたりできます。ジョブは、インフラストラクチャを気にすることなく、複数のサーバーにまたがる大量のスレッド間で並列化されます。
ただし、データベースについても同じように扱います。外部からアクセスできる必要があります。
完全な開示:私はIWの構築を支援しました。