Escalar filas com Laravel Horizon e Redis exige separar prioridade, concorrência e falha antes de aumentar worker.
A disputa entre jobs em um SaaS Laravel aparece quando tarefas diferentes dividem o mesmo worker sem prioridade clara. Um relatório pesado atrasa e-mail transacional, uma integração externa segura importações, um webhook crítico fica esperando atrás de tarefa que poderia rodar depois.
Esse cenário pede leitura antes de capacidade. Antes de aumentar processo, servidor ou Redis, a fila precisa mostrar o que é crítico, o que consome tempo, o que falha e o que pode esperar.
Aqui na Promovaweb eu gosto de olhar Laravel Horizon como uma camada de coordenação para esse momento. Ele não transforma desenho fraco em arquitetura boa, mas ajuda o responsável técnico a enxergar workers, filas, falhas e prioridades com mais precisão.
Direto ao ponto
Para escalar filas com Laravel Horizon e Redis, separe filas por criticidade, configure supervisors por ambiente, acompanhe runtime e throughput, revise retries, ajuste minProcesses e maxProcesses com critério e trate Redis como dependência importante do SaaS. Escala boa começa por prioridade clara.
Como escalar filas com Laravel Horizon e Redis
Horizon exige Redis como backend de filas e usa configuração em config/horizon.php. A documentação oficial do Laravel Horizon descreve supervisors, worker processes e estratégias de balanceamento como auto, simple e false.
Esse conjunto é útil porque escala de fila não deveria ser apenas aumentar workers. Às vezes, o problema é uma fila crítica misturada com tarefa pesada. Às vezes, é retry exagerado. Às vezes, é job longo demais para o timeout definido. Às vezes, Redis está assumindo uma carga que o projeto ainda não sabe observar.
Escalar com Horizon começa por separar o que merece prioridade. E-mail de confirmação, webhook de pagamento e atualização de status podem ter peso diferente de relatório pesado, exportação de CSV ou rotina de limpeza.
Eu colocaria esse desenho antes de qualquer ajuste de número. Sem prioridade clara, maxProcesses maior só permite que a confusão rode com mais capacidade.
Uma separação inicial pode seguir esta leitura:
| Tipo de fila | Exemplo comum | Critério de escala |
|---|---|---|
| Crítica e curta | E-mail transacional, webhook de pagamento, atualização de status | Prioridade alta, runtime baixo e resposta previsível. |
| Pesada e tolerante a espera | Relatório, exportação, importação de planilha | Worker separado para evitar disputa com jobs sensíveis. |
| Externa e instável | API de CRM, ERP, gateway ou serviço de terceiros | Retry, backoff e limite de concorrência antes de ampliar processos. |
| Baixa prioridade | Limpeza, reindexação, rotina administrativa | Execução controlada para não competir com fluxo do usuário. |
Redis ajuda, mas cobra desenho
Redis é uma ótima peça para fila quando o projeto precisa processar jobs de forma assíncrona, mas ele não elimina escolha técnica. O post sobre quando usar Redis para reduzir custo de nuvem no SaaS já defende essa leitura: Redis precisa entrar com validade, função e custo de manutenção.
Com Horizon, Redis vira parte central da execução assíncrona. Isso significa que fila, worker, retry e falha precisam entrar no desenho do SaaS e no deploy.
Se Redis cai, os jobs param. Se a fila cresce, o usuário sente atraso. Se o job falha em loop, o custo técnico sobe. Se workers competem por tarefas sem prioridade, uma parte crítica pode esperar por outra de menor impacto.
Escala boa reconhece essas dependências antes de prometer que o SaaS aguenta volume maior.
Supervisors são grupos de responsabilidade
Na prática, supervisor em Horizon pode ser lido como um grupo de workers com configuração própria. Ele pode processar uma ou mais filas e usar uma estratégia de balanceamento.
Isso abre uma decisão útil: separar grupos de trabalho por criticidade. Um supervisor pode cuidar de notificações e webhooks. Outro pode cuidar de relatórios e importações. Outro pode processar rotinas menos urgentes.
Essa divisão ajuda porque jobs diferentes têm comportamento diferente. Um job de e-mail transacional costuma precisar de resposta previsível. Um relatório pesado pode aceitar espera maior. Uma integração com API externa pode precisar de retry e backoff bem pensados.
Eu gosto de pensar em supervisors como registro técnico de prioridade. Cada grupo precisa dizer o que processa, qual risco aceita, qual tempo de espera é tolerável e quem revisa quando falha.
Balanceamento automático precisa de limite
Horizon oferece estratégia auto, que ajusta workers conforme a carga atual de cada fila. Esse recurso ajuda em cenários de volume variável, mas precisa de limites bem definidos.
minProcesses e maxProcesses não são números decorativos. Eles dizem quantos processos mínimos cada fila recebe e até onde o supervisor pode crescer. Um valor alto demais pode pressionar servidor, banco, Redis ou API externa. Um valor baixo demais pode manter fila crítica esperando.
O erro está em tratar balanceamento automático como substituto de desenho. Ele distribui workers, mas não decide sozinho se o job deveria existir, se deveria ser dividido, se deveria consultar menos dados ou se deveria ter retry diferente.
Aqui na Promovaweb eu prefiro revisar primeiro a natureza do job. Depois separo filas. Depois ajusto workers. Essa ordem costuma expor problemas que número maior esconderia por algum tempo.
Retry, timeout e backoff fazem parte da escala
Escalar fila também exige revisar o que acontece quando algo dá errado. A documentação de filas do Laravel dá base para entender attempts, falhas, timeout e retry. Horizon expõe essa execução de forma mais visível.
Um job que chama API externa pode falhar por limite temporário, indisponibilidade do fornecedor ou payload inválido. Cada caso pede tratamento diferente. Repetir sem critério pode aumentar carga e gerar nova falha. Abandonar cedo demais pode deixar usuário sem conclusão.
Timeout mal definido também pesa. Se o job demora mais que o worker permite, ele pode ser encerrado antes da conclusão. Se o retry_after não conversa com timeout, existe risco de processamento duplicado.
Esses detalhes parecem baixos demais para discussão de negócio, mas afetam suporte e confiança no SaaS. Quando um pagamento, relatório ou webhook é processado duas vezes, a consequência chega rápido ao atendimento.
Escala de filas com IA exige revisão humana
Projetos com Vibe Coding e agentes de IA costumam gerar jobs com facilidade. O risco é aceitar uma fila porque o código compila e o fluxo principal parece funcionar.
No post sobre como usar Laravel no Vibe Coding, a tese é que Laravel ajuda a dar trilho para revisão. Jobs seguem essa mesma lógica. Um agente pode criar job, evento e listener, mas alguém precisa revisar payload, tentativa, falha, log, fila, prioridade e teste.
Horizon ajuda a enxergar o comportamento depois que o código roda. A revisão humana precisa acontecer antes e depois: antes para desenhar filas com clareza, depois para interpretar métricas e corrigir o que o painel revela.
No Co-work da Formação IA Makers, esse ponto é recorrente. A pessoa aprende muito quando vê a IA gerar o código, mas aprende mais quando entende como aquele job será mantido. nesse cenário, Co-work é o ambiente ao vivo de trabalho acompanhado em que projetos reais são abertos para revisão; ele serve para tirar dúvidas, conferir decisões e ajuda o leitor a transformar a própria dúvida em próximo passo revisável.
Quando aumentar worker não resolve
Aumentar worker pode ser necessário, mas nem sempre é a primeira resposta. Se um job faz consulta ruim, ele continuará ruim com mais processos. Se uma integração externa limita requisições, mais workers podem piorar a relação com a API. Se filas estão mal separadas, mais capacidade pode manter a prioridade errada.
Antes de escalar número, revise três coisas: tamanho do job, dependência externa e prioridade da fila. Um job grande pode ser dividido. Uma API instável pode pedir backoff. Uma fila crítica pode receber supervisor próprio.
Depois disso, Horizon ajuda a ajustar a capacidade com evidência. Você acompanha throughput, runtime e falhas para saber se o ajuste melhorou a execução real ou deslocou a restrição para outro ponto.
A vantagem de Horizon está na decisão seguinte
Laravel Horizon e Redis ajudam a escalar filas quando existe critério para usar os sinais que eles mostram. A vantagem não termina no dashboard. Ela aparece quando o responsável técnico separa filas, ajusta workers, revê retry, corrige job pesado e conversa melhor com suporte.
Eu não venderia Horizon como solução automática para SaaS lento. Eu usaria Horizon para descobrir onde a fila está pesada, onde a prioridade está errada e onde a arquitetura precisa ser simplificada.
Se o seu SaaS Laravel depende de jobs para entregar valor, vale revisar Horizon junto com desenho de Redis, filas, observabilidade e suporte. Para esse tipo de revisão, a consultoria da Promovaweb pode ajudar a transformar sintomas de fila em decisões técnicas mais claras.
Gostou do conteúdo?
Receba atualizações e conteúdos exclusivos diretamente no seu e-mail.
Obrigado por se inscrever!
Você agora faz parte da nossa comunidade. Fique atento à sua caixa de entrada para novidades exclusivas!