🟢 Caso 11 — Reportes pesados que bloquean la operacion#
Implementacion operativa del caso 11 con paridad al stack PHP. Medicion del impacto sobre la operacion via
perf_hooks.monitorEventLoopDelay()— la primitiva nativa de Node para detectar bloqueos del loop principal.
⬅️ Caso 11 · ⚖️ Comparativa de los 7 stacks · 🟢 Perfil de Node.js · 🧬 Todos los perfiles
Que resuelve#
Compara dos formas de correr un reporte pesado:
report-legacy: ejecuta el volcado en el path critico, bloqueando el event loop con CPU sincronico. La operacion concurrente (/order-write) lo paga:event_loop_lag_ms_p99sube y la latencia de escritura se degrada.report-isolated: programa el reporte fuera del path critico viasetImmediatey lo manda a una "cola" virtual con replica/snapshot, dejando el primary libre.
Escenarios: end_of_month, finance_audit, ad_hoc_export, mixed_peak.
Primitivas Node-especificas#
monitorEventLoopDelay({ resolution: 10 }): histograma del lag del event loop, expuesto comop50/p99/maxen/metricsy Prometheus. Mide el impacto real, no estimado.- En
report-legacy, unwhile (Date.now() < end) {}simula CPU pesado bloqueante — equivalente a un long-running query sin yield. El histograma lo muestra crudo. - En
report-isolated,await new Promise((r) => setImmediate(r))cede el control al event loop antes de actualizar la cola, manteniendo/order-writeresponsivo.
Arranque#
docker compose -f compose.yml up -d --buildPuerto local: 8211 (modo aislado, ver opciones abajo).
Como consumir (dos opciones)#
Hub Node.js (recomendado, 8300 en compose.nodejs.yml): este caso queda servido en http://localhost:8300/11/... junto a los otros 11 casos.
Modo aislado (8211 en este compose.yml): levanta solo este caso, util cuando la medicion necesita procesar limpio (sin otros casos compartiendo runtime).
Endpoints#
curl http://localhost:8300/11/
curl http://localhost:8300/11/health
curl "http://localhost:8300/11/report-legacy?scenario=end_of_month&rows=600000"
curl "http://localhost:8300/11/report-isolated?scenario=end_of_month&rows=600000"
curl "http://localhost:8300/11/order-write?orders=25"
curl "http://localhost:8300/11/activity?limit=10"
curl http://localhost:8300/11/diagnostics/summary
curl http://localhost:8300/11/metrics
curl http://localhost:8300/11/metrics-prometheus
curl http://localhost:8300/11/reset-labQue observar#
- Tras correr
report-legacyrepetidamente,event_loop_lag_ms_p99yevent_loop_lag_ms_maxsuben drasticamente; /order-writeconcurrente registrawrite_latency_msmas alto durante la presion legacy;report-isolatedmantieneevent_loop_lag_ms_p99cercano al baseline y libera al primary;- bajo
mixed_peakconrowsalto, legacy puede llegar apressure_level: criticaly devolver 503 — el sistema se autoprotege.