Как я могу безопасно перезапустить приложение Node, которое получает большой объем трафика?

Например, в мире Python вы должны использовать uWSGI или Gunicorn для перезапуска веб-приложения Python, если оно по какой-либо причине остановлено, например. утечки памяти, непредвиденные ошибки времени выполнения и т. д. Однако это делается таким образом, чтобы соединения не прерывались (поэтому никаких 502-х).

Глядя на варианты Node, кажется, что PM2 — популярный выбор, но у меня есть две проблемы:

  1. Может ли он дать такие же гарантии в отношении сброса соединения (пожалуйста, без 502-х)?
  2. Когда я смотрел на PM2 раньше, казалось, что это вызывает значительное снижение производительности в моем приложении, где учитывается каждая миллисекунда задержки (100 добавленных мс).

Итак, мой вопрос: когда производительность является серьезным фактором, и мы не можем прерывать соединения при перезапуске, каковы эквиваленты Node uWSGI и Gunicorn?


person maxcountryman    schedule 11.03.2017    source источник


Ответы (1)


Вот некоторые стратегии:

  1. Используйте кластеризацию node.js с N рабочими процессами. Затем вы можете перезапустить любой отдельный рабочий процесс, и это не повлияет на общую доступность.

  2. Используйте балансировщик нагрузки перед несколькими кластерами. Затем временно настройте балансировщик нагрузки на отправку трафика только в один кластер. Когда деконфигурированный кластер завершит работу со всеми открытыми соединениями, вы сможете перезапустить все процессы в этом кластере.

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

Если у вас есть ресурсы среди нескольких кластеризованных процессов, таких как базы данных, вам также потребуется резервирование для них, чтобы иметь возможность перезапускать их без перерыва.

Теперь, конечно, вы должны убедиться, что вывод некоторой части вашей системы из эксплуатации для перезагрузки или обслуживания по-прежнему оставляет вам достаточную мощность обслуживания, поэтому вы обычно делаете это, когда общая нагрузка на обслуживание низкая (4 часа утра для вашей самой большой пользовательской базы). .

PM2 — это один из таких инструментов, который позволяет вам делать часть того, что здесь рекомендуется (например, создавать кластеры и плавно перезапускать часть кластера). Есть другие инструменты.

person jfriend00    schedule 11.03.2017