🧪 Problem-Driven Systems Lab

🛠️ Opciones de solución#

1. Separar readiness de liveness — el mínimo indispensable#

yaml
livenessProbe:   { httpGet: { path: /health } }   # ¿hay que reiniciarlo?
readinessProbe:  { httpGet: { path: /ready  } }   # ¿le mando tráfico?

Es la corrección más barata del caso y la que elimina los 503. No acelera nada: solo impide que el tráfico llegue antes de tiempo.

⚠️ Un livenessProbe que apunte a /ready es peor que no tenerlo: mata contenedores que solo estaban arrancando.

2. Pool tibio: escalar antes del pico#

Mantener capacidad de sobra (minReplicas por encima de lo estrictamente necesario), escalar por una métrica adelantada —profundidad de cola, RPS de entrada— en vez de CPU, o precalentar por agenda si el tráfico es predecible.

Cuesta dinero. Es un intercambio explícito de costo por latencia de escalado, y conviene decidirlo con el número a la vista.

3. Reducir el arranque en sí#

StackHerramientaDónde vive
☕ JavaAppCDS, -XX:TieredStopAtLevel=1, GraalVM native-imageFlags de JVM / toolchain aparte
🔵 .NETPublishReadyToRun, TieredPGO, PublishAotTres líneas del .csproj
🟢 Node--build-snapshot, SEA, menos dependenciasFuera del camino por defecto
🐍 PythonMenos import en el arranque, imports diferidosDiseño del código
🐘 PHPopcache, opcache.preload, pm.start_serversConfiguración, no código
🐹 GoNada que hacer: el binario ya está compilado
🦀 RustNada que hacer

4. Calentar explícitamente antes de anunciarse lista#

Ejercitar los caminos calientes durante el arranque —antes de que /ready diga que sí— y recién entonces anunciarse. Alarga el arranque a cambio de que la primera petición real llegue a un runtime ya acomodado.

Es la mitad que el pool tibio de este laboratorio hace en /warmup, y la que separa «la instancia está lista» de «el runtime está listo».

5. Aceptar el costo y dimensionar para el pico#

Perfectamente válido cuando el tráfico es estable y el ahorro del autoescalado es marginal. La trampa es llegar acá por omisión en vez de por decisión.


Caso 18 · Arranque en frío y retraso del autoescalado⬅️ README del caso · ⚖️ Comparativa de los 7 stacks

🗺️ Contexto · 🩺 Síntomas · 🔍 Diagnóstico · 🧠 Causas raíz · 🛠️ Opciones de solución · ⚖️ Trade-offs · 💼 Valor de negocio · 🚨 Postmortem

Ver esta carpeta en GitHub ↗