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.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