2016-08-02 4 views
2

Я работаю над проектом, который запускает процесс через Rails-работника, который очень ресурсоемкий, и его можно обрабатывать только должным образом Работодателем по работе на Heroku, 1X рабочих убиты, потому что они используют слишком много оперативной памяти, а рабочие 2X могут с трудом обрабатывать нагрузку, превышающую пределы оперативной памяти, до 160%. Работник-исполнитель отлично справляется с работой без проблем.Масштабирование рабочего размера Dyno динамически на приложении Heroku Rails

Мой вопрос в том, есть ли способ динамически переключать размер Dyno в Performance перед тем, как задание инициируется, а затем масштабировать его назад после завершения задания или очереди пуст?

Я знаю, что HireFire существует, но, насколько мне известно, эта услуга увеличивает количество работников на основе длины очереди и т. Д.? Еще одно возможное решение, о котором я думал, - это использовать API Heroku, у которого есть конечная точка Dyno для изменения размера рабочего динамика до начала задания, а затем изменить его размер после завершения задания.

Есть ли у кого-нибудь другие рекомендации, идеи или стратегии для этой проблемы?

Спасибо!

ответ

1

Лучший способ - это то, о чем вы упоминали: используйте Heroku Platform API, чтобы увеличить размер Dyno до начала работы, а затем снова вниз.

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

+0

Спасибо, да, я думал, что это будет одно из решений. Heroku предложил «Управление этим через API платформы - это один из способов сделать это, но если вы хотите использовать альтернативу, вы можете подумать об использовании набора инструментов toolbelt для героя, который даст вам доступ к инструментальному набору внутри динамика. Извините, что у меня нет простое решение для вас сразу ». – rii

1

В зависимости от специфики использования вы можете просто создать отдельный отдельный тип в вашем procfile, который работает только с этим конкретным рабочим и всегда масштабируется до performance, но не всегда работает? Вы могли бы просто запустить это с одноразовыми запусками, вместо того чтобы масштабировать его потенциально (это также можно сделать через API, примерно эквивалентный heroku run ...). Тем не менее, ответ @rdegges, безусловно, должен работать.

+0

Это интересная идея, я рассмотрю ее. – rii

Смежные вопросы