Patrón 7: Redundancia Multi‐AZ y Autoescalado - JuanHerreraP/Proyecto-MISO-Solventa-Grupo-11 GitHub Wiki

Problema

Solventa debe continuar operando cuando falla una instancia o una zona de disponibilidad. También debe aumentar su capacidad durante campañas masivas o eventos paramétricos.

Solución

Los servicios se despliegan en ECS Fargate sobre varias zonas de disponibilidad.

El balanceador distribuye las solicitudes únicamente entre instancias saludables. ECS Auto Scaling crea o elimina réplicas según la carga.

Aurora PostgreSQL utiliza una réplica Multi-AZ para permitir la conmutación automática ante fallas.

Aplicación en Solventa

  • ECS Fargate ejecuta réplicas en al menos dos zonas.
  • El ALB realiza verificaciones de salud.
  • Las instancias dañadas dejan de recibir tráfico.
  • El autoescalado responde a CPU, memoria, solicitudes o tamaño de las colas.
  • PostgreSQL mantiene una réplica en otra zona.
  • Los servicios permanecen sin estado para facilitar su reemplazo.

Razonamiento

El patrón aprovecha servicios administrados de AWS y evita construir manualmente mecanismos de recuperación.

Permite mejorar disponibilidad y escalabilidad sin adoptar Kubernetes ni una infraestructura más compleja.

Relación con los ASR

  • EC03 – Escalabilidad: permite aumentar capacidad durante campañas masivas.
  • EC04 – Escalabilidad: permite añadir consumidores para procesar las colas.
  • EC11 – Disponibilidad: permite continuar ante la falla de una zona y soportar los objetivos de RTO y RPO.

Ventajas

  • Recuperación automática.
  • Escalamiento según demanda.
  • Menor intervención manual.
  • Aprovecha servicios administrados.
  • Evita un punto único de falla dentro de la región.

Limitaciones

  • Aumenta el costo de infraestructura.
  • Requiere monitoreo y alarmas.
  • El escalamiento no es instantáneo.
  • Multi-AZ no protege frente a la caída de una región completa.
  • Los servicios deben diseñarse sin estado local.

Diagrama

flowchart TD
    Users["Web, Android y Socios"]
    Gateway["API Gateway"]
    ALB["Application Load Balancer"]
    Scaling["ECS Auto Scaling"]

    subgraph VPC["VPC Solventa"]
        subgraph AZA["Zona de disponibilidad A"]
            TaskA["ECS Fargate<br/>Réplica A"]
            DBPrimary[("Aurora PostgreSQL<br/>Instancia principal")]
        end

        subgraph AZB["Zona de disponibilidad B"]
            TaskB["ECS Fargate<br/>Réplica B"]
            DBReplica[("Aurora PostgreSQL<br/>Réplica Multi-AZ")]
        end
    end

    Monitoring["CloudWatch<br/>Métricas y health checks"]

    Users --> Gateway
    Gateway --> ALB

    ALB --> TaskA
    ALB --> TaskB

    TaskA --> DBPrimary
    TaskB --> DBPrimary

    DBPrimary -.->|Replicación| DBReplica
    DBReplica -.->|Failover| DBPrimary

    Monitoring --> Scaling
    Scaling -.->|Crear o eliminar réplicas| TaskA
    Scaling -.->|Crear o eliminar réplicas| TaskB
Loading
⚠️ **GitHub.com Fallback** ⚠️