Plan de Benchmarking

ℹ️ Nota: Este documento define qué medir, cuándo medir, y qué señales indican la necesidad de escalar. No se están ejecutando cargas destructivas ahora — este es un plan de medición.

Webhook Ingestion

CampoValor
MétricaWebhooks/segundo por canal
Objetivo1,000 webhooks/segundo sostenido
MediciónWebhooks batch de WhatsApp, eventos de páginas de Facebook
Herramientak6 o vegeta para load testing
CuándoAntes del lanzamiento de V1

Metodología:

  • Simular carga de webhooks de múltiples canales simultáneamente
  • Medir latencia de procesamiento desde receipt hasta persistencia
  • Verificar no pérdida de webhooks bajo carga
  • Monitorear uso de CPU, memoria, y conexiones de base de datos

Message Throughput

CampoValor
MétricaMensajes/segundo (entrantes + salientes)
Objetivo500 mensajes/segundo sostenido
MediciónLatencia end-to-end desde receipt del webhook hasta delivery al agente
Herramientak6 con scripts personalizados
CuándoAntes del lanzamiento de V1

Metodología:

  • Medir latencia en cada punto del pipeline: webhook → procesamiento → WebSocket → agente
  • Verificar orden de mensajes bajo carga concurrente
  • Monitorear degradación de latencia con carga creciente
  • Establecer baseline de latencia en condiciones normales

Concurrent Conversations

CampoValor
MétricaConversaciones activas por tenant, total
Objetivo10,000 conversaciones concurrentes
MediciónUso de memoria, conexiones de base de datos, conexiones WebSocket
Herramientak6 + monitoreo de infraestructura
CuándoAntes del lanzamiento de V1

Metodología:

  • Simular conversaciones activas con mensajes intermitentes
  • Medir escalabilidad de memoria por conversación activa
  • Verificar pool de conexiones de BD bajo carga
  • Monitorear degradación por número de conexiones WebSocket

WebSocket Connections

CampoValor
MétricaConexiones WebSocket concurrentes
Objetivo5,000 conexiones concurrentes por nodo
MediciónMemoria por conexión, latencia de delivery de mensajes
HerramientaScripts personalizados con connections masivas
CuándoAntes del lanzamiento de MVP

Metodología:

  • Establecer conexiones masivas y mantenerlas activas
  • Medir consumo de memoria por conexión
  • Verificar latencia de broadcast de mensajes
  • Probar reconexión automática y manejo de desconexiones

Concurrent Agents

CampoValor
MétricaAgentes logueados simultáneamente
Objetivo500 agentes concurrentes
MediciónFrecuencia de actualización de estado, precisión de presencia
HerramientaSimulador de agentes
CuándoAntes del lanzamiento de V1

Metodología:

  • Simular agentes con cambios de estado frecuentes
  • Medir precisión de indicadores de presencia
  • Verificar latencia de actualización de estado
  • Probar comportamiento ante desconexiones masivas

Routing Latency

CampoValor
MétricaTiempo desde receipt del mensaje hasta asignación al agente
Objetivo< 100ms p95
MediciónTimestamps de eventos, tracing end-to-end
HerramientaInstrumentación de código +istributed tracing
CuándoAntes del lanzamiento de V1

Metodología:

  • Instrumentar pipeline con timestamps en cada paso
  • Medir latencia del algoritmo de enrutamiento
  • Verificar impacto de reglas complejas de enrutamiento
  • Establecer baseline con diferentes volúmenes de carga

Database Growth

CampoValor
MétricaGB/mes, filas/día
ObjetivoModelo de crecimiento predecible
MediciónConversaciones, mensajes, contactos, grabaciones
HerramientaMonitoreo de PostgreSQL
CuándoMensual después del lanzamiento

Metodología:

  • Establecer baseline de crecimiento por tipo de dato
  • Proyectar crecimiento a 6, 12, 24 meses
  • Identificar retención de datos que impacta rendimiento
  • Planificar particionamiento cuando sea necesario

Search Performance

CampoValor
MétricaLatencia de queries de búsqueda
Objetivo< 200ms p95 para búsqueda de contactos
MediciónBúsqueda full-text, queries con filtros
HerramientaQueries de prueba con datos representativos
CuándoAntes del lanzamiento de V1

Metodología:

  • Poblar base de datos con 100K+ contactos de prueba
  • Medir latencia de diferentes tipos de búsqueda
  • Verificar impacto de índices en rendimiento
  • Probar búsqueda con acentos y caracteres especiales (español/portugués)

