14

私のProcfileで次のプロセスが宣言されているとしましょう

web: newrelic-admin run-program python manage.py run_gunicorn -b 0.0.0.0:$PORT -w 9 -k gevent --max-requests 250 --preload --timeout 240
scheduler: python manage.py celery worker -B -E --maxtasksperchild=1000
worker: python manage.py celery worker -E --maxtasksperchild=1000
celerymon: python manage.py celerymon -B 0.0.0.0 -P $PORT

基本的に、プライマリ Web プロセスのいくつかの dyno を実行する必要があります。スケジューラを実行します。いくつかのワーカーを実行します。セロリを監視します。ホストされた AMQP ブローカーを別途使用します。

単一の dyno で複数のプロセスを実行するという代替手段を試しましたが、確実に動作するようには見えず、とにかく本番環境で使用したいものではありません。

これらすべてを実行するコストは、特に 1 つの dyno でいくつかのプロセスをまとめることができると考えると、少し法外であることがわかります。スケジューラと監視を組み合わせたり、スケジューラとワーカーを一緒に実行したりすることもできます。

これに加えて、Heroku では 80 および 443 ポートのみが公開されており、同じ dyno の複数のポートでサービスを実行する方法がないという事実があります。

プロセスと dyno の使用を最適化するには、どのような戦略がよいでしょうか?

あるいは、celerycam を実行すると別の dyno がコストに追加される場合、heroku でセロリ タスクを監視するにはどうすればよいでしょうか?

4

1 に答える 1

2

dyno の数を増やすことなく、 eventletを使用してワーカー プールをスケーリングすることを検討できます。

残念ながら、イベントレット ベースのワーカーはスケジューリング/ビート (-B スイッチ) をサポートしていません。したがって、スケジューラには追加のプロセスが必要です。

監視に関しては、ローカル マシンまたは別のサーバーからアドホック ベースで監視を実行することをお勧めします。

于 2014-01-12T23:38:16.957 に答える