Por que webhooks são difíceis de gerenciar em produção

Quando os times começam a usar webhooks, muitas vezes não fica claro quanto trabalho é necessário para mantê-los confiáveis em produção. Normalmente, essas lições são aprendidas de forma dolorosa depois do deploy. Se você é novo em webhooks, comece pelo nosso guia sobre o que são webhooks e como eles funcionam.

Neste artigo vamos acompanhar a jornada de um time de desenvolvimento que acabou de colocar webhooks em produção. Focamos nos problemas encontrados, no impacto sobre os usuários e no processo trabalhoso de remediação necessário para manter o sistema funcionando.

Produção = problemas

O único propósito dos webhooks é integrar dois serviços/aplicações remotos criando um canal de comunicação de mão única, em que uma origem pode enviar uma mensagem (o webhook) a uma aplicação de destino.

Esse canal ajuda a orquestrar as responsabilidades compartilhadas por esses serviços/aplicações em um fluxo de trabalho. Portanto, o fluxo fica comprometido se houver uma falha nesse canal de comunicação (ou em qualquer componente).

Se a afirmação acima é um fato, também é fato que a falha é inevitável em ambientes de produção.

Webhooks em produção estão sujeitos a mais fatores externos (e mais variados) vindos de suas dependências do que em um ambiente de desenvolvimento controlado.

Dê uma olhada nesta tabela que ilustra como as falhas podem acontecer.

Motivo da falha do webhookExplicação
Servidor fora do arPode acontecer pelo esgotamento total dos recursos do servidor quando ele é submetido a cargas acima da capacidade. Também pode ser uma parada intencional para upgrades ou migração.
Servidor retornando errosOcorre quando há uma release ruim que faz o servidor lançar erros a partir da lógica do código ou de operações de I/O.
Timeouts do servidorFalhas também podem surgir quando o servidor descarta webhooks após um timeout, causado por processos longos que travam o pool de conexões ou consomem toda a memória.
Erros de redeÀs vezes a falha vem do link de rede entre os serviços. Esgotamento de banda e latências altas que fazem provedores de webhooks descartarem entregas são problemas que podem surgir do lado da rede.

Impacto dos problemas com webhooks sobre os seus usuários

Na seção anterior, falamos sobre como os webhooks coordenam as responsabilidades de componentes em um único fluxo de trabalho. Esses fluxos costumam ser tarefas que um usuário quer realizar usando a sua aplicação.

Para o usuário final, esse fluxo pode ser:

  • Receber um ingresso eletrônico por e-mail depois do pagamento;
  • Processar a entrega depois de pagar pelos itens do carrinho;
  • Atualizar uma carteira digital depois de comprar itens em uma loja online; ou
  • Receber o detalhamento dos resultados ao terminar um teste online.

Para entendermos o impacto de uma operação de webhook que falha, vamos detalhar esses cenários na tabela abaixo.

Tarefa do usuárioComponentesImpacto
Receber um ingresso eletrônico por e-mail depois do pagamentoServiço de pagamento → Webhook → Serviço de bilheteriaO dinheiro é debitado do usuário, mas o ingresso não é enviado. O cliente não recebe valor pelo que pagou.
Processar a entrega depois de pagar pelos itens do carrinhoServiço de pagamento → Webhook → Serviço de entregaO dinheiro é cobrado do cliente, mas a entrega não é processada. Assim, o cliente não recebe os itens comprados.
Atualizar uma carteira digital depois de comprar em uma loja onlineServiço de compras → Webhook → Serviço de carteiraOs itens são comprados com sucesso, mas a atualização da carteira digital falha. O cliente leva os produtos sem pagar. O serviço de carteira é comprometido.
Receber o detalhamento dos resultados ao terminar um teste onlineServiço de testes → Webhook → Serviço de resultadosO teste é concluído, mas a transferência de dados para o cálculo do resultado falha. O aluno não recebe a nota, e os dados podem ser perdidos para sempre.

Aprendemos duas coisas importantes aqui. Quando um webhook falha, o fluxo de trabalho é comprometido, e o usuário final (e/ou o sistema) é impactado negativamente.

O ciclo infinito de resolver problemas com webhooks

Já entendemos que a falha é inevitável em ambientes de produção e que, infelizmente, o impacto dessas falhas não é trivial. Então vamos ver como os times de desenvolvimento vêm resolvendo esses problemas.

Pontos de dor no fluxo de trabalho dos desenvolvedores

Para corrigir um problema de webhook, os times precisam percorrer os passos abaixo.

  1. Encontrar os webhooks perdidos. São os webhooks que foram disparados, mas não chegaram ao destino por causa de uma falha.

  2. Identificar o problema. Observar os webhooks que falharam para achar a causa raiz.

  3. Corrigir o problema. Encontrar e aplicar a solução.

  4. Resolver a situação. Reconciliar todos os webhooks perdidos ou que falharam para levar o sistema de volta a um estado consistente.

Percebe o problema dessa abordagem? Esse processo precisa ser repetido a cada problema que surge do uso de webhooks em produção.

Como as falhas sempre vão ocorrer, repetir esse processo de remediação sem parar é o principal ponto de dor dos times de desenvolvimento.

A necessidade de uma experiência melhor para quem desenvolve

Você não pode ter desenvolvedores e administradores vasculhando constantemente milhares de webhooks para achar os que falharam. Resolver esses problemas repetidamente vai levar à perda de muitas horas de desenvolvimento que poderiam ser usadas para melhorar a sua solução. Mesmo que você siga adicionando mais desenvolvedores para acelerar o processo, haverá um ponto de ruptura. Adicionar mais gente não escala para milhões de webhooks com pelo menos 1% de taxa de falha.

Além disso, muitas falhas são típicas e seguem um padrão. Por isso, você pode aplicar a mesma solução a esses grupos de falhas semelhantes; essa é uma área em que a automação pode ajudar bastante.

Em resumo, você precisa evitar gastar tempo corrigindo o mesmo conjunto de problemas repetidas vezes. Esse tipo de experiência mata a moral do time de desenvolvimento e leva à perda de horas valiosas.

Uma solução que acelere o processo de remediação e garanta que os desenvolvedores gastem o mínimo de tempo possível combatendo falhas em produção deveria ser o padrão. Seguir as boas práticas ao colocar webhooks em produção ajuda a evitar muitos desses problemas.

Conclusão

Neste artigo, percorremos o diário de um time de desenvolvimento usando webhooks em produção. Discutimos falhas típicas de ambientes de produção e o impacto delas sobre os usuários, incluindo as dores de crescimento de corrigir problemas com webhooks. No próximo artigo desta série, vamos discutir a dimensão dos problemas e como eles se agravam com a escala.