Масштабирование
Масштабирование — способность системы справляться с ростом нагрузки. Нагрузка растёт — запросов больше, данных больше, пользователей больше. Есть два принципиально разных подхода.
Вертикальное масштабирование (Scale Up) — купить сервер мощнее:
- Плюс: просто, приложение не нужно менять
- Минус: есть физический предел, дорого, единая точка отказа
Горизонтальное масштабирование (Scale Out) — добавить больше серверов:
- Плюс: практически неограниченно, отказоустойчивость
- Минус: приложение должно быть stateless (см. тему «12-factor»), нужен балансировщик нагрузки
Кэширование — один из главных способов снизить нагрузку: не пересчитывать и не читать из БД то, что можно закэшировать (см. тему «Зачем кэш»).
Шардирование БД — когда одна база не справляется, данные разбиваются по нескольким (шардам): пользователи с ID 1–1M на шарде 1, 1M–2M на шарде 2. Сложно, применяется при реально большой нагрузке (см. тему «Репликация и шардирование»).
Копнуть глубже
Bottleneck — узкое место. Масштабирование без анализа даёт мало результата. Система масштабируется до узкого места — и только его разрешение позволяет расти дальше. Узкие места находят через профилирование и мониторинг: обычно это БД (медленные запросы), N+1 (см. тему «N+1»), или отсутствие кэша.
CQRS (Command Query Responsibility Segregation) — разделение на две модели: команды (записи, меняют состояние) и запросы (только чтение). Запросы можно обслуживать отдельными read-репликами или денормализованными read-моделями — без блокировок от записи. Хорошо сочетается с Event Sourcing.
Асинхронная обработка через очереди. Тяжёлые операции (отправка email, генерация PDF, обработка изображения) не стоит делать синхронно в рамках HTTP-запроса. Ответ возвращается сразу («принято в обработку»), а работа делается в фоне через Kafka/RabbitMQ. Пользователь не ждёт, система не перегружается пиками нагрузки.
CDN (Content Delivery Network) — сеть серверов по всему миру, которые кэшируют статику (картинки, JS, CSS) ближе к пользователю. Запрос из Токио не идёт до сервера в Москве — отдаётся с ближайшей точки CDN. Cloudflare Pages (который хостит этот сайт) — тоже CDN.
• что такое bottleneck и почему масштабирование без профилирования малоэффективно (если дошёл до 2-го слоя).