La respuesta corta suele ser ambos. Laravel Horizon aporta configuración de colas, balanceo, métricas, visibilidad de jobs fallidos y controles operativos para colas Redis. Supervisor es un monitor general de procesos Linux que inicia un comando, lo reinicia después de un fallo y lo levanta durante el arranque. Elegir entre ellos como si hicieran lo mismo produce sistemas frágiles.
Qué controla Laravel Horizon
Horizon ejecuta workers de Laravel con configuración consciente de la aplicación. Permite separar colas, limitar procesos, elegir estrategias de balanceo, definir timeouts y ver throughput o fallos. Requiere Redis y su panel debe protegerse con autenticación y autorización. Por sí solo no garantiza que php artisan horizon vuelva después de reiniciar el servidor o de un fallo fatal.
Qué controla Supervisor
Supervisor mantiene un comando de larga duración a nivel del sistema operativo. Puede iniciar Horizon o procesos normales de queue:work, capturar stdout y stderr, fijar el directorio de trabajo y usar un usuario restringido. No entiende jobs de Laravel, edad de cola, tags, balanceo ni la semántica de jobs fallidos.
Arquitectura recomendada en producción
Para colas Redis, usa Horizon como gestor de carga y deja que Supervisor —o systemd, Kubernetes o el equivalente de tu plataforma— mantenga vivo el proceso maestro. Durante un despliegue, coloca la aplicación en el estado seguro necesario, instala código y dependencias, ejecuta migraciones compatibles, reconstruye cachés y lanza php artisan horizon:terminate. El supervisor reiniciará Horizon y los workers cargarán la nueva versión.
Cuándo basta Supervisor
Usa Supervisor con queue:work si la aplicación utiliza un driver distinto de Redis, la carga es pequeña o no necesitas el panel y balanceo de Horizon. Define programas diferentes para colas y perfiles de recursos realmente distintos. Mantén el timeout del worker por debajo del retry-after para evitar procesar dos veces un job lento.
Errores comunes
- ejecutar Horizon manualmente dentro de una sesión SSH
- usar Horizon con un backend de colas no compatible
- exponer el dashboard públicamente
- configurar reintentos ilimitados en jobs no idempotentes
- desplegar sin reiniciar workers persistentes
- mezclar trabajos pesados y urgentes en una cola
- dejar crecer logs sin rotación
- ejecutar workers como root o con secretos excesivos
- interpretar un proceso activo como prueba de colas sanas
Checklist práctico
- confirma el backend y las garantías de entrega
- haz idempotentes los jobs importantes
- coordina timeout, retry-after, tries y backoff
- separa colas por carga y prioridad
- limita memoria y cantidad de procesos
- usa usuarios y accesos de mínimo privilegio
- protege la autorización de Horizon
- rota logs y monitoriza espacio en disco
- alerta por edad de cola, fallos, saturación y bucles de reinicio
- prueba despliegues graduales y reinicios del servidor
Observabilidad y estabilidad
Mide edad del job más antiguo, throughput, porcentaje de fallos, percentiles de duración, saturación y excepciones repetidas. Mantén IDs de correlación entre petición, job y servicio externo, sin guardar secretos ni datos personales innecesarios. Revisa cómo usar Laravel queues en producción y el patrón Laravel, Redis y queues para procesos pesados.
Cuándo contratar a una persona técnica
Contrata a un especialista Laravel o de infraestructura cuando aparecen jobs duplicados, los despliegues pierden trabajo, la latencia no tiene explicación, Horizon agota recursos o nadie es responsable de la recuperación. Una buena revisión conecta semántica de aplicación, capacidad de Redis, supervisión de procesos y despliegue, en vez de cambiar una opción a ciegas.
Conclusión
Usa Horizon para gestionar colas Redis con contexto Laravel y un supervisor de procesos para la resiliencia del sistema operativo. Si tus colas son lentas o inestables, revisa mis servicios de Laravel e infraestructura o contacta conmigo para una revisión de producción.