Heroku: веб-дино и рабочий дино? Сколько/сколько мне нужно?

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

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

http://www.heroku.com/pricing

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

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

Ответ 1

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

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

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

ps Задержка слишком глубока - это веб-процесс Dyno, который может вызвать его.

ОБНОВЛЕНИЕ: 26 марта 2013 года Хероку удалил очередь и подождал поля из лог-выхода.

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

fooobar.com/questions/70618/... - Heroku отправился на случайную маршрутизацию, поэтому у некоторых динамиков могут быть очереди очередей (пока они обслуживают длинный запрос), в то время как другие динозаторы являются бесплатными. Избегайте этого, убедившись, что все запросы обрабатываются очень быстро в ваших веб-играх. Это уменьшит количество требуемых веб-динамиков, требуя больше рабочих динамиков.

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

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

Ответ 5

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

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

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