JavaRush /Курсы /Модуль 2: Fullstack /Масштабирование сервисов

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

Модуль 2: Fullstack
14 уровень , 7 лекция
Открыта

8.1 Команда docker compose scale

Масштабирование сервисов — это процесс увеличения или уменьшения количества экземпляров контейнеров, которые выполняют один и тот же сервис, для управления нагрузкой и обеспечения отказоустойчивости приложения. В Docker Compose для масштабирования сервисов используется команда docker compose scale (в старых версиях) или параметр --scale в новых версиях.

Основные концепции масштабирования:

  1. Масштабируемость: Возможность легко увеличивать или уменьшать количество экземпляров сервиса в зависимости от текущей нагрузки.
  2. Отказоустойчивость: Запуск нескольких экземпляров сервиса позволяет обеспечить отказоустойчивость, так как сбой одного экземпляра не приведёт к остановке всего сервиса.
  3. Балансировка нагрузки: Распределение нагрузки между несколькими экземплярами сервиса для оптимизации производительности.

Использование команды docker compose scale

Синтаксис команды:


docker compose scale SERVICE=NUM

Где:

  • SERVICE: имя сервиса, который нужно масштабировать.
  • NUM: количество экземпляров, которые должны быть запущены.

Пример использования:

Предположим, у вас есть файл compose.yaml с определением сервиса web.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Чтобы запустить 3 экземпляра сервиса web, используйте команду:

Terminal

docker compose scale web=3

Примечание: Перед выполнением команды docker compose scale убедитесь, что сервисы запущены с помощью команды docker compose up.

Использование параметра --scale в новых версиях

В новых версиях Docker Compose команда docker compose scale заменена параметром --scale, который используется совместно с командой up.

Terminal

docker compose up --scale web=3

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

8.2 Практические примеры

Пример 1: Масштабирование веб-сервера

Создайте файл compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"

Запустите и масштабируйте сервис до 3 экземпляров:

Terminal

docker compose up --scale web=3

Теперь у вас будет 3 экземпляра веб-сервера Nginx, работающих на портах из диапазона 80-90.

Важно! Если сервис предполагает масштабирование на несколько экземпляров, необходимо указывать диапазон портов, например: "80-90:80". Это «забронирует» на хостовой машине диапазон из 10 портов. При добавлении реплики сервиса ей будет назначен порт из диапазона. Если этого не сделать, порты будут выбраны случайно, и реплики станут недоступными.

Пример 2: Масштабирование с базой данных

Создайте файл compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

Запустите и масштабируйте сервис web до 4 экземпляров:

Terminal

docker compose up --scale web=4

Теперь у вас будет 4 экземпляра веб-сервера Nginx, работающих с одной базой данных PostgreSQL.

8.3 Управление масштабируемыми сервисами

После масштабирования сервисов вы можете использовать команды Docker Compose для управления экземплярами.

Просмотр запущенных контейнеров

Используйте команду docker compose ps для просмотра всех запущенных контейнеров:

Terminal

docker compose ps

Остановка и удаление масштабируемых сервисов

Чтобы остановить и удалить все экземпляры сервиса, используйте команду docker compose down:

Terminal

docker compose down

Советы и рекомендации:

  1. Балансировка нагрузки: используйте балансировщики нагрузки для распределения трафика между несколькими экземплярами сервиса. Например, вы можете использовать Nginx или HAProxy для этой цели.
  2. Сохранение данных: убедитесь, что данные, создаваемые масштабируемыми сервисами, сохраняются в томах или внешних хранилищах, чтобы предотвратить потерю данных при остановке или удалении контейнеров.
  3. Мониторинг: используйте инструменты мониторинга, такие как Prometheus или Grafana, для отслеживания производительности и состояния масштабируемых сервисов.
  4. Автоматическое масштабирование: рассмотрите возможность автоматического масштабирования сервисов в зависимости от нагрузки с помощью оркестраторов, таких как Kubernetes или Docker Swarm.
3
Задача
Модуль 2: Fullstack, 14 уровень, 7 лекция
Недоступна
Масштабирование Nginx
Масштабирование Nginx
3
Задача
Модуль 2: Fullstack, 14 уровень, 7 лекция
Недоступна
Масштабирование с базой данных
Масштабирование с базой данных
3
Задача
Модуль 2: Fullstack, 14 уровень, 7 лекция
Недоступна
Масштабирование приложения с балансировщиком
Масштабирование приложения с балансировщиком
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
BlavodBatman Уровень 24
21 января 2026
2-я задача просто сломана.
Юрий Уровень 48
7 декабря 2025
2 задача, код под Docker Swarm, в Compose не работает.. выход, выхода нет . Хурма полная.
Slevin Уровень 34
8 октября 2025
Лекция полная параша. Рассказывают про одно - в задачах вообще нет НИ ОДНОГО упоминания того что было в лекции, а совершенно другие требования. Вишенкой на тортик из говна и палок собранный ИИ - решение из ответа не подходит. Говнолидатор сказал исправить файл nginx.conf, после исправления - пишет что ни одна задача не выполнена, и ничего больше не советует. --- В любом случае за весь уровень нихрена объяснено не было, что значат эти порты, почему диапазон, как это работает. Почему диапазон НЕЛЬЗЯ указывать (именно убирание его позволило валидатору одобрить эту хрень). НОЛЬ ИНФОРМАЦИИ - ХУДШАЯ ЛЕКЦИЯ
Askhad1994 Уровень 19
6 августа 2025
Про Docker swarm ни слова, а ведь без понимания этого не выполнить второе задание