CodeGym /Cursos /Docker SELF /Escalabilidad de servicios

Escalabilidad de servicios

Docker SELF
Nivel 16 , Lección 2
Disponible

8.1 Comando docker compose scale

Escalar servicios — es el proceso de aumentar o disminuir el número de instancias de contenedores que ejecutan el mismo servicio para manejar la carga y garantizar la tolerancia a fallos de la aplicación. En Docker Compose, para escalar servicios se utiliza el comando docker compose scale (en versiones antiguas) o el parámetro --scale en las nuevas versiones.

Conceptos básicos del escalado:

  1. Escalabilidad: La capacidad de aumentar o reducir fácilmente el número de instancias del servicio según la carga actual.
  2. Tolerancia a fallos: Ejecutar varias instancias del servicio permite garantizar la tolerancia a fallos, ya que una falla en una instancia no detendrá todo el servicio.
  3. Balanceo de carga: Distribuir la carga entre varias instancias del servicio para optimizar el rendimiento.

Uso del comando docker compose scale

Sintaxis del comando:


docker compose scale SERVICE=NUM

Dónde:

  • SERVICE: nombre del servicio que necesitas escalar.
  • NUM: número de instancias que deben ejecutarse.

Ejemplo de uso:

Supongamos que tienes un archivo compose.yaml con la definición del servicio web.

Yaml

version: '3.8'

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

Para ejecutar 3 instancias del servicio web, usa el comando:

Terminal

docker compose scale web=3

Nota: Antes de ejecutar el comando docker compose scale, asegúrate de que los servicios estén iniciados con el comando docker compose up.

Uso del parámetro --scale en versiones nuevas

En las nuevas versiones de Docker Compose, el comando docker compose scale fue reemplazado por el parámetro --scale, que se utiliza junto con el comando up.

Terminal

docker compose up --scale web=3

Este enfoque es preferible, ya que permite iniciar y escalar servicios simultáneamente.

8.2 Ejemplos prácticos

Ejemplo 1: Escalado de un servidor web

Crea un archivo compose.yaml:

Yaml

version: '3.8'

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

Inicia y escala el servicio a 3 instancias:

Terminal

docker compose up --scale web=3

Ahora tendrás 3 instancias del servidor web Nginx funcionando en los puertos dentro del rango 80-90.

¡Importante! Si el servicio se supone que escalará a varias instancias, es necesario especificar un rango de puertos, por ejemplo: "80-90:80". Esto "reservará" en la máquina host un rango de 10 puertos. Al agregar una réplica del servicio se le asignará un puerto del rango. Si no se hace esto, los puertos serán seleccionados aleatoriamente, y las réplicas no estarán disponibles.

Ejemplo 2: Escalado con base de datos

Crea un archivo 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

Inicia y escala el servicio web a 4 instancias:

Terminal

docker compose up --scale web=4

Ahora tendrás 4 instancias del servidor web Nginx funcionando con una base de datos PostgreSQL.

8.3 Gestión de servicios escalables

Después de escalar los servicios, puedes usar los comandos de Docker Compose para gestionar las instancias.

Ver los contenedores en ejecución

Usa el comando docker compose ps para ver todos los contenedores en ejecución:

Terminal

docker compose ps

Detener y eliminar servicios escalables

Para detener y eliminar todas las instancias del servicio, usa el comando docker compose down:

Terminal

docker compose down

Consejos y recomendaciones:

  1. Balanceo de carga: usa balanceadores de carga para distribuir el tráfico entre varias instancias del servicio. Por ejemplo, puedes usar Nginx o HAProxy para este propósito.
  2. Preservación de datos: asegúrate de que los datos generados por los servicios escalables se guarden en volúmenes o almacenamiento externo para prevenir la pérdida de datos al detener o eliminar contenedores.
  3. Monitoreo: utiliza herramientas de monitoreo como Prometheus o Grafana para seguir el rendimiento y el estado de los servicios escalables.
  4. Escalamiento automático: considera la posibilidad de escalar automáticamente los servicios en función de la carga utilizando orquestadores como Kubernetes o Docker Swarm.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION