Arquitectura de Cloud e Infraestructura
Dónde y cómo se ejecuta el sistema: compute (máquinas virtuales, contenedores, orquestación, serverless), networking, regiones y zonas de disponibilidad, autoscaling, IAM, CI/CD, estrategias de deployment, Infrastructure as Code y disaster recovery.
La arquitectura de Cloud responde una pregunta:
¿Dónde y cómo se ejecuta el sistema y cómo se opera a escala?
Una arquitectura típica:
flowchart TD
I["Internet"] --> D["DNS / CDN"] --> LB["Load Balancer"] --> App["Application"]
App --> DB[("Database")]
App --> Ca[("Cache")]
App --> MB["Message Broker"]
App --> OS[("Object Storage")]Cloud no equivale a “usar AWS”. Es el diseño de compute, networking, almacenamiento, escalabilidad, despliegue, seguridad, disponibilidad, recuperación ante desastres, operaciones y costos.
Compute
Las opciones principales son VM, Contenedores, Orquestación y Serverless.
VM
Más control sobre el entorno. Trade-off: más control + mayor carga operativa.
Contenedores
Empaquetan la aplicación, el runtime y las dependencias. Tecnología habitual: Docker.
Orquestación
Kubernetes aporta mecanismos para scheduling, service discovery, health checks, rolling deployment, scaling y gestión del estado deseado. Kubernetes no es una arquitectura por sí mismo: es una plataforma para operar determinadas arquitecturas.
Serverless
Ejemplos: AWS Lambda, Azure Functions, Google Cloud Functions.
Ventajas: infraestructura gestionada, escalado elástico y pago por uso. Trade-offs: límites de ejecución, cold starts en determinados escenarios, observabilidad/debugging y vendor lock-in.
Networking
Una arquitectura cloud habitual separa una zona pública de una privada:
flowchart TD
subgraph Public["Public"]
CDN["CDN"]
LB["Load Balancer"]
GW["API Gateway"]
end
subgraph Private["Private"]
App["Application"]
DB[("Database")]
Ca[("Cache")]
MB["Message Broker"]
end
GW --> AppDNS
Resuelve nombres:
flowchart LR N["api.example.com"] --> LB["Load Balancer"]
CDN
Acerca el contenido a los usuarios. Es especialmente útil para recursos estáticos, imágenes, videos y respuestas que pueden almacenarse en caché.
Load Balancer
Distribuye tráfico y puede realizar health checks:
flowchart TD LB["Load Balancer"] --> A1["App"] LB --> A2["App"] LB --> A3["App"]
API Gateway
Puede centralizar autenticación, rate limiting, routing, políticas de requests y observabilidad. Pero no debería convertirse en el lugar donde vive toda la lógica de negocio.
Regiones / Zonas de disponibilidad
Una región contiene múltiples zonas de disponibilidad:
flowchart TD R["Region"] --> A["AZ A"] R --> B["AZ B"] R --> C["AZ C"]
Podemos distribuir instancias de la aplicación entre las tres AZs para reducir el impacto de la caída de una AZ.
Multirregión
flowchart LR RA["Region A"] <--> RB["Region B"]
Puede mejorar la resiliencia frente a fallos regionales, pero introduce replicación, consistencia, routing, failover, residencia de datos, costos y complejidad operativa. No debería utilizarse solamente porque “más regiones es más robusto”.
Almacenamiento
Cloud ofrece múltiples tipos: bases de datos relacionales, bases de datos NoSQL, almacenamiento de objetos, almacenamiento de bloques, almacenamiento de archivos y caché. En AWS, por ejemplo: RDS/Aurora, DynamoDB, S3, EBS, ElastiCache. El servicio concreto es secundario respecto del workload.
Autoscaling
No siempre hay que escalar por CPU. Podemos hacerlo según CPU, memoria, requests/sec, latencia, profundidad de la cola o métricas personalizadas. Para un worker que procesa pagos asíncronos:
flowchart LR Q["Queue depth"] --> S["Scale workers"]
puede ser mucho mejor indicador que CPU.
IAM, Secrets y Cifrado
La arquitectura de Cloud debe contemplar identidad, control de acceso, secrets, cifrado, gestión de claves y auditoría. Una regla general:
Principio de mínimo privilegio
Un servicio debería tener solamente los permisos que necesita.
CI/CD
flowchart TD Dev["Developer"] --> Git["Git"] --> CI["CI"] CI --> B["Build"] CI --> T["Test"] CI --> S["Security checks"] CI --> Art["Artifact"] --> CD["CD"] --> Prod["Production"]
Estrategias de Deployment
Rolling: actualiza las instancias progresivamente.
Blue/Green: Blue es la versión actual y Green la nueva versión; se redirige el tráfico cuando Green está validada.
Canary: se expone la versión 2 a un porcentaje pequeño del tráfico (por ejemplo, 95% / 5%), se monitorean errores, latencia y métricas de negocio, y se aumenta progresivamente el porcentaje.
Infrastructure as Code
Herramientas: Terraform, OpenTofu, CloudFormation, Pulumi. La infraestructura pasa a ser código:
flowchart LR C["Code"] --> V["Version Control"] --> R["Review"] --> CD["CI/CD"] --> I["Infrastructure"]
Esto aporta reproducibilidad, facilidad de revisión, versionado y automatización.
Recuperación ante desastres
Dos conceptos fundamentales:
| Concepto | Significa | Ejemplo |
|---|---|---|
| RPO — Recovery Point Objective | Cuántos datos estamos dispuestos a perder | 5 minutos |
| RTO — Recovery Time Objective | Cuánto podemos tardar en recuperar el servicio | 30 minutos |
Estos objetivos condicionan los backups, la replicación, el failover, la infraestructura de respaldo y los procedimientos de recuperación.
Referencia
- AWS Well-Architected Framework — agrupa estos aspectos en seis pilares: excelencia operativa, seguridad, fiabilidad, eficiencia del rendimiento, optimización de costos y sostenibilidad.
