PRO

Как масштабировать Django-приложение горизонтально?

Горизонтальное масштабирование Django означает запуск нескольких одинаковых экземпляров приложения за балансировщиком нагрузки. Для этого приложение делают stateless, а общее состояние — сессии, кэш, файлы, задачи — выносят во внешние сервисы: Redis, базу данных, object storage и очередь задач.
Подробный ответ

Основной принцип

Несколько экземпляров Django должны быть взаимозаменяемыми. Любой запрос может попасть на любой instance, поэтому нельзя хранить критичное состояние только в памяти конкретного web-процесса или локальной файловой системе контейнера.

Что выносят из приложения

  • сессии — в Redis, базу данных или подписанные cookie, в зависимости от требований;

  • кэш — в общий Redis или Memcached;

  • загруженные медиафайлы — в S3-совместимое object storage;

  • фоновые операции — в Celery и общий broker;

  • конфигурацию и секреты — в переменные окружения или secrets manager.

Балансировка и web workers

Перед несколькими экземплярами ставят Nginx, cloud load balancer или ingress controller. Каждый instance запускает Gunicorn или ASGI-сервер с несколькими workers. Количество workers подбирают по нагрузочному тестированию, CPU, памяти и характеру задач, а не по фиксированной формуле.

База данных

При росте нагрузки база обычно становится главным узким местом. Нужны индексы, оптимизация QuerySet, connection pooling, кэширование, read replicas для чтения при необходимости и контроль числа подключений от web workers.

Операционная часть

Нужны health checks, readiness checks, централизованные логи, метрики, трассировка и безопасный rollout. Миграции выполняют отдельно от масштабируемых web instances, чтобы избежать гонок при одновременном старте контейнеров.

Как ответить на собеседовании

Для горизонтального масштабирования я запускаю несколько stateless экземпляров Django за балансировщиком. Сессии и кэш храню в общем Redis, медиа — в object storage, фоновые задачи выношу в Celery, а базу оптимизирую и при необходимости масштабирую отдельно.

Оцени свой прогресс

Честно оцени своё понимание этого вопроса, чтобы мы могли построить твой учебный трек максимально эффективно.
Читать в блоге