BookinglyTech News
Infraestructura

CapacityLab: CLI Go que automatiza la detección de cuellos de botella y el dimensionado de infraestructuras

Un nuevo proyecto open‑source, escrito en Go, ofrece un flujo de trabajo completo desde la generación de carga hasta la recomendación de tier de nube, integrando métricas de contenedores y bases de datos en tiempo real.

2 min de lecturar/devops0 vistas

CapacityLab es una herramienta de línea de comandos, escrita en Go 1.22+, que convierte los resultados de pruebas de carga en decisiones de infraestructura concretas. Su objetivo es eliminar la intuición que normalmente sigue a los gráficos de latencia y RPS.

La herramienta divide el análisis en tres capas. Primero, OBSERVED METRICS recopila métricas de paso (VU, p50/p95, RPS y errores) junto con telemetría de cgroups de Docker (CPU y RAM) a cada 500 ms. En la segunda capa, INFERRED BOTTLENECK, un motor de saturación calcula la aceleración de latencia (ΔLatencia/ΔVUs) y detiene el ramping cuando la latencia entra en cola exponencial o rompe el SLA. El clasificador evalúa cgroups, conexiones activas de Postgres y memoria de Redis para identificar la limitación primaria.

La última capa, RECOMMENDED SIZING, aplica un factor de seguridad configurable (0.70 por defecto) para calcular una carga operativa segura y sugerir el tier de nube inicial.

Arquitectura y decisiones técnicas

  • Binario estático único sin dependencias externas.
  • Generador de carga propio: pool de hilos HTTP con keep‑alive y verificación TLS estricta.
  • Reservoir Sampling R para latencias, limitando a 50 000 muestras con bajo consumo de memoria (~400 KB).
  • Adaptador opcional k6 que transpila scripts a JS y ejecuta k6 en modo headless.
  • Soporte de variables dinámicas ({{uuid}}, {{random_int}}) y extracción de respuestas.
  • Gate de rendimiento en CI: --fail-on-regression para fallar si la capacidad sostenible cae >10 % o p95 degrada >10 %.
  • Reporte HTML offline con gráficos Canvas.

Para probarlo sin backend, el repositorio incluye un microservicio de ejemplo con 0.5 vCPU y 256 MB. Basta con:

git clone https://github.com/Abuaslamtech/capacitylab.git
cd capacitylab/examples/quickstart

docker compose up -d --build capacitylab

docker exec -it capacitylab run --open

La comunidad es invitada a aportar sobre la heurística de detección de punto de inflexión de saturación en tráfico intermitente y a sugerir stacks adicionales (Node, FastAPI, etc.) para futuros templates de sandbox.

La propuesta es clara: convertir métricas crudas en recomendaciones operativas con una única binaria y sin dependencias externas, lo que facilita su integración en pipelines de CI/CD y su uso en entornos de producción.

El impacto potencial es significativo. Administradores y arquitectos pueden pasar de la interpretación manual de curvas de latencia a un proceso reproducible que incluye diagnóstico de cuellos de botella y cálculo de capacidad con margen de seguridad. Además, la compatibilidad con k6 y la posibilidad de incorporar variables dinámicas hacen que el CLI se adapte a una variedad de cargas.

El código está disponible en GitHub y sigue una licencia open‑source que permite su uso y modificación sin restricciones.