Heroku: веб-Дино против рабочего Дино? Сколько / какое соотношение мне нужно?


Мне было интересно, в чем разница между веб и стенда работник на Heroku. Они дают одно предложение объяснение на их странице ценообразования, но это просто оставило меня в замешательстве. Как я узнаю, сколько выбрать из каждого? Есть ли соотношение, к которому я должен стремиться? Я довольно новичок в этом материале, так что может кто-то дать подробное объяснение, или, может быть, каким-то образом я могу рассчитать, сколько и какие Динамо мне понадобятся?

кроме того, я смущен тем, что они подразумевают под количеством часов для каждого Дино.

http://www.heroku.com/pricing

Я тоже наткнулся на эту статью. В качестве одного из предложенных ими решений они предложили увеличить количество Динов. Какой тип Дино они имеют в виду здесь?

http://devcenter.heroku.com/articles/backlog-too-deep

5 79

5 ответов:

ваш лучший признак, если вам нужно больше dynos (он же процессы на Cedar) является ваш heroku журналы. Убедитесь, что вы переходите на расширенное ведение журнала (это бесплатно), чтобы вы могли следить за своим журналом.

вы ищете heroku.записи маршрутизатора и значение, которое вас больше всего интересует, - это значение очереди-если это постоянно больше 0, то это хороший знак, что вам нужно добавить больше dynos. По сути, это означает, что больше запросов поступает, чем ваш процесс может обрабатывать, поэтому они стою в очереди. Если они стоят в очереди слишком долго, не возвращая никаких данных, они будут тайм-аут.

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

PS отставание слишком глубоко было бы веб-процессом Dyno, который вызвал бы его.

обновление: 26 марта 2013 года В Heroku убрали очереди и подождать полей из журнала вне.

поля очереди и ожидания были удалены из сообщений журнала маршрутизатора. Кроме того, маршрутизатор Heroku больше не устанавливает X-Heroku-Dynos-in-Use, Х-в Heroku-очереди-глубина и Х-в Heroku-очередь-ожидание-время HTTP заголовки входящий запрос.

Dynos-это в основном процессы, которые выполняются на вашем экземпляре. С новым стеком Cedar они могут быть настроены для выполнения любой произвольной команды оболочки. Для веб-приложений, как правило, есть один процесс под названием "web", который отвечает за ответ на HTTP-запросы от пользователей. Все остальные процессы - это то, что раньше называлось "рабочими"."Они постоянно работают в фоновом режиме для таких вещей, как cron, очереди обработки и любые тяжелые вычисления, которые вы не хотите связывать с вашей сетью процессы. Вы также можете масштабировать каждый тип процесса, чтобы несколько процессов каждого типа были загружены для дополнительного параллелизма. Количество каждого, что вы используете действительно зависит от потребностей вашего приложения и нагрузки, которую она получает. Вы можете использовать такие инструменты, как плагин New Relic для мониторинга этих вещей. Взгляните на статьи о модели процесса и Procfile в центре разработки Heroku для получения более подробной информации.

многие люди упомянули, что нет никакого известного соотношения и что соотношение веб - работников к "фоновым" работникам, которые вы хотите, зависит от того, как вы разработали свое приложение-это правильно. Однако я подумал, что было бы полезно добавить, что в качестве общего эмпирического правила вы хотите, чтобы ваши веб - работники - и, следовательно, действия контроллера, которые они обслуживают, - были молниеносные и очень легкий, чтобы уменьшить задержку отклика от действий браузера. Если есть это какое-то действие браузера, которое потребует больше, чем, скажем, около половины секунды реального времени, чтобы служить, тогда вы, вероятно, захотите создать какую-то систему, которая толкает большую часть этого действия в очередь.

затем вы создадите автономный рабочий Дино(Ы), который будет обслуживать эту очередь. Они могут занять гораздо больше времени, потому что нет HTTP-ответов, ожидающих их вывода. Возможно, страница, которую вы отрисовали из первоначального запроса браузера, который подтолкнул действие, будет служить некоторым Javascript, который запускает поток, который проверяет, завершен ли запрос каждые 5 секунд, или что-то в этом роде.

Я все еще не могу дать вам соотношение для работы по той же причине, что и другие, но, надеюсь, это поможет вам решить, как создать свое приложение. (Я должен также упомянуть, что это всего лишь один дизайн из многих действительных.)

https://stackoverflow.com/a/19965981/1233555 - Heroku перешел на случайную маршрутизацию, поэтому некоторые dynos могут иметь очереди, складывающиеся (в то время как они обслуживают длительный запрос), в то время как другие dynos свободны. Избегайте этого, убедившись, что все запросы обрабатываются очень быстро в вашем веб-dynos. Это позволит уменьшить количество веб-диносов, которые вам нужны, требуя при этом больше рабочих Дино.

Вам также нужно заботиться о своем веб-приложении, поддерживающем параллелизм, который только некоторые рельсы configs do-попробуйте Unicorn или тщательно написанный код (для ввода/вывода, который не блокирует EventMachine) с помощью Thin.

вы, вероятно, должны попробовать, а не рассчитать, чтобы увидеть, сколько Дино каждого вида вам нужно. Убедитесь, что их новая реликвия сообщает о очереди dyno - см. ссылку выше.

короткий ответ заключается в том, что вам нужно столько, сколько вам нужно, чтобы сохранить ваши очереди вниз.

Как описывает Джон, Если вы начинаете видеть очередь в своих журналах, то вам нужно больше dynos. Если вы начинаете видеть, что ваши фоновые очереди становятся слишком длинными (как вы получаете эту информацию, зависит от того, что вы реализовали), вам нужно больше работников.

там нет никакого отношения, как это очень зависит от вашего дизайна приложения и использования.