Media Processing

CampoValor
MétricaTiempo de procesamiento de imagen/video/audio
Objetivo< 2 segundos para optimización de imagen
MediciónTiempo desde upload hasta storage disponible
HerramientaTests de procesamiento de medios
CuándoAntes del lanzamiento de V1

Metodología:

  • Procesar diferentes formatos y tamaños de archivo
  • Medir tiempo de conversión y optimización
  • Verificar calidad de salida
  • Monitorear uso de CPU durante procesamiento

Campaign Throughput

CampoValor
MétricaContactos procesados/hora
Objetivo10,000 contactos/hora por campaña
MediciónPacing del dialer, intentos de llamada
HerramientaSimulación de campaña con datos de prueba
CuándoAntes del lanzamiento de V2

Metodología:

  • Configurar campaña con 10K+ contactos
  • Medir velocidad de procesamiento real
  • Verificar pacing del dialer predictivo
  • Monitorear tasa de答(answer) vs. no answer

Reporting

CampoValor
MétricaTiempo de generación de reportes
Objetivo< 5 segundos para reportes estándar
MediciónTiempo de ejecución de queries, agregación
HerramientaQueries de reportes con datos representativos
CuándoAntes del lanzamiento de V1

Metodología:

  • Generar reportes con diferentes volúmenes de datos
  • Medir tiempo de query y procesamiento
  • Identificar queries lentas para optimización
  • Verificar impacto de indexes en rendimiento

Concurrent Calls

CampoValor
MétricaLlamadas de voz simultáneas
Objetivo200 llamadas concurrentes por nodo Asterisk
MediciónConteo de canales Asterisk, streams RTP
HerramientaMonitoreo de Asterisk + llamadas simuladas
CuándoAntes del lanzamiento de V1

Metodología:

  • Establecer llamadas concurrentes de prueba
  • Medir uso de recursos de Asterisk
  • Verificar calidad de audio bajo carga
  • Monitorear latencia de llamadas

Dialer Throughput

CampoValor
MétricaIntentos de llamada/segundo
Objetivo20 llamadas/segundo (configurable)
MediciónTasa de éxito de ARI originate, precisión de pacing
HerramientaSimulación de dialer con datos de prueba
CuándoAntes del lanzamiento de V2

Metodología:

  • Configurar dialer con diferentes rates objetivo
  • Medir precisión del pacing real vs. configurado
  • Verificar manejo de contestación y no contestación
  • Monitorear comportamiento ante variaciones de carga

Señales de Escalamiento

SeñalUmbralAcción
CPU > 70% sostenidoCríticoEscalar horizontalmente
Memoria > 80%CríticoInvestigar fugas o escalar
Conexiones DB > 80% del poolAltoAgregar read replicas
Conexiones WebSocket > 80% capacidadAltoAgregar nodos
Profundidad de cola de mensajes crecienteMedioAgregar workers
Tiempo de respuesta > SLACríticoInvestigar y escalar

Evitación de Optimización Prematura

�️ Advertencia: NO optimizar para 1M de conversaciones cuando se están ejecutando 10K.

EvitarCuándo optimizar
Implementar cacheCuando el profiling muestre necesidad
Shardear la base de datosCuando se alcancen los límites del nodo único
Agregar message brokerCuando se necesite comunicación entre procesos
Optimizar queriesCuando las métricas muestren lentitud
Agregar CDNCuando el tráfico de assets lo justifique

Principios de medición

  1. Medir primero, optimizar después: Nunca optimizar sin datos
  2. Baseline antes de cambios: Establecer métricas antes de implementar optimizaciones
  3. Monitoreo continuo: Las métricas deben estar disponibles en producción
  4. Alertas configuradas: Umbrales claros para acciones de escalamiento
  5. Documentar resultados: Cada benchmark debe ser documentado y repetible

Herramientas Recomendadas

HerramientaUsoLicencia
k6Load testing HTTP/WebSocketOpen source
vegetaHTTP load testingOpen source
pgBadgerAnálisis de logs PostgreSQLOpen source
GrafanaDashboard de métricasOpen source
PrometheusRecolección de métricasOpen source
JaegerDistributed tracingOpen source
Asterisk CLIMonitoreo de llamadasIncluido con Asterisk

💡 Consejo: Todas las herramientas de monitoreo y testing deben estar configuradas antes del primer benchmark. El primer benchmark se ejecuta con datos mínimos para establecer baseline, no con carga máxima.