Как осуществить правильный restart приложения на Node.js?

Добрый день. Собственно, сабж, как правильно рестартить ноду при деплое, если в приложение идет постоянная обработка чего-либо? Например, постоянно открыты соединения или с раббита бесконечно поступают на обработку сообщения да еще и вычисления в придачу идут.

Есть ли какие-нибудь инструменты для бесшовного деплоя? Все, что нагуглил, пока что сводится к тому, что нужно писать свой shutdown, который будет останавливать все обработчики и перезапускаться, но это просадка по времени, как я считаю. Если, например, какое-нибудь действие занимает несколько секунд, то пока оно будет завершаться, приложение по факту работать не будет, ожидая перезапуска. Или, может, кто поделится своими методами деплоя. Заранее спасибо за ответы.
  • Вопрос задан
  • 3167 просмотров
Решения вопроса 1
rumkin
@rumkin
Я считаю,что бесшовный деплой реален и удобен в присутствии третьей стороны назовем его switcher. Как он работает:
1. Switcher запускает n-инстансов и начинает распределять запросы равномерным слоем между ними: ведя учет запросов через счетчики.
2. Вы посылаете switcher'у сигнал о перезагрузке/деплое.
3. Switcher начинает поднимать новые инстансы, не убивая старых и отправлять запросы на них.
4. Когда у старого инстанса счетчик запросов обнулился, его можно убивать, что и делает switcher.

Таким образом вам не придется модифицировать имеющийся код, а масштабирование будет происходить безболезненно путем добавления новых инстансов. Обратите внимание: у процесса есть событие 'exit', на которое вы навешиваете обработчики для остановки вычислений. Т.е. сначала закрывается внешний интерфейс в штатном режиме, а только затем прекращаются внутренние операции, закрываются соединения, релизятся блокировки и т.п.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
icelaba
@icelaba
Знаю и умею всё
Попробуйте https://github.com/amscanne/huptime
Я как то тестил - по ощущениям вроде работает :-)

Или можно руками сам процесс описан тут blog.argteam.com/coding/hardening-node-js-for-prod...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы