Show HN: Hatchet – fila de tarefas distribuída de código aberto
Modelo de arquitetura e durabilidade
- As tarefas são sustentadas por workflows predefinidos cujas etapas e entradas/saídas são persistidas no Postgres.
- Os componentes do engine fazem polling no Postgres, atribuem trabalho por conexões gRPC de longa duração e acompanham timeouts e retries no banco de dados.
- A execução durável é “pelo menos uma vez”: as etapas podem ser reproduzidas com entradas armazenadas; recomenda-se projetar tarefas idempotentes.
- Não há necessidade de locks baseados em Redis; o Postgres é a camada central de durabilidade e coordenação.
Comportamento dos workers e semântica de falhas
- Os workers enviam heartbeat a cada poucos segundos; se ficarem inativos por ~60s, as tarefas são reatribuídas (se ainda houver retries).
- Sinais de cancelamento são enviados, mas não há garantia de entrega; execuções duplicadas são possíveis se workers ignorarem cancelamentos ou retornarem após a reatribuição.
- Isso é reconhecido como um caso de borda que precisa de alertas e melhor monitoramento.
Workflows, DAGs e limitações
- Os workflows são declarados como DAGs antecipadamente; isso simplifica visualização, versionamento e depuração de múltiplas etapas em comparação com código procedural.
- Trade-offs: ainda não há try/catch dentro de uma única tarefa, nem um modelo simples de “await futures & gather later”. Workflows procedurais estão no roadmap.
- Child workflows podem ser disparados a partir de etapas; está sendo considerada a dispersão (fan-out) com base em um valor de retorno em array.
- A mutação dinâmica do DAG em tempo de execução não é descrita atualmente como suportada.
Comparações com outras ferramentas
- Posicionado como uma alternativa a Celery/Redis/RabbitMQ com observabilidade mais forte e uma UI, e conceitualmente semelhante a Temporal/Cadence, mas mais simples de operar.
- Diferencia-se de pg-boss/River/Graphile Worker por ser um serviço separado + UI, em vez de uma biblioteca pura, e por adicionar semântica de workflow e pools de workers.
- Comparado a Windmill/Inngest: mecanismo de workflow semelhante baseado em Postgres; Hatchet é mais estreito (fila de tarefas + workflows) e licenciado sob MIT.
Dependências e escolhas de infraestrutura
- Hoje usa Postgres mais RabbitMQ para parte de pub/sub; os mantenedores gostariam de migrar para Postgres LISTEN/NOTIFY ou algo semelhante, mas observam complicações com poolers de conexão e replay.
- Algumas pessoas no thread argumentam que RabbitMQ é barato e confiável; outras preferem minimizar os componentes ao redor do Postgres.
Auto-hospedagem, cloud, preços, licenciamento
- Existe um guia de auto-hospedagem; o ponto-chave é um serviço de ingestão altamente disponível e Postgres gerenciado com PITR.
- A oferta cloud está em acesso inicial; os preços ainda não foram publicados.
- O projeto é totalmente MIT; a receita deve vir do Hatchet Cloud hospedado e possivelmente de suporte enterprise.
- Há consciência do risco de “lift-and-serve” dos hyperscalers; eles escolhem MIT apesar disso.
Agendamento, jobs adiados e casos de uso
- O agendamento baseado em cron existe via uma biblioteca cron em Go; o agendamento único/adiado existe em forma básica e está sendo refatorado para ser orientado a banco de dados e escalável.
- Alguns casos de uso de lembretes/notificações de longo prazo (por exemplo, follow-ups de saúde) ainda não são bem suportados, mas são um alvo.
- Hatchet não é específico para IA, mas é apresentado como adequado para pipelines de GenAI e outros workflows multi-etapas e limitados por recursos.
Desempenho e observabilidade
- Latência média de início reportada: ~50 ms para a primeira etapa, ~25 ms para etapas subsequentes em testes de carga, reconhecida como mais lenta do que filas de mensagens brutas, mas aceitável para semântica de DAG/tarefa.
- Observabilidade/UX é um grande diferencial em relação a Celery/Temporal: UI para inspecionar workflows, saúde dos workers e execução do DAG; ainda está melhorando a visibilidade de argumentos e a introspecção de tipos/serialização.
Recepção geral
- Muitos comentaristas estão entusiasmados, dizendo que esperavam por uma fila multi-language com boa observabilidade baseada em Postgres.
- Céticos questionam a complexidade adicional em relação a filas PG mais simples, RabbitMQ ou engines de workflow existentes, e levantam preocupações sobre casos de borda (cancelamento, semântica exactly-once, agendamento de longo prazo e inchaço de dependências).