Масштабирование: вертикальное, горизонтальное, stateless-сервисы

↑ 8.4 Backend System Design · ← Предыдущая · → Следующая

Обязательно~3 мин чтенияУровень: senior

Зачем это на собесе

Базовый набор приёмов масштабирования и их ограничения.

Объяснение

ПодходСутьОграничения
Вертикальное (scale up)больше CPU/RAM на узлепредел железа, единая точка отказа, простой при увеличении
Горизонтальное (scale out)больше узловнужна распределённость, состояние вне узла

Stateless-сервисы: состояние (сессии, файлы, кэш) хранится вне процесса (Redis, БД, объектное хранилище), поэтому любой экземпляр обрабатывает любой запрос → легко добавлять реплики за балансировщиком и автоскейлить.

Масштабирование слоёв:

СлойПриёмы
ВходDNS, CDN, балансировщики L4/L7, кэш на краю
Приложениеstateless-реплики, autoscaling по CPU/RPS/очереди, разделение на сервисы
КэшRedis Cluster, локальный L1, консистентное хэширование
База данныхиндексы и оптимизация запросов → read replicas → кэш → партиционирование → шардирование
Асинхронностьочереди, фоновые воркеры, буферизация записи
Файлыобъектное хранилище + CDN
Поиск и аналитикаотдельные системы (Elasticsearch, ClickHouse)

Шардирование: горизонтальное разбиение данных по ключу (хэш, диапазон, справочник). Вопросы: выбор ключа (равномерность, hot shards), перешардирование (консистентное хэширование), запросы между шардами, транзакции. Откладывайте шардирование, пока не исчерпаны реплики, кэш и оптимизация.

Репликация: лидер-фолловер (чтение с реплик, lag), мульти-лидер (конфликты), без лидера (кворумы).

Балансировка: round-robin, least connections, хэш по ключу (sticky), взвешенная; health checks для исключения нездоровых узлов.

Нюансы и подводные камни

  • Состояние в памяти процесса (сессии, кэш) не масштабируется горизонтально без стороннего хранилища.
  • Узкое место часто БД, а не приложение.
  • Autoscaling запаздывает: планируйте запас и прогрев.
  • Горячие ключи и неравномерные шарды сводят на нет выгоду.
  • Масштабирование увеличивает сложность: сначала оптимизируйте.

Практика

  1. Сделайте сервис stateless и запустите 3 реплики за балансировщиком.
  2. Настройте автоскейлинг по длине очереди.
  3. Придумайте ключ шардирования для таблицы заказов и обсудите hot shards.

Вопросы с ответами

Связанные темы