Сайты

Масштабирование и автоматическое масштабирование приложения Node.js

Auto-scaling grows and shrinks the number of instances running your Node.js app as CPU load changes, so busy periods get more capacity and quiet periods cost less. This guide covers the KPanel tab…

Автоматическое масштабирование увеличивает и уменьшает количество экземпляров, на которых работает ваше приложение Node.js, по мере изменения нагрузки на процессор, что позволяет занятым периодам получить больше ресурсов, а тихим периодам снизить затраты. Это руководство охватывает вкладку KPanel, все параметры, что подлежит биллингу и как сделать приложение безопасным для масштабирования.

Где находится масштабирование в KPanel

  1. Войдите в KPanel.
  2. Нажмите Websites в левой боковой панели, затем нажмите на сайт.
  3. На вкладке сайта откройте Advanced, затем Scaling.

Прямой адрес: /websites/<site-id>/autoscale. Старый адрес /websites/<site-id>/scaling по-прежнему работает и направляет вас в то же место.

Параметры автоматического масштабирования для приложения Node.js в KPanel

Вкладка появляется только на сайтах Node.js. Она не будет в меню для сайта WordPress, WooCommerce, статического, PHP, Python или Ruby, потому что механизм масштабирует кластер процессов Node.js.

Одна вкладка, одна конфигурация

Раньше KPanel содержал две вкладки здесь: Scaling и Autoscale с одним набором параметров. Это были два представления одной конфигурации, что было только способом запутаться, поэтому теперь это одна вкладка Scaling: текущий статус, параметры, недавние события масштабирования и панель использования и стоимости за текущий расчётный период, всё в одном месте.

Как это работает

Ваше приложение работает как кластер процессов. Автоматическое масштабирование отслеживает среднее использование процессора на работающих экземплярах и добавляет или удаляет экземпляры в соответствии с установленными вами порогами.

Требуется режим кластера. Если ваше приложение ещё не работает в режиме кластера, включение автоматического масштабирования переключит его на этот режим, что включает в себя краткий перезапуск. Страница вас об этом уведомит.

Чтение текущего статуса

Карточка статуса показывает три вещи:

  • Instances: сколько экземпляров работает прямо сейчас.
  • Avg CPU: средний процессор на этих экземплярах.
  • Cluster: находится ли приложение в режиме кластера. Если здесь написано нет, включение автоматического масштабирования переключит его.

Если приложение вообще не работает, карточка это указывает вместо отображения нулей.

Вкладка также показывает Last scale (время последнего события масштабирования) или never (никогда).

Параметры

ПараметрДиапазонЧто это делает
Min instances1 до 16Минимум. Никогда не масштабируется ниже этого значения
Max instances1 до 16Максимум. Никогда не масштабируется выше этого значения
Scale up at CPU %5 до 99Процессор выше этого значения добавляет экземпляр
Scale down at CPU %1 до 95Процессор ниже этого значения удаляет один экземпляр
Cooldown (sec)30 до 3600Минимальное время ожидания между действиями масштабирования

Главный выключатель это переключатель в заголовке карточки параметров. Когда автоматическое масштабирование отключено, параметры отображаются серо, и ваше приложение остаётся на текущем количестве экземпляров.

Рекомендуемые начальные значения:

  • Min instances 1 или 2. Два, если вы не можете допустить, чтобы перезапуск одного экземпляра отключил приложение.
  • Max instances в соответствии с тем, сколько вы готовы платить в пик, а не на максимум.
  • Scale up около 70 процентов. Достаточно высоко, чтобы вы не платили за резервную мощность, которую никогда не используете, но достаточно низко, чтобы было время добавить ёмкость перед тем, как запросы начнут ставиться в очередь.
  • Scale down около 30 процентов. Оставьте большой промежуток между двумя порогами.
  • Cooldown в несколько минут. Это самый недооценённый параметр.

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

События масштабирования

На вкладке перечислены недавние события масштабирования, новейшие первыми, каждое показывает направление, количество экземпляров до и после, показание процессора, вызвавшее событие, и время.

Это журнал для чтения, когда приложение работало неправильно. Всплеск событий вверх и вниз за несколько минут означает, что ваши пороги слишком близко или cooldown слишком короткий. Одно масштабирование вверх, которое никогда не вернулось вниз, означает, что нагрузка осталась высокой, это вопрос ёмкости, а не конфигурации. Никаких событий вообще, когда вы ожидали некоторых, означает, что процессор никогда не пересекал порог или автоматическое масштабирование отключено.

Стоимость автоматического масштабирования

