1

私はdotcloudを初めて使用し、複数のサービスがどのように連携するかについて混乱しています。

私のyamlビルドファイルは次のとおりです。

www:
  type: python
db:
  type: postgresql
worker:
  type: python-worker
broker:
  type: rabbitmq

そして、私の監視対象ファイルには、django celery&celerycamを起動するためのコマンドが含まれています。

コードをアプリにプッシュすると、wwwサービスとworkerサービスの両方が独自のセロリとセロリカムのインスタンスを起動し、たとえばログファイルが異なることがわかります。これは理にかなっています(IMOのdotcloudドキュメントではあまり明確にされていませんが、ドキュメントではワーカーサービスの設定について説明していますが、他のサービスと組み合わせる方法については説明していません)が、アプリケーションの構成方法については疑問が生じます。ここで、Pythonサービスは主にWebページを提供し、Pythonワーカーサービスはバックグラウンドタスク(例:セロリ)で機能します。

dotcloudドキュメントデーモンはこれについて言及しています:

「ただし、アプリケーションをスケーリングする場合、cronタスクはすべてのスケーリングされたインスタンスでスケジュールされることに注意する必要があります。これはおそらく必要なものではありません。したがって、多くの場合、別のサービスを使用することをお勧めします。

同様に、多くの(非ワーカー)サービスはすでにSupervisorを実行しているため、これらのサービスで追加のバックグラウンドジョブを実行できます。繰り返しになりますが、アプリケーションをスケーリングする場合、これらのバックグラウンドジョブは複数のインスタンスで実行されることに注意してください。さらに、Webサービスにバックグラウンドジョブを追加すると、ページを提供するためのリソースが少なくなり、パフォーマンスが大幅に低下します。」

1つのサービスでWebサーバーのみを実行し、ワーカーサービスでバックグラウンドタスクを実行するように、dotcloudとアプリケーションをどのように構成しますか?セロリの同時実行設定を増やす(そして1つのサービスを垂直にスケーリングする)か、ワーカーサービスを追加するか、またはその両方を行うことで、ワーカーをスケーリングしますか?

これを行うと、最初にWebサーバーサービスがバックグラウンドタスクの処理にリソースを使用する必要がなくなり、次にWebサーバーサービスとは独立してワーカーサービスをスケーリングできるようになりますか?

4

1 に答える 1

2

2つのトリックがあります。まず、wwwサービスとworkerサービスに異なるapprootsを使用して、実行するコードを分離することができます。

www:
  type: python
  approot: frontend
# ...
worker:
  type: python-worker
  approot: backend
# ...

次に、インストール後のスクリプトはapprootごとに異なるため、ファイルをコピーして、その特定のサービスの正しいsupervisord.confにすることができます。

dotCloudチュートリアルとdjango-celeryのサンプルコードもご覧ください。

/アンディ

于 2012-08-13T22:40:16.867 に答える