Patrón 7: Redundancia Multi‐AZ y Autoescalado - JuanHerreraP/Proyecto-MISO-Solventa-Grupo-11 GitHub Wiki
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.
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.
- 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.
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.
- 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.
- 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.
- 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.
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