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