Можно ли масштабировать конкретного работника Heroku?
В настоящее время я пытаюсь разработать приложение, которое в значительной степени опирается на работников heroku (выполняющих скрипт NodeJS, здесь нет выбора при переключении на Ruby/Rails), обрабатывающих длительные (от 1 до 168 часов) фоновые задания. Моя проблема в том, что некоторые задания могут быть завершены в течение 1 часа, в то время как другие могут занять 168, и я не хочу ждать, пока все мои работники начнут сокращаться, поскольку Heroku будет взимать плату за это время с каждого работника.,
У меня нет проблем с перезапуском dynos один раз в день, но я хотел бы знать, возможно ли (и если да, как) уменьшить масштаб определенного работника Heroku с помощью API Heroku или с помощью любых других средств (возможно, из рабочего процесса само по себе, хотя завершение процесса изнутри, кажется, только приводит к тому, что работник перезагружается, а не сокращается).
Если это невозможно, то я хотел бы знать, знает ли кто-нибудь, как захватить "событие уменьшения" (т. Е. Посылается ли какой-то случайный сигнал случайному работнику, который должен быть уменьшен, например, SIGTERM или SIGKILL?).
Любой совет вообще приветствуется.
1 ответ
Один из способов сделать это - использовать одноразовые динамометры.
Heroku API позволит вам создать динамо. Созданные таким образом Dynos не будут управляться Heroku, то есть, если они остановятся, они не будут перезапущены автоматически.
Таким образом, у вас может быть процесс мониторинга, который ищет количество динам, которые есть в вашем приложении (снова используя Heroku API, вы можете вывести список динамов), и запускать новые по мере необходимости.
Каждый динамо будет выполнять ту работу, которая вам необходима, и выключаться. Единственная динамометрическая система, которая постоянно масштабируется и работает, - это процесс вашего монитора.