Экземпляры сверх базового распределения вашего плана измеряются и биллируются в секунду. На вкладке показано за текущий период:

  • Instance-time used (использованное время экземпляра) в часах и минутах с необработанными секундами экземпляра внизу.
  • Spent so far (потрачено до сих пор) в этом периоде.
  • Projected month-end (прогноз на конец месяца), экстраполированный из использования до сих пор.
  • Tracking (отслеживание), сколько окон использования было выставлено счётом из общего записанного количества.
  • Period progress (ход периода), дни, прошедшие из дней в месяце.

Тариф в секунду показан в верхней части той же панели, поэтому цифра, по которой вам выставляется счёт, всегда видна рядом с использованием, к которому она применяется.

Проекция это число, за которым нужно следить. Она экстраполирует из того, что вы использовали до сих пор, поэтому необычно занятая неделя в начале месяца завышает его. Проверьте через несколько дней, затем снова в середине месяца, прежде чем делать выводы. Если это выше, чем вы хотите, понижайте максимальное количество экземпляров, а не повышайте порог масштабирования вверх: потолок это жёсткое ограничение, порог это только подсказка.

Масштабирование вниз до минимума останавливает учёт. Если вы полностью отключите автоматическое масштабирование, приложение остаётся на том количестве экземпляров, которое оно имеет в данный момент, поэтому сначала вернитесь к минимуму, если причина в стоимости.

Как сделать приложение безопасным для масштабирования

На странице есть предупреждение, и это самое важное на ней: ваше приложение Node.js должно быть безопасным для кластера, чтобы масштабироваться чистым образом по экземплярам.

На практике это означает:

Нет состояния сеанса в памяти. Если сеанс вошедшего пользователя находится в памяти одного экземпляра, он выходит всякий раз, когда запрос попадает на другой экземпляр. Переместите сеансы в общее хранилище.

Нет кэша в памяти, на который вы полагаетесь в отношении правильности. У каждого экземпляра он свой. Кэш, который должен быть согласованным, должен быть общим.

Нет записей в локальную файловую систему, которые вы ожидаете прочитать обратно. Загрузки, записанные на локальный диск одним экземпляром, невидимы для других. Пишите в общее хранилище.

Нет незащищённой запланированной работы. Если таймер работает внутри приложения, каждый экземпляр его запускает, поэтому нночное задание при четырёх экземплярах запускается четыре раза. Переместите запланированную работу на крон-задание или защитите её блокировкой. См. Cron Jobs.

Нет предположения, что количество экземпляров стабильно. Всё, что разделяет работу по индексу экземпляра, ломается в тот момент, когда количество изменяется.

Если что-либо из этого применимо к вашему приложению, исправьте это перед включением автоматического масштабирования. Приложение, которое не является безопасным для кластера, даёт сбой способами, которые являются прерывистыми и трудно воспроизводимыми, потому что они зависят от того, какой экземпляр обслужил какой запрос.

Устранение неисправностей

Переключатель не включается. Для включения требуется разрешение на запись сайта. При роли только для чтения элементы управления отключены.

Приложение перезагрузилось при включении автоматического масштабирования. Ожидаемо. Переключение в режим кластера требует перезапуска, и это происходит один раз.

Пользователи случайно выходят из системы. Классический симптом того, что приложение не является безопасным для кластера. Сеансы находятся в памяти, и запросы попадают на разные экземпляры.

Экземпляры масштабировались вверх и никогда не возвращались вниз. Либо нагрузка оставалась выше порога масштабирования вниз, либо что-то держит процессор высоким независимо от трафика. Проверьте список событий и посмотрите, что на самом деле делает приложение.

Запланированное задание запустилось несколько раз. Каждый экземпляр его запустил. Переместите его на крон-задание или добавьте блокировку.

Ничего не масштабируется. Подтвердите, что переключатель включен, приложение работает и режим кластера включён. Затем проверьте, действительно ли процессор пересекал ваш порог масштабирования вверх в списке событий.

Стоимость выше, чем ожидалось. Посмотрите на список событий на предмет колебаний, затем понижайте максимальное количество экземпляров.

Связанные страницы

  • Site Performance and APM для проверки, является ли процессор действительно узким местом.
  • Site Uptime Monitoring для подтверждения того, что масштабирование действительно улучшает доступность.
  • Cron Jobs для запланированной работы, которая должна запуститься ровно один раз.
  • Resizing a Cloud Server если вам нужна машина большего размера, а не больше экземпляров.

Вам всё ещё нужна помощь?

Напишите нам на support@kapsulehost.com или откройте чат в KPanel.

Открыть KPanel
Масштабирование и автоматическое масштабирование приложения Node.js