Introducción: cuándo y por qué escalar
Escalar no es un fin: es una respuesta a indicadores concretos. Prioriza disponibilidad, rendimiento, coste y capacidad futura. Señales claras: latencias crecientes (p95/p99), aumento de errores 5xx, colas largas, saturación de CPU/RAM y lentitud en la base de datos. Prioriza por impacto en el negocio, coste por usuario y complejidad técnica; aplica escalamiento incremental y valida cada cambio con pruebas.
1) Escalado vertical vs horizontal
Vertical: subir CPU/RAM de la instancia. Horizontal: añadir réplicas. Vertical es rápido; horizontal ofrece resiliencia y capacidad.
- Cuándo: vertical para cuellos puntuales en single-node; horizontal para cargas sostenidas y HA.
- Pasos: identificar stateful/stateless, transformar a stateless, clonar instancias, configurar autoscaling groups.
- Comandos: aws autoscaling set-desired-capacity, gcloud compute instances set-machine-type.
2) Balanceo de carga y clustering
Distribuye tráfico, gestiona health checks y evita downtime.
- Elegir L4 vs L7, configurar health checks y SSL termination.
- Evitar sticky sessions salvo necesidad.
- Ejemplos: Nginx/HAProxy, AWS ALB con target groups, Ingress en Kubernetes.
3) Caching: CDN + Redis/Memcached
Capas de cache reducen latencia y carga de origen. Usa CDN para assets y Redis/Memcached para sesiones y consultas frecuentes.
- Configura Cache-Control, TTL y estrategias de invalidation.
- Comando básico: redis-cli SET key value; GET key.
- Métricas clave: hit ratio, origin requests, latency de cache.
4) Particionado y replicación de bases de datos
Replica para lecturas y HA; shardear para escala de escrituras.
- Habilita réplicas de lectura, monitoriza lag (replication lag).
- Herramientas: ProxySQL, pgpool; migraciones: plan de routing y backfill.
5) Colas y procesamiento asíncrono
Desacopla tareas largas usando SQS, RabbitMQ o Kafka. Define idempotencia y DLQs.
- Métricas: queue depth, processing time, consumer lag.
- Snippet de ejemplo: push a SQS con AWS SDK o publish en RabbitMQ.
6) Microservicios y modularización
Divide según bounded contexts: APIs independientes, API Gateway, CI/CD por servicio y contract testing.
7) Contenedores y orquestación
Docker + Kubernetes (Deployment, Service, HPA) ofrecen reproducibilidad y autoscaling. Cuida manifests, Helm y RBAC.
8) Serverless y funciones
Útil para picos impredecibles y cargas event-driven. Mitiga cold starts y controla límites de ejecución.
9) Optimización front-end y CDN
Critical CSS, lazy loading, code-splitting y formatos WebP/AVIF reducen TTFB y mejoran LCP. Usa PoPs regionales para España/LatAm.
10) Observabilidad, autoscaling y pruebas de carga
Instrumenta tracing (OpenTelemetry), métricas (Prometheus) y logs centralizados (EFK). Define SLO/SLI y ejecuta pruebas con k6/Locust.
Regla práctica: empieza por caching, balanceo y observabilidad; solo después toca cambiar arquitectura.
Comparativa de proveedores
| Proveedor | Puntos fuertes | Recomendado para |
|---|---|---|
| AWS | Madurez, servicios gestionados | Empresas con necesidades complejas |
| GCP | Machine learning, networking | Apps data-driven |
| Azure | Integración MS | Entornos empresariales |
| Cloudflare/Bunny | Edge, CDN económicos | Latencia regional y coste |
Recursos prácticos y comandos
- kubectl apply -f deployment.yaml
- aws autoscaling set-desired-capacity –auto-scaling-group-name NAME –desired-capacity N
- gcloud compute instances set-machine-type INSTANCE –machine-type TYPE
- redis-cli SET mykey «value» && GET mykey
Checklist y CTA
Checklist: pruebas de carga, SLOs definidos, backup & rollback, monitorización y runbooks. Ofrece auditoría gratuita, calculadora de costes y plantilla de migración para equipos que necesiten empezar.
Veredicto final
Prioriza soluciones de menor fricción: caching, balanceo y observabilidad. Usa colas y réplicas para aliviar la DB; evalúa contenedores o serverless según equipo y coste. Planifica pruebas de carga y despliegues canary con rollback preparado antes de cualquier cambio mayor.
💡 Lectura recomendada: 10 formas de mejorar una aplicación web
FAQs
- ¿Cuándo optar por microservicios? Cuando el monolito frena despliegues o hay dominios claramente separados.
- ¿Serverless o colas para picos? Serverless para endpoints eventuales; colas si necesitas control y batching.
- Redis vs Memcached? Redis para estructuras avanzadas y persistencia; Memcached para cache simple y baja latencia.
- ¿Cuándo shardear DB? Cuando la escritura y el tamaño superan lo tolerable; planifica routing y migración por lotes.
- Métricas SLO/SLI imprescindibles: p95/p99 latency, error rate, availability y error budget.
- Autoscaling seguro en K8s: combinar HPA con SLO-based alerts y limit ranges.
- CDN para España/LatAm: Cloudflare y BunnyCDN ofrecen buena cobertura; evaluar PoPs locales.
- Migración blue/green o canary: definir rollback rápido, monitoreo y feature flags.
