CodeGym /Corsi /Docker SELF /Scalabilità dei servizi

Scalabilità dei servizi

Docker SELF
Livello 16 , Lezione 2
Disponibile

8.1 Comando docker compose scale

Scalabilità dei servizi — è il processo di aumento o riduzione del numero di istanze dei container che svolgono lo stesso servizio, per gestire il carico e garantire la fault-tolerance delle applicazioni. In Docker Compose, per scalare i servizi si utilizza il comando docker compose scale (nelle versioni precedenti) o il parametro --scale nelle versioni più recenti.

Concetti principali della scalabilità:

  1. Scalabilità: La capacità di aumentare o ridurre facilmente il numero di istanze del servizio in base al carico attuale.
  2. Fault-tolerance: Eseguire più istanze del servizio consente di garantire una maggiore affidabilità, poiché un errore di una istanza non comporta l'interruzione di tutto il servizio.
  3. Load balancing: Distribuzione del carico tra più istanze del servizio per ottimizzare le prestazioni.

Utilizzo del comando docker compose scale

Sintassi del comando:


docker compose scale SERVICE=NUM

Dove:

  • SERVICE: il nome del servizio da scalare.
  • NUM: il numero di istanze che devono essere avviate.

Esempio di utilizzo:

Supponiamo di avere un file compose.yaml con la definizione del servizio web.

Yaml

version: '3.8'

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

Per avviare 3 istanze del servizio web, utilizzare il comando:

Terminal

docker compose scale web=3

Nota: Prima di eseguire il comando docker compose scale, assicurati che i servizi siano stati avviati con il comando docker compose up.

Utilizzo del parametro --scale nelle versioni più recenti

Nelle versioni più recenti di Docker Compose, il comando docker compose scale è stato sostituito dal parametro --scale, che viene utilizzato insieme al comando up.

Terminal

docker compose up --scale web=3

Questo approccio è preferibile, poiché consente di avviare e scalare i servizi contemporaneamente.

8.2 Esempi pratici

Esempio 1: Scalabilità di un web server

Crea il file compose.yaml:

Yaml

version: '3.8'

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

Avvia e scala il servizio fino a 3 istanze:

Terminal

docker compose up --scale web=3

Ora avrai 3 istanze del web server Nginx, che funzionano sulle porte nel range 80-90.

Importante! Se un servizio prevede la scalabilità su più istanze, è necessario specificare un range di porte, ad esempio: "80-90:80". Questo «prenoterà» un range di 10 porte sulla macchina host. Quando aggiungi una replica del servizio, le verrà assegnata una porta dal range. Se non lo fai, le porte verranno scelte casualmente e le repliche diventeranno inaccessibili.

Esempio 2: Scalabilità con un database

Crea il file 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

Avvia e scala il servizio web fino a 4 istanze:

Terminal

docker compose up --scale web=4

Ora avrai 4 istanze del web server Nginx che lavorano con un database PostgreSQL condiviso.

8.3 Gestione dei servizi scalabili

Dopo aver scalato i servizi, puoi utilizzare i comandi di Docker Compose per gestire le istanze.

Visualizzare i container in esecuzione

Usa il comando docker compose ps per vedere tutti i container in esecuzione:

Terminal

docker compose ps

Arrestare e rimuovere i servizi scalabili

Per arrestare e rimuovere tutte le istanze di un servizio, utilizza il comando docker compose down:

Terminal

docker compose down

Consigli e suggerimenti:

  1. Load Balancing: utilizza dei load balancer per distribuire il traffico tra più istanze di un servizio. Ad esempio, puoi usare Nginx o HAProxy per questo scopo.
  2. Conservazione dei dati: assicurati che i dati generati dai servizi scalabili vengano salvati su volumi o storage esterni così da evitare la perdita dei dati in caso di arresto o rimozione dei container.
  3. Monitoraggio: usa strumenti di monitoraggio come Prometheus o Grafana per tenere traccia delle performance e dello stato dei servizi scalabili.
  4. Scalabilità automatica: considera l'idea di automatizzare la scalabilità dei servizi in base al carico con orchestratori come Kubernetes o Docker Swarm.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION