Мы столкнулись с этим некоторое время назад, и я потратил немало времени на это, к моему большому разочарованию.Я постараюсь придерживаться основной точки.Существует несколько решений Heroku для автоматического масштабирования, которые на первый взгляд кажутся приличными.
Пример, который уже был приведен heroku-autoscaler , на самом деле предназначен для автоматического масштабирования динозавров и является практически единственным решением, которое утверждает, что делает это (и, конечно, оно этого не делает)Что ж).Большинство других претендуют только на то, что вы автоматически работаете за вас.Итак, давайте сосредоточимся на этом в первую очередь.Автоскалеры, которые вы увидите для работников, зависят от того, что вы на самом деле используете для фоновых работников, например delayed_job , resque .Это наиболее распространенные библиотеки фоновой обработки, которые используют люди, поэтому автоскалер попробует подключиться к одному из них.Вы можете использовать такие вещи, как:
Некоторые из этих работ со стеком Cedar могут потребовать небольшой доработки.Проблема со всеми из них в том, что это все равно что пытаться вытащить себя из болота своими собственными волосами.Давайте возьмем найм огня в качестве примера (это, вероятно, лучший из всех).Он изменяет delayed_job, чтобы сами работники могли просматривать очередь и, если необходимо, раскручивать большее количество работников. Если в очереди больше нет рабочих мест, все работники будут закрывать друг друга.Есть несколько проблем:
- Если вы хотите поставить задачу в очередь для выполнения в будущем, а не прямо сейчас, вам не повезло.Рабочий запускается, когда задания входят в очередь, но, поскольку в будущем задание будет выполнено, работник выключится и не запустится, если в очередь не войдет другое задание (это единственное, что побуждает работников запускаться)
- вы теряете возможность повторять неудачные задания, это возможно по умолчанию в delayed_job, но требуется некоторое время, прежде чем неудачное задание должно быть повторено (и постепенно дольше), если оно повторяется несколько раз, но рабочиебудет отключен во время этой задержки, и нет ничего, что заставляло бы их запускаться снова (по сути, это та же проблема, что и в первом сценарии)
Единственное, что решает эту проблему, это иметьпоэтому один рабочий, работающий непрерывно, может периодически отслеживать очередь и при необходимости выполнять задания или даже увеличивать количество рабочих.Но если вы делаете это, вы не экономите деньги (у вас есть работник, работающий непрерывно 24/7, и вы должны платить за это), и в этом вся посылка за автоскалером на героку.По сути, если у вас есть только периодическая фоновая обработка, или у вас есть фоновые задания, которые могут быть неудачными, но успешными при повторных попытках, или у вас есть фоновые задания, которые не нужно выполнять мгновенно, библиотеки для автоматического масштабирования вы не сможетеиспользуйте это будет работать для вас.
Вот одна альтернатива.Парень, который написал Hirefire, позже включил его в веб-приложение ( Hirefire app ), суть которого заключается в том, чтобы внешне контролировать ваших рабочих / динозавров Heroku и, при необходимости, раскручивать / выключать рабочих динамометров.Это было бесплатно в бета-версии, но теперь оно стоит денег, меньше, чем вы платите за работу 24 часа в сутки, но все же не так уж и незначительно, если вам нужно лишь несколько фоновых заданий время от времени.В любом случае, это единственный реальный способ убедиться, что инфраструктура фоновых заданий выполняет то, что вы хотите (хорошо, и это означает, что вы должны развернуть свое собственное решение, которое означает наличие машины, подобной экземпляру EC2, где вы можете поместить несколько сценариев, которые будут проверять ваше приложение heroku и вращатьсяпри необходимости поднимать / выключать работников - нетривиальные усилия).
Теперь приложение Hirefire также предлагает автоматическое масштабирование ваших динамов, оно делает это, основываясь на задержке вашей очереди запросов heroku.Однако я обнаружил, что это не сработало, возможно, если вы находитесь близко к центру обработки данных Amazon, где на самом деле живет ваше приложение heroku (у нас это не так), у вас может быть другой опыт.Но для нас это излишне раскручивало целую кучу динамометров и никогда не раскрутило бы их, независимо от того, насколько я изменил настройки.Вы можете объяснить это тем фактом, что это была бета-версия, которая с тех пор могла быть улучшена, но это мой опыт.
Короче говоря, если вы хотите автоматически масштабировать своих работников, используйте приложение Hirefire,вы будете экономить гораздо меньше денег, чем вы думали, но это все еще самый дешевый вариант.Если вы хотите автоматически масштабировать динамометры, вам в основном не повезло.Это лишь одно из тех ограничений, с которыми вы живете для удобства использования платформы, подобной Heroku.