Как Heroku определяет количество веб-процессов, запускаемых на динамометрическом стенде?

Я использую Heroku для размещения приложения django и использую официантку в качестве своего веб-сервера. Я запускаю 2 (x2) динамометра и вижу на вкладке экземпляра New Relic, что у меня запущено 10 экземпляров.

Мне было интересно, как Heroku определяет количество процессов веб-сервера для запуска на одном Dyno при использовании официантки?

Я знаю, что при использовании Gunicorn есть способ установить количество процессов на динамометр, но не видел способа определить его в официантке.

Спасибо!


person OmriToptix    schedule 09.11.2014    source источник


Ответы (2)


В официантке есть главный процесс и (по умолчанию) 4 рабочих потока или процесса. Вы можете изменить это, если хотите. Вот документы для этих опций для waitress-serve

http://waitress.readthedocs.org/en/latest/runner.html#runner

--threads=INT

Количество потоков, используемых для обработки логики приложения, по умолчанию — 4.

Таким образом, если у вас есть 2 динамометра и 5 (4 + 1) потоков на каждом, то общее количество экземпляров этого приложения на панели управления RPM составит 10.

В динамометры можно добавить больше процессов, так как максимальное количество поддерживаемых динамометров Heroku 2x намного выше:

2X dynos поддерживают не более 512

https://devcenter.heroku.com/articles/dynos#process-thread-limits

Но вы можете проверить некоторые обсуждения по настройке этого против Gunicorn:

Waitress отличается тем, что у него есть главный асинхронный процесс, который буферизует все тело клиента, прежде чем передать его рабочему процессу синхронизации. Таким образом, сервер устойчив к медленным клиентам, но также гарантирует одновременную обработку максимум 4 запросов (по умолчанию). Это спасает базу данных от перегрузки и делает масштабирование сервисов гораздо более предсказуемым.

Поскольку у официантки нет внешних зависимостей, она также уменьшает размер слага героку.

https://discussion.heroku.com/t/waitress-vs-gunicorn-for-docs/33

person Brian    schedule 10.11.2014
comment
Привет, @Brian, спасибо за ответ. Мой procfile содержит следующую строку: 'bin/start-pgbouncer-stunnel newrelic-admin run-program waitress-serve --port=$PORT --threads=10 ltg_backend_app.wsgi:application' Следовательно, если то, что вы предлагаете, верно , то у меня должно быть 22 экземпляра - это не так. Также, насколько я понимаю (и я могу ошибаться), экземпляры в новых процессах подсчета реликвий (не потоков), которые запускают логику приложения, - и поэтому есть 10 основных процессов, и на каждом есть пул из 10 потоков. Будем признательны за ваш ответ. Спасибо. - person OmriToptix; 12.11.2014

Поэтому после разговора со службой поддержки New Relic они прояснили этот вопрос. По-видимому, на вкладке экземпляров учитываются только процессы (потоки не учитываются).

в моем Procfile я также отслеживаю рабочие процессы RabbitMQ, которые добавляют экземпляры на вкладку экземпляра и, следовательно, несоответствие. Чтобы процитировать их ответ:

Я уточнил у наших разработчиков, как именно мы измеряем экземпляры для вкладки «Экземпляры». Агент Python рассматривает каждый отслеживаемый процесс как один экземпляр. Потоки не считаются дополнительными экземплярами. Я заметил, что вы отслеживаете не только свое приложение django/waitress, но и некоторые фоновые задачи. Похоже, что фоновые задачи плюс процессы django в сумме составляют 10 отслеживаемых процессов.

person OmriToptix    schedule 03.12.2014