4

あるサーバーでアプリケーションをホストし、別のサーバーでジョブをキューに入れることは可能ですか?

考えられる例:

  1. 2つの異なるEC2インスタンス。1つはメインサーバーを使用し、もう1つはキューイングサービスを使用します。

  2. Herokuでアプリをホストし、キューイングサービスでEC2インスタンスを使用します

それは可能ですか?

ありがとう

4

2 に答える 2

14

はい、間違いなく。私が働いている場所では、delayed_jobをそのように設定しました。

それが機能するためのいくつかの要件があります:

  1. サーバーは同期されたクロックを持っている必要があります。サーバーのタイムゾーンがすべて同じに設定されている限り、これは通常問題にはなりません。
  2. サーバーはすべて同じデータベースにアクセスする必要があります。

これを行うには、両方(または、2つ以上の場合はすべて)のサーバーに同じアプリケーションを配置し、ジョブを処理するサーバーでワーカーを起動します。どちらのサーバーも引き続きジョブをキューに入れることができますが、実際に処理するのはワーカーが実行されているサーバーのみです。

たとえば、1台interfaceのサーバー、1台のサーバー、dbおよび複数のworkerサーバーがあります。サーバーはinterfaceApache/Passengerを介してアプリケーションにサービスを提供し、Railsアプリケーションをdbサーバーに接続します。にはworkers同じアプリケーションがありますが、Apacheは実行されておらず、httpからアプリケーションにアクセスすることはできません。一方、delayed_jobsワーカーが実行されています。一般的なシナリオでは、interfaceサーバーはでジョブをキューに入れdbworkerサーバーはそれらを処理します。

注意点:アプリケーション内の物理ファイル(添付ファイル、ログファイル、ダウンロードしたXMLなど)に依存している場合は、それらのファイルを保持するためにS3などのソリューションが必要になる可能性があります。これは、個々のサーバーに実際のファイルがない可能性があるためです。この例として、ユーザーが自分のプロフィール写真をWebに面したサーバーにアップロードした場合、ファイルはそのサーバーに保存される可能性があります。その後、プロフィール写真のサイズを変更する別のサーバーがある場合、その画像はワーカーサーバーに存在しません。

于 2011-01-07T01:57:50.060 に答える
5

別の実行可能なオプションを提供するためだけに、EC2内のクラウドサーバーのエラスティックファームに完全に依存するIronWorkerのような新しいワーカーサービスを使用できます。

このようにして、実行するジョブをキューに入れたりスケジュールしたりできます。ジョブは、インフラストラクチャを気にすることなく、複数のサーバーにまたがる大量のスレッド間で並列化されます。

ただし、データベースについても同じように扱います。外部からアクセスできる必要があります。

完全な開示:私はIWの構築を支援しました。

于 2011-02-07T09:25:33.807 に答える