Webアプリケーションのワーカープロセスを別のコンテナーに配置する必要がありますか?


8

私のセットアップは、PostgreSQLとRedisデータベースを持つFlaskアプリに基づいています。さらに、ワーカープロセスは、電子メールの送信などの非同期タスクを処理するために開始されます。私はGunicornを使用して複数のアプリプロセスを作成しています。アプリプロセスからワーカープロセスへのジョブの受け渡しは、Redisを介して行われます。

問題は、同じコードに基づいているにもかかわらず、ワーカープロセスを別のコンテナーで開始する必要があるかどうかです。現在、私は関連するビットで開始スクリプトを使用しています:

gunicorn --bind=0.0.0.0:8000 --workers=3 manage:app &
python -u manage.py run_worker

また、それらを分離する必要がある場合、どのようにして、共通のファイルシステムコンテナーを確実に再利用することができますか?さらに、メインアプリまたはワーカープロセスでGunicornをスケーリングする場合、コンテナーの追加インスタンスを作成するか、コンテナー内のプロセス数を増やす必要がありますか?

関連:異なるコンテナーでnginxとphpをドッキングする利点は何ですか?

回答:


6

別のコンテナーでワーカーを実行するオーバーヘッドが正当化されるケースは1つだけ考えられます。クラスター化されたデプロイメントにdocker swarmを使用している場合です。このようにして、すべてのHAのメリットを得ることができます。

それ以外の場合、特にそれらが厳密に同じコードベースを使用する必要がある場合は、そのようなタスクを複雑にする理由はわかりません(そのため、いわば、懸念の1つのドメインを共有していると私は信じています)。エレガントに見えるかもしれませんが、十分なメリットがありません。

そのような種類の分割は、相互接続を管理し、ローカル開発のセットアップを複雑にすることになります


私はすでにdocker-composeを使用しているので、私の場合は複雑さをうまく処理できると思います。それでも、現時点では負荷を単一のインスタンスで処理でき、必要以上に複雑にする必要がないため、ポイントは有効です
Moritz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.