раздел 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 без бэкапа. Рискуете потерять данные.
- Сразу строить горизонтальную архитектуру «на вырост». Сложно и не нужно, пока вертикального хватает.
Что дальше
Финальная шпаргалка: весь путь от создания сервера до деплоя на одной странице.