Optimización de rendimiento: Cómo procesar 10,000 facturas por minuto

Concurrencia segura, lotes, caché y telemetría para cargas masivas.

← Volver al Blog Ver Documentación

Diseño de alto rendimiento

Para escalar, combina procesamiento en lote con colas, usa idempotencia y aplica backpressure en productores.

Lotes y colas

// Pseudo-código
const batch = await api.facturas.crearLote(items);
queue.add({ jobId: batch.jobId });
// Worker
const estado = await api.facturas.estadoLote(jobId);
if (estado.completado) almacenar(estado.resultado);

Concurrencia segura

import PQueue from 'p-queue';
const queue = new PQueue({ concurrency: 20 });
await Promise.all(pedidos.map(p => queue.add(() => crearFactura(p))));

Caché y deduplicación

  • Cachea destinatarios y certificados.
  • Evita duplicados con claves idempotentes.
  • Usa ETags y control de versiones.

Telemetría y alertas

// métrica básica
metrics.observe('latencia_factura_ms', diffMs);
metrics.count('errores_creacion_factura', 1, { motivo });

Checklist

  1. Usa colas y controla concurrencia.
  2. Activa idempotencia.
  3. Monitoriza y ajusta límites.

Patrones anti-fallo

  • Circuit breakers para dependencias externas.
  • Colas con reintentos y DLQ para mensajes problemáticos.
  • Persistencia idempotente con claves compuestas (pedido+fecha).
  • Backoff exponencial y jitter en reintentos.

Ejemplo de control de tasa

import PQueue from 'p-queue';
const queue = new PQueue({ concurrency: 25, interval: 1000, intervalCap: 250 });
await Promise.all(lotes.map(l => queue.add(() => api.facturas.crearLote(l))));

Observabilidad

  • Métricas por fase (validación, creación, presentación, webhook).
  • Correlación por facturaId y receptor.
  • Dashboards de latencia p50/p95/p99 y ratio de errores.

Enlaces internos recomendados