Planificación de Capacidad — Pronóstico, Escalado y Optimización de Infraestructura
Guía práctica para la planificación de capacidad en infraestructura cloud y on-premise: pronóstico de demanda, pruebas de carga, estrategias de auto-escalado y evitando el sobreaprovisionamiento.
Nota para desarrolladores hispanohablantes: Esta guía incluye ejemplos y convenciones de nomenclatura adaptadas a equipos que trabajan en español. Cuando existen diferencias significativas en terminología técnica entre el inglés y el español, se indican explícitamente para facilitar la comunicación en equipos multiculturales.
Overview
La planificación de capacidad asegura que tu infraestructura pueda manejar la demanda actual y futura sin desperdiciar recursos. Cierra la brecha entre la extinción de incendios reactiva y el escalado proactivo, ayudando a los equipos a entregar servicios confiables mientras controlan costos.
Esta guía cubre el pronóstico de demanda, pruebas de carga, estrategias de escalado y decisiones de capacidad conscientes de costos para entornos cloud y on-premise.
When to Use
- Estás preparando un lanzamiento de producto, campaña de marketing o pico de tráfico estacional
- Tu servicio experimenta degradación de rendimiento recurrente durante horas pico
- Quieres reducir costos de infraestructura cloud sin impactar la confiabilidad
- Necesitas justificar presupuestos de infraestructura con proyecciones basadas en datos
- Estás migrando de on-premise a cloud y necesitas dimensionar correctamente los recursos
Core Concepts
| Concepto | Descripción |
|---|---|
| Capacidad Actual | Rendimiento máximo que tu sistema puede manejar con recursos existentes |
| Margen | Buffer sobre el pico de uso para absorber picos inesperados (típicamente 20-30%) |
| Punto de Saturación | Nivel de utilización de recursos donde el rendimiento se degrada (usualmente >70% CPU, >80% memoria) |
| Tiempo de Escalado | Tiempo requerido para aprovisionar y desplegar capacidad adicional |
| Pronóstico de Demanda | Carga futura proyectada basada en tendencias históricas y eventos de negocio |
Step-by-Step Capacity Planning Process
1. Medir la Línea Base Actual
Antes de planificar el crecimiento, entiende tu estado actual:
# Recopilar métricas durante un período representativo (2-4 semanas)
# Métricas clave: CPU, memoria, disco I/O, red, latencia de requests, tasa de errores
# Ejemplo: Consulta Prometheus para utilización de CPU
avg by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m])) * 100
Métricas a rastrear:
- Métricas de recursos: CPU, memoria, disco, red
- Métricas de aplicación: Requests por segundo, percentiles de latencia (p50, p95, p99), tasas de error
- Métricas de negocio: Usuarios activos, transacciones por minuto, crecimiento de volumen de datos
2. Identificar Cuellos de Botella
Encuentra el primer recurso que se saturará bajo carga:
# Ejemplo: Analizar qué recurso alcanza límites primero
from dataclasses import dataclass
@dataclass
class ResourceLimit:
name: str
current_usage: float
max_capacity: float
saturation_threshold: float
def headroom(self) -> float:
return (self.saturation_threshold - self.current_usage) / self.saturation_threshold * 100
# Evaluar margen para cada recurso
resources = [
ResourceLimit("CPU", 45, 100, 70),
ResourceLimit("Memory", 60, 100, 80),
ResourceLimit("Disk IOPS", 75, 100, 85),
ResourceLimit("Network", 30, 100, 70),
]
bottleneck = min(resources, key=lambda r: r.headroom())
print(f"Cuello de botella: {bottleneck.name} con {bottleneck.headroom():.1f}% de margen")
3. Pronosticar Demanda
Usa datos históricos más contexto de negocio para proyectar carga futura:
Técnicas:
- Extrapolación de tendencias: Extender curvas de crecimiento históricas
- Ajuste estacional: Considerar patrones semanales, mensuales o anuales
- Pronóstico basado en eventos: Factorizar eventos de tráfico conocidos (lanzamientos, campañas)
- Correlación de negocio: Vincular capacidad a métricas de negocio (nuevos clientes, ingresos)
# Ejemplo: Pronóstico de demanda con margen
peak_qps_current: 5000
weekly_growth_rate: 0.05 # 5% por semana
headroom_percent: 0.30 # 30% de buffer
# Pronóstico para 3 meses (13 semanas)
peak_qps_forecast: 5000 * (1.05 ** 13) ≈ 9440
required_capacity: 9440 * 1.30 ≈ 12272 QPS
4. Pruebas de Carga para Validar
Verifica tus suposiciones con pruebas de carga controladas:
# Ejemplo: Script de prueba de carga k6
# capacity-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export let options = {
stages: [
{ duration: '5m', target: 100 }, # Aumento gradual
{ duration: '10m', target: 100 }, # Estado estable
{ duration: '5m', target: 200 }, # Prueba de estrés
{ duration: '5m', target: 0 }, # Reducción gradual
],
thresholds: {
http_req_duration: ['p(95)<200'],
http_req_failed: ['rate<0.01'],
},
};
export default function() {
let res = http.get('https://api.example.com/health');
check(res, {
'status is 200': (r) => r.status === 200,
'response time < 200ms': (r) => r.timings.duration < 200,
});
sleep(1);
}
5. Elegir Estrategia de Escalado
| Estrategia | Cuándo Usar | Pros | Contras |
|---|---|---|---|
| Escalado vertical | Crecimiento predecible y estable; cargas de trabajo de base de datos | Simple, sin cambios de código | Límite duro, riesgo de downtime, caro |
| Escalado horizontal | Tráfico variable y con picos; servicios sin estado | Elástico, tolerante a fallos | Complejidad agregada, consistencia de datos |
| Auto-escalado | Demanda impredecible o cíclica | Eficiente en costos, sin intervención | Latencia de inicio en frío, complejidad de configuración |
| Capacidad reservada | Carga base predecible | Ahorros significativos | Menos flexible, compromiso anticipado |
6. Planificar el Margen
Mantén siempre capacidad de buffer para eventos inesperados:
- Margen mínimo: 20% sobre el pico esperado
- Servicios críticos: 30-40% de margen
- Entornos con restricciones de costos: 15% con triggers de escalado más rápidos
- Negocios estacionales: Planificar margen alrededor de picos estacionales conocidos
7. Documentar y Revisar
Crea un documento de plan de capacidad que incluya:
- Métricas de línea base y cuellos de botella actuales
- Pronóstico de demanda con suposiciones
- Estrategia de escalado y triggers
- Proyecciones de costos
- Calendario de revisión (mensual o trimestral)
Best Practices
- Empieza con datos, no con suposiciones. Recopila al menos 2 semanas de métricas de producción antes de pronosticar.
- Prueba a escala. Prueba de carga a 2-3x el pico esperado para entender modos de falla.
- Dimensiona continuamente. Revisa tipos de instancia y capacidad reservada trimestralmente.
- Correlaciona con eventos de negocio. Vincula capacidad a lanzamientos de producto, marketing y estacionalidad.
- Automatiza el monitoreo. Configura alertas cuando la utilización cruza umbrales de revisión (ej. 60% sostenido).
- Planifica para degradación. Define estrategias de degradación elegante cuando se excede la capacidad.
Common Mistakes
- Planificar para promedios en lugar de picos. La carga promedio oculta comportamiento de ráfagas.
- Ignorar el tiempo de escalado. Si toma 10 minutos escalar, planifica para el tráfico 10 minutos antes.
- Sobreaprovisionar “por si acaso.” El exceso de capacidad es dinero desperdiciado; usa auto-escalado para cargas variables.
- Olvidar dependencias posteriores. Escalar frontend sin escalar la base de datos crea nuevos cuellos de botella.
- No volver a probar después de cambios. Los cambios de arquitectura invalidan suposiciones de capacidad previas.
Variants
- Planificación de capacidad cloud-native: Usar auto-escalado administrado, instancias spot y serverless para cargas de trabajo elásticas.
- Planificación de capacidad on-premise: Enfocarse en ciclos de adquisición de hardware, densidad de virtualización y restricciones de energía/refrigeración.
- Planificación de capacidad de base de datos: Monitorear rendimiento de consultas, límites de conexión, crecimiento de almacenamiento y retraso de replicación.
FAQ
Q: ¿Qué tan lejos debo pronosticar la capacidad? Pronostica 3-6 meses para entornos cloud y 12-18 meses para adquisición de hardware on-premise.
Q: ¿Cuál es la diferencia entre planificación de capacidad y afinación de rendimiento? La planificación de capacidad determina cuántos recursos necesitas. La afinación de rendimiento hace más eficientes los recursos existentes. Haz ambas.
Q: ¿Cómo equilibro costo y confiabilidad? Usa auto-escalado para cargas variables, instancias reservadas para líneas base y mantén 20-30% de margen. Revisa mensualmente.
Q: ¿Debo planificar capacidad por servicio o globalmente? Planifica por servicio, luego agrega. Cada servicio tiene diferentes características y cuellos de botella de escalado.
Conclusion
La planificación de capacidad es una práctica continua, no un ejercicio de una sola vez. Mide, pronostica, prueba y revisa regularmente para mantener tu infraestructura alineada con el crecimiento del negocio mientras controlas costos.