architecture

Webhooks ou Arquitetura Orientada a Eventos: Confiabilidade, Retries e Idempotência

Escolha entre webhooks e eventos tornando explícitos garantias de entrega, retries, idempotência, segurança e recuperação.

Read in English
Um caminho HTTP de webhook comparado a um fluxo de eventos com broker, retries, filas e consumidores independentes

Webhooks e arquitetura orientada a eventos costumam ser apresentados como opções concorrentes. É melhor entendê-los como padrões em níveis diferentes.

Um webhook normalmente é um callback HTTP: quando algo acontece, um sistema envia uma requisição a um endpoint de outro. Arquitetura orientada a eventos descreve sistemas que publicam e reagem a eventos, frequentemente por um broker ou plataforma de streaming. Um webhook pode transportar um evento, mas não oferece automaticamente durabilidade, fan-out, replay, ordenação ou isolamento entre consumidores.

Escolha pelo contrato de integração

Webhooks funcionam bem quando o produtor conhece o endpoint, a quantidade de consumidores é administrável, a notificação próxima do tempo real é útil e a entrega HTTP é aceitável. São acessíveis para parceiros externos.

Eventos com broker tornam-se atraentes quando vários consumidores independentes precisam do mesmo fato, produtores não devem conhecer consumidores, o tráfego chega em rajadas, replay é importante ou consumidores avançam em velocidades diferentes.

Nenhuma opção elimina falhas distribuídas. Redes expiram, consumidores ficam indisponíveis e confirmações se perdem.

Projete para entrega pelo menos uma vez

Sistemas práticos podem entregar o mesmo evento mais de uma vez. Consumidores precisam ser idempotentes. Atribua um identificador estável ao evento e armazene estado suficiente para reconhecer o retry. Se a operação de negócio possui uma chave natural de idempotência, preserve-a por todo o workflow.

Não trate timeout HTTP como prova de que o receptor não fez nada. Ele pode ter confirmado a operação e perdido a resposta. Repetir sem idempotência pode duplicar pagamentos, mensagens ou transições.

Retries devem usar backoff exponencial limitado com jitter. Ao esgotar a política, mova o evento para um caminho recuperável, como dead-letter queue ou histórico visível ao operador. Retries infinitos e invisíveis escondem incidentes.

Proteja a fronteira

Receptores de webhook devem verificar uma assinatura sobre o payload original, impor tolerância de timestamp contra replay e comparar assinaturas em tempo constante. Faça rotação segura de secrets e documente como testar a verificação.

Autenticação não substitui validação. Trate o evento como entrada não confiável, limite o payload, valide o schema e autorize o efeito. Em plataformas internas, aplique identidade, criptografia, autorização por tópico, schema e isolamento entre tenants.

Torne evolução e ordenação explícitas

Versione schemas e prefira mudanças retrocompatíveis. Consumidores devem ignorar campos desconhecidos; produtores não devem remover ou reinterpretar campos sem migração.

Ordenação global é cara e raramente necessária. Defina o menor domínio que exige ordem — como os eventos de um pedido — e particione por ele. Consumidores ainda precisam lidar com atraso, duplicação e ausência eventual.

Observe a entrega como produto

Acompanhe latência, tentativas, sucesso, idade da fila, dead letters, lag e resultados. Ofereça uma forma segura de inspecionar e repetir falhas. Use identificadores de correlação de ponta a ponta.

A pergunta não é apenas “webhook ou eventos?”. É qual contrato de entrega o negócio exige — e se o desenho torna duplicação, atraso, falha, segurança e recuperação explícitos.

Referência

O artigo da AWS Builders’ Library sobre timeouts, retries e backoff com jitter explica por que retries precisam de limites e atrasos aleatórios em sistemas distribuídos.

Artigos relacionados

Como Sistemas Modernos se Integram: APIs, Webhooks, Eventos e FilasLogs Estruturados do Jeito Certo: Contexto de Trace, Proteção de PII e Retenção

Vamos melhorar sua plataforma?

Conte o contexto atual e o resultado que sua empresa precisa. Começamos pelo problema de engenharia e definimos um caminho prático.