HookDeck: event gateway entre webhooks | guia prático
Phil Legleiter (HookDeck) em Londres: o que é um event gateway entre provedores de webhook e sua app — e por que Stripe aparece na conversa
Resposta direta
Webhook direto na app parece simples até o provedor retentar e seu handler falhar — gateway existe para esse meio-campo. O valor do API em mais recursos, mas, novamente, esses outros provedores provavelmente não vão deixar você fazer 100 requestões por segundo e em qualquer escala, se há uma renovação de subscreção, um importe de batches que atingir milhares e milhares de requestões, você não pode fazer requestões de API, até mesmo para Stripe, nesse.
O problema do webhook cravado na app
Um dos nossos produtos é algo chamado de um gateway de eventos e ele se encontra entre, como você pode ver neste diagrama, entre os provedores de webhooks e as aplicações que você está construindo. Como você pode ver também, processamos mais de 100 bilhões de webhooks e bilhões a mês agora para 10 a 1.000 desenvolvedores. Então, esta palestra cobre essas aulas aprendidas de construir essa infraestrutura, para que você possa fazer isso sozinho se quiser, e também as melhores práticas em geral em relação a gestão de webhooks. Então, quando as pessoas pensam em webhooks, elas costumam pensar em um post request de HTTP, talvez HMAC, alguma tipo de validação e verificação de signais.
Então, quando estamos trabalhando com webbooks, todos os mesmos principios de arquitetura dirigida a eventos da EDA podem ser aplicados, eles estão apenas escondidos atrás da HTTP. Você tem duplicações, você precisa gerir retros, você tem que implementar sistemas de cura, queiras de letras, você tem alertas, um monte de coisas em torno desses planos de mensagem assíncrona. Você não controla o publicador com o Webhooks, o que é diferente de quando você está construindo seu próprio EDA e, você sabe, há uma cura de mensagem que talvez você possa falar com uma equipe e dizer que, bem, normalmente são mecanismos de puxar, então você está puxando dados de uma cura, mas o Webhooks é um puxo. Então, você não pode dizer para Stripe, Twilio ou Shopify, Hey, pare de me enviar esses webbooks agora.
Não, você está aprendendo sobre webbooks, um de qualquer forma, muito frequentemente, se você está trabalhando com plataformas externas e você está consumindo webbooks, você consumirá webbooks de mais de um fornecedor e como eu disse, você não vai apenas estar trabalhando com a Stripe para um ótimo DX, você vai estar trabalhando com vários fornecedores que todos têm mecanismos de retorno diferentes, eles terão diferentes garantias, time outs, diferentes esquemas de signatura, nós implementamos sobre aproximar 30 formas diferentes de assinar um banco. Então, o primeiro desafio é que você não pode confundir a ordem de entrega de webbooks e você vai receber duplicados, certamente em escala. E se você só seguir isso blindamente e você ter a atualização e tentar atualizar em torno da database que não existe, você vai ter um erro. Você vai ter vários problemas, então você não pode processá-los como você tem que proporcionar validação e alguma lógica Você recebe um duplicado, então o envio é pagado.
O que um event gateway faz de fato
Quando você faz o mesmo, quando um atento é feito contra um sistema para executar uma operação, o mesmo resultado deve ocorrer se aquela mesma operação ocorrer múltiplas vezes. Então, neste exemplo aqui, você pode ver que é um evento ThinStripe, eles não estão enviando o payload, os dados, e então você vai usar o RelatedObject.id para pegar o estado mais fresco daquela ressource, e você vai usar isso como a fonte de verdade. Então você não precisa mais se preocupar com ordem, porque você já está recebendo os dados mais frescos, mas em escala, em cada evento que recebe resultados em uma requerida de API. Agora, em Stripe, isso não é muito ruim, porque você tem 100 requeridas por segundo.
O valor do API em mais recursos, mas, novamente, esses outros provedores provavelmente não vão deixar você fazer 100 requestões por segundo e em qualquer escala, se há uma renovação de subscreção, um importe de batches que atingir milhares e milhares de requestões, você não pode fazer requestões de API, até mesmo para Stripe, nesse tipo de valor. O segundo é o Upcert by Date, e é onde você tem um Upcert de Acid Transaccional Compliant, ou, para insertar ou para updatear o recorde, se o evento vindo é mais novo. Em vez de fazer o insert, você faz um update, baseado em uma identificar única a sua ideia de subscrito neste caso, mas somente o tempo é novo, então você está garantindo que você está apenas atualizando os dados se é a parte mais nova de dados disponível isso é realmente bom para sistemas de alta transição porque então você não está fazendo aquelas requerências de api que afetam o dia a dia, obviamente você está garantindo que você só tem a versão mais recente também você vai evitar esses limites de renda de api, mas só funciona se você está correndo obviamente, estando no estado atual com os timestamps. O terceiro, o último desses, é se você não está estando os recordes completos, e você não consegue comparar esses timestamps, em vez de usar um store de compliance de acessibilidade para traçar o status de processamento desse evento.
Se você entrar e olhar para a ID, processar, o que você precisa fazer nessa situação é rejeitar isso, para que você não saiba o que vai acontecer com esse processo em seguida, vai acontecer ou falhar, então isso vai embora, você pode completar esse processo quando ele voltar ou quando um novo vem e você diz o que são as questões se for processado você já lidou com isso, você pode simplesmente ignorá-lo, então, o suficiente sobre idempotência e eu vou dizer isso novamente, que é bom, então vamos falar um pouco sobre a arquitetura Então, os webhooks frequentemente chegam em explosões, como eu mencionei, aqueles tipos de manutenção de subscritos, ou apenas coisas que estão indo bem, como no dia de hoje, sábado e domingo. Então, uma vez que você cruza o threshold em algum lugar, então a CPU maxa, os threads são bloqueados, as conexões de database são saturadas, você vai ver esse tipo de risco exponencial. Problemas e falhas, então uma pequena quantidade de mais desses eventos é apenas uma performance desreportadamente pior e então, infelizmente, esses sistemas retratam-os para adicionar ao problema Você está lidando com o assunto em diante, mais eventos que estão vindo como retriais. Ingestão de serviços serverless, Lambda, Cloud Run, depois o layer de armazenamento, onde você tem queiras e dados persistentes, logando, e, finalmente, consumidores que estão lendo essa queira e performando a lógica.
Leitura útil
Webhook direto na app parece simples até o provedor retentar e seu handler falhar — gateway existe para esse meio-campo. Use o trecho acima como restrição, não como citação ornamental.
Stripe e outros provedores no diagrama
Se você quebrar mais do que pode lidar, você vai ter alguma pressão de volta, então esses delay também podem crescer com o tempo. Para lidar com isso, você tem que entender algumas coisas, você tem que entender quantos eventos cada um de seus processadores, seus instâncias de processamento, esses trabalhadores podem lidar e quantos deles você pode correr segura. Nós olhamos para a profundidade de queima, então quantas eventos naquela cueca e então qual é o evento mais antigo na cueca, o máximo de idade e, por isso, nós temos essa ideia de tempo para limpar e eu vou demonstrar isso em um pouco e então isso nos diz quanto tempo vai levar para limpar essa cueca e nos dá uma compreensão real do sistema de saúde do Huktech. A pressão de pernas é inevitável, a coisa é que você tem que detectá-la antes de causar problemas e ter um plano para lidar com ela.
Então, eventualmente algo vai falhar, você vai ter um mau deploy, você vai ter um crash de server, você terá algum tipo de trabalhador quebrado e se a integridade de dados é importante, você tem duas opções. A primeira é para, vou colocar isso em termos simples, então é para processar ou persistir eventos, então você sabe que foi processado sucessivamente ou você sabe que foi guardado, você tem logs de audito para isso, você tem um código de letra morta para eventos falhados e se todos esses são bem, você sabe tudo. E dependendo do volume de eventos, se você está processando milhares e milhares de eventos, isso vai demorar tempo, como qualquer coisa, planeje para isso. Não espere até que tenha um problema e então tente lidar com ele, tenha cuidado com o ato em lugar antes, então você tem esses atos e atos em lugar, você está fazendo com que você esteja auditando seu sistema, tudo está sendo sucessivamente processado, mas você pode ainda perder a visibilidade de onde os eventos vêm de onde eles estão sendo processados, como eles são traçados pelo sistema, então você precisa ter cuidado com que você tenha essa traçabilidade empurrada para um serviço como, você sabe, elásticos, Você pode procurar eventos históricos, problemas de debug, encontrar coisas específicas para os clientes se você está gestionando esses um esses webhooks esses eventos para seus clientes e novamente você precisa de ferramentas para dizer que não obtivemos aquele evento ou não estamos vendo essa transação refletida você precisa da capacidade de reanime esses eventos e empurra-os através do sistema novamente, então garantir que você garantir que você está construindo o ferramenta para suportar essa funcionalidade e fazer isso antes de haver qualquer descoberta, então falamos muito sobre webhooks você sabe que os webhooks estão por aqui desde pelo menos 2007, então, um nome chamado Jeff Lindsay, que eventualmente trabalhou no Twilio, introduziu webhooks para, não gostava de pôr, falamos sobre ser um sistema real-time, talvez não real-time, mas então, estamos muito longe sem muito mudança, mas há algumas coisas, três coisas que vou destacar que acho que estão mudando, em primeiro lugar, o que é ótimo ver empresas como como a Stripe e a Shopify estão investindo neste ecossistema inventado.
Stripe tem esses eventos finais para permitir esse mecanismo de processamento antes do fechamento, porque eles estão vendo que é assim que os desenvolvedores estão usando o Webhooks. E também Stripe e Shopify e outros estão fazendo algo chamado destilações que vou falar brevemente no próximo também e então falarei sobre o evento de gateways com o demo e depois terminaremos. Na verdade, eles estão muito empurrando para você escolher a opção de enviar dados diretamente para o GTP Publisher ou ponte de eventos do AWS. Eu tomei 10 minutos sobre alguns dos problemas com webhooks, não levará todos os problemas para além de construir arquitetos de venda, mas levará alguns, não há essa standardização em torno de webhooks, embora haja tentativas de fazer isso, a segurança é opt-in, você pode escolher se você vai validar um webhook ou não, mas muitos não, e eu conheço grandes empresas que completamente broken their web book signing process and very few customers have conhecido ou reclamado sobre isso.
Observabilidade e replay
Então, o Hookdeck é o principal sponsor do eventdestinations.org e definitivamente inspirado por Stripe, Stripe foi a primeira empresa que vimos fazer eventdestinations. Mas estamos tentando conseguir contribuições e feedback sobre as melhores guia para oferecer destinações de eventos como parte dos produtos. Então, se você está construindo uma API, por favor, olhe para Outposts e veja se pode corresponder às suas necessidades, se você quer oferecer entregas de eventos dentro do seu produto. E ninguém está me dizendo como você está, então uh então eu vou terminar as demos do gateways e depois eu vou terminar então eu tenho que ter isso, alguém já ouviu falar de um gateways de evento antes não ok então é uma coisa nova é uma coisa nova, estamos tentando empurrar para ser uma categoria e a forma simples de pensar sobre isso é que é um equivalente assíncrono de um gateway de api que oferece clãs estrangeiros primitivos para aplicações de eventos e se você E comparamos as outras plataformas como um portão de eventos.
E isso importa por todas as razões que falei, como ingestão de eventos, gestão de pressão, filtragem de dados, transformação de dados, rotação, ou seja, no Reino Unido. Você pode usar APIs ou você pode usar a UI, mas aqui eu estou usando o Terraform para definir recursos. Com o Stripe, temos uma url do HookDeck e estamos dizendo que este é um endpoint webhook estamos recebendo o segredo do webhook do Stripe e então estamos registrando isso no HookDeck para que ele possa verificar os eventos que estão vindo do Stripe, então criamos um endpoint de envio que pode levar 10 eventos concurrentes ao mesmo tempo, então vamos entregá-los, há outro com 10 eventos, mas o máximo de 10 eventos por minuto isso vai causar pressão de volta, temos uma conexão que está mapeando Stripe Source para uma destinação e estamos dizendo que só queremos tipos de envio. Que vão para esse ponto, então apenas eventos de envio e também estamos fazendo um tipo de subfilter em valor subtotal, então maior que zero, estamos colocando um retributor também.
Próximo, temos uma conexão de Stripe Source para o ponto de inscrição, making sure it only begins with customer.subscription this is the like our ui representation forças, destinações e a linha faz com que se tenha uma conexão. Então, a subscrição do cliente e a subscrição, o envio tem o subtotal, mas também tem o o prefixo do envio no tipo e então os endpoints, você pode ver o endpoints que estão sendo entregues e também a taxa de entrega que nós estamos estabelecendo. Dizendo que o cliente entrou e disse que não está vendo informações atualizadas baseadas em algumas das transações que eu vi que aconteceram. Podemos fazer isso, podemos encontrar qualquer um desses eventos que se encaixam e então podemos retratá-los em bulk, então limpar todos esses problemas que já vimos em 52 eventos aqui, então vamos retratá-los, então eu sei que essas são demos, mas para administrar webhooks em escala em eventos em escala você vai precisar de ferramentas como esta, esse é o ponto, você tem que ter essa observabilidade, essas ferramentas para replay para ajudar a digitar os erros que você está vendo.
Quando introduzir gateway no seu SaaS
Eu não estive em Londres por muito tempo, eu moro em Escova. Eu sou o Phil Legzer, eu trabalho no HookDeck. Isso é incrível, porque agora vocês todos o têm. Então, nós construímos plataformas e ferramentas e desenvolvemos desenvolvedores de poder interoperável.
Dependentes de sistemas de energia, é uma bobagem, é o que eu li. Um dos nossos produtos é algo chamado de um gateway de eventos e ele se encontra entre, como você pode ver neste diagrama, entre os provedores de webhooks e as aplicações que você está construindo. Como você pode ver também, processamos mais de 100 bilhões de webhooks e bilhões a mês agora para 10 a 1.000 desenvolvedores. E nós diretamente experimentamos a dor de construir essa infraestrutura, mas também ajudamos a resolver problemas para desenvolvedores que usam nossa plataforma.
Então, esta palestra cobre essas aulas aprendidas de construir essa infraestrutura, para que você possa fazer isso sozinho se quiser, e também as melhores práticas em geral em relação a gestão de webhooks. Então, quando as pessoas pensam em webhooks, elas costumam pensar em um post request de HTTP, talvez HMAC, alguma tipo de validação e verificação de signais. Mas, atrás de cada webbook, há um evento. Então, os dados são criados, atualizados, deletados, há um fluxo de trabalho que se progressa, ou há algum tipo de mudança de estado.
Próximo passo
Escolha uma métrica (tempo, retries, conversão ou qualidade aceita) e rode 7 dias antes de escalar o padrão.