Saltar al contenido
EdgeServers
Blog

Laravel Horizon en producción — dimensionar workers, sobrevivir a Redis, y la estrategia de retry

6 de mayo de 2026 · 1 min de lectura · por Sudhanshu K.

Horizon hace las colas de Laravel legibles. El dashboard es genial, el modelo de supervisor es de verdad útil, y la historia de failover es correcta. Lo que no hace es decidir tu dimensionamiento de workers, tu estrategia de aislamiento de colas, o tu política de retry — esos siguen siendo tus problemas, y los defaults son conservadores de maneras que ocultan problemas reales en producción.

Esta es la config de Horizon que entregamos en cada instalación Laravel gestionada que hace trabajo en background relevante.

Una config de supervisor en producción

'environments' => [
    'production' => [
        'supervisor-default' => [
            'connection' => 'redis',
            'queue' => ['critical', 'default'],
            'balance' => 'auto',
            'minProcesses' => 4,
            'maxProcesses' => 20,
            'balanceMaxShift' => 2,
            'balanceCooldown' => 3,
            'tries' => 5,
            'timeout' => 60,
        ],
        'supervisor-long' => [
            'connection' => 'redis',
            'queue' => ['long-running'],
            'balance' => 'simple',
            'maxProcesses' => 4,
            'timeout' => 600,
        ],
    ],
],

Dos supervisors: uno para jobs cortos de alta prioridad (balance auto, más workers), uno para jobs batch long-running (workers fijos, timeout más largo, sin balanceo). Poner ambos en el mismo supervisor con el mismo timeout es la mala config de Horizon más común que vemos.

El artículo completo cubre:

  • Aislamiento de colas — por qué «default» no debería ser la única cola
  • balance: auto vs balance: simple vs balance: false
  • Persistencia de Redis (AOF every-second) y qué pasa cuando Redis reinicia
  • El helper retry-backoff y la idempotencia en handlers de webhooks entrantes
  • Detección de fuga de memoria — --memory=128 y el patrón de reciclado de worker
  • Higiene del dashboard de failed jobs y las alertas que cableamos sobre la tabla failed_jobs

Entregamos esta config de Horizon en cada despliegue Laravel gestionado.

Artículo completo disponible

Leer el artículo completo