私の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 でセロリ タスクを監視するにはどうすればよいでしょうか?