раздел 06

Масштабирование по мере роста

Что это

Вы стартовали с минимальной конфигурации - и правильно сделали. Но когда пользователей становится больше, сервер начинает упираться в ресурсы. Масштабирование - это как дать ему больше мощности, не переписывая проект.

Зачем

Чтобы продукт не тормозил и не падал под нагрузкой, но при этом вы не платили за лишнее заранее. Растёте по факту, а не на всякий случай.

Как понять, что упёрлись

Признаки нехватки ресурсов:

| Что упёрлось | Симптомы | Чем смотреть | |---|---|---| | CPU | Сервер тормозит под нагрузкой, ответы медленные | htop, графики в панели | | RAM | Процессы падают (OOM), система свопит и тормозит | free -h, htop | | Диск | «No space left», база и логи не пишутся | df -h |

Лучший способ не гадать - подключить мониторинг (графики CPU/RAM/диска в панели Selectel или внешний) и смотреть тренды.

Вертикальное масштабирование (resize)

Самый простой способ - увеличить ресурсы того же сервера: добавить vCPU, RAM, расширить диск. У облачного сервера это делается в панели за минуты (resize), часто с короткой перезагрузкой.

Вертикальное vs горизонтальное

  • Вертикальное - один сервер становится мощнее (больше CPU/RAM). Просто, но есть потолок и единая точка отказа.
  • Горизонтальное - несколько серверов делят нагрузку через балансировщик. Сложнее, требует, чтобы приложение умело работать в нескольких копиях, зато масштабируется почти безгранично и переживает падение одного узла.

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

Managed-базы

Когда база данных становится критичной и нагруженной, держать её на том же сервере рискованно. Selectel предлагает managed-базы: провайдер сам обновляет, бэкапит и следит за доступностью БД. Дороже, но снимает заботу о самой важной части - данных.

На что обращать внимание

  • Мониторинг. Без графиков вы не поймёте, что и когда упирается.
  • Не держать тяжёлые задачи на маленьком боксе. Видео-кодирование, большие сборки, ML - выносите на отдельный сервер или временно увеличивайте.
  • Бэкапы перед resize. Всегда.

Пример

Бот вырос, в панели видно, что RAM держится под 90% и процессы иногда падают. Делаете бэкап, затем resize с 2 ГБ до 4 ГБ RAM - пара минут и перезагрузка. Если позже упрётся база - выносите её в managed-базу.

Антипаттерны

  • Масштабироваться вслепую. Без мониторинга вы добавляете не то, что реально кончилось.
  • Resize без бэкапа. Рискуете потерять данные.
  • Сразу строить горизонтальную архитектуру «на вырост». Сложно и не нужно, пока вертикального хватает.

Что дальше

Финальная шпаргалка: весь путь от создания сервера до деплоя на одной странице.