Escalado
Escala tus aplicaciones horizontalmente con cantidades manuales de réplicas o reglas de escalado automático basadas en el uso de recursos.
Escalado manual
La forma más sencilla de escalar es establecer un número fijo de réplicas. Cada réplica es un contenedor idéntico ejecutando tu aplicación. sh0 distribuye las solicitudes entrantes entre todas las réplicas saludables.
- Navega a tu aplicación en el panel de control.
- Abre Configuración → Escalado.
- Establece la Cantidad de réplicas al número deseado.
- Haz clic en Aplicar. sh0 creará o eliminará contenedores para alcanzar el número deseado.
Reglas de auto-escalado
El auto-escalado ajusta dinámicamente la cantidad de réplicas basándose en el uso de recursos en tiempo real. Cuando el uso excede un umbral, sh0 agrega réplicas. Cuando baja, se eliminan réplicas.
Umbral de CPU
Establece un porcentaje objetivo de utilización de CPU. Cuando el uso promedio de CPU en todas las réplicas excede este umbral durante un período sostenido (predeterminado: 60 segundos), sh0 agrega una nueva réplica.
| Parámetro | Predeterminado | Descripción |
|---|---|---|
cpu_threshold | 70% | Porcentaje de uso de CPU que activa el escalado |
scale_up_cooldown | 60s | Tiempo mínimo entre eventos de escalado |
scale_down_cooldown | 300s | Tiempo mínimo entre eventos de reducción |
Umbral de memoria
Similar a CPU, puedes establecer un umbral de utilización de memoria. Cuando el uso promedio de memoria excede el umbral, sh0 escala hacia arriba. Esto es especialmente útil para aplicaciones intensivas en memoria como servicios Node.js o Java.
Mín. y máx. de réplicas
El auto-escalado opera dentro de límites que tú defines:
- Mínimo de réplicas: La cantidad mínima de contenedores siempre en ejecución. Establece al menos 1 para alta disponibilidad, o 2 para despliegues sin tiempo de inactividad.
- Máximo de réplicas: El límite superior para el escalado. Esto evita que el escalado descontrolado consuma todos los recursos del servidor.
{
"min_replicas": 2,
"max_replicas": 10,
"cpu_threshold": 70,
"memory_threshold": 80,
"scale_up_cooldown_seconds": 60,
"scale_down_cooldown_seconds": 300
}Balanceo de carga entre réplicas
sh0 usa Caddy como su proxy inverso para distribuir el tráfico entre las réplicas. La estrategia de balanceo de carga es round-robin por defecto, asegurando una distribución uniforme de las solicitudes.
Comportamientos clave:
- Verificaciones de salud: Las réplicas no saludables se eliminan automáticamente del pool del balanceador de carga.
- Drenaje elegante: Al reducir, las conexiones existentes se drenan antes de que el contenedor se detenga.
- Afinidad de sesión: No habilitada por defecto. Si tu aplicación requiere sesiones persistentes, configúralo en los ajustes de la aplicación.
- Soporte WebSocket: Las conexiones WebSocket se enrutan correctamente y se mantienen entre réplicas.
Escalado vía API
Puedes administrar el escalado programáticamente a través de la API REST. Esto es útil para pipelines de CI/CD o automatización personalizada.
Establecer cantidad de réplicas:
curl -X PUT https://your-server:9000/api/apps/my-app/scaling \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"replicas": 4}'Configurar auto-escalado:
curl -X PUT https://your-server:9000/api/apps/my-app/scaling \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"auto_scaling": true,
"min_replicas": 2,
"max_replicas": 8,
"cpu_threshold": 75,
"memory_threshold": 85
}'Obtener estado actual de escalado:
curl https://your-server:9000/api/apps/my-app/scaling \
-H "Authorization: Bearer YOUR_TOKEN"Mejores prácticas
- Haz tu aplicación sin estado: Almacena sesiones en Redis o una base de datos, no en memoria. Las aplicaciones sin estado escalan sin esfuerzo.
- Establece límites de recursos: Define límites de CPU y memoria por contenedor para que una réplica no pueda privar a las demás.
- Usa verificaciones de salud: Configura un endpoint de verificación de salud para que sh0 pueda detectar y reemplazar réplicas no saludables automáticamente.
- Comienza con mín. réplicas = 2: Esto garantiza cero tiempo de inactividad durante los despliegues (patrón blue-green).
- Monitorea antes de escalar: Usa el panel de métricas para comprender tu uso base de recursos antes de establecer umbrales de auto-escalado.
- Prueba el comportamiento de reducción: Asegúrate de que tu aplicación maneje el apagado elegante (SIGTERM) correctamente para evitar solicitudes descartadas.