Bilhões de eventos: fila antes do caos | guia prático
Phil (HookDeck) sobre projetar para bilhões de eventos: quase ninguém começa grande — mas sem fila entre ingestão e processamento, tudo descola
Resposta direta
Escale mentalmente cedo: queue entre ingest e process evita retry storm quando o volume chega. Eu acho que é como muitas pessoas começam pequenas, certamente muitos de nossos clientes no HookTech começam pequenos e crescem, e eles beneficiam da nossa infraestrutura, mas se eles não têm, efetivamente, um queue sem servos, ou qualquer tipo de queue, system entre a ingestão e o processamento, as coisas se despegam. E para o.
Ninguém começa em bilhões — e mesmo assim
Então, Phil, quando você está projetando para bilhões de eventos, qual é a única coisa que talvez os maiores desenvolvedores devem pensar sobre? Eu acho que é como muitas pessoas começam pequenas, certamente muitos de nossos clientes no HookTech começam pequenos e crescem, e eles beneficiam da nossa infraestrutura, mas se eles não têm, efetivamente, um queue sem servos, ou qualquer tipo de queue, system entre a ingestão e o processamento, as coisas se despegam. Essa é a coisa número um e se você tem isso em lugar, você resolveu um problema massivo e isso te permitirá escalar 2 bilhões. E para o design para o falha também sim, acho que isso está mais para trás do processo como tanto quanto você está trabalhando com um provador razoável como stripe que vai retornar porque até mesmo o melhor sistema de ingestão pode ocasionally fall over for instance didn't aws gcp and cloudflare all have problems yeah about three weeks ago yeah yeah so like you'd assume that isso nunca aconteceria, mas às vezes isso acontece.
E isso parece simples, e provavelmente é tão simples como isso, dada a infraestrutura que temos disponível como desenvolvedores. Huck Deck, ele estava trabalhando com inúmeros provedores de webhooks, sabia que ele precisava desse tipo de infraestrutura, a garantia de ingestão relíquia, a decopulação do processamento, então um Q no meio, mas funcionalidades adicionais, como o processo de verificação sendo diferente dependendo do provedor de webhook que você está trabalhando, a necessidade de filtrar e transformar pagamentos, route-os ou eu deveria dizer route-os em inglês para diferentes destinações e também entreguei a essas destinações com relíquia também. Então, havia um número de problemas ao longo do caminho e ele pensou, bem, por que não tem infraestrutura para isso? E uma das coisas interessantes também é que tivemos engenheiros da Hookedeck, falamos obviamente de centenas de desenvolvedores também, e isso é algo como Hookedeck, algo que muitos, muitos times de engenharia já construíram.
Não é definido ainda, mas chamamos de Gateway Event, por que um desses tipos de coisas deve existir para resolver esses problemas? Acho que é muito importante ter algo como um Hook Deck quando você está construindo um sistema que está se integrando com muitos outros servidores de serviços, certo? Então você pode usar Stripe para pagamentos, você pode usar, eu não sei, alguma software de automação para isso, você pode usar. Qualquer coisa que você queira plugar no seu sistema vai ser, de alguma forma, emitindo eventos que você precisa consumir, e o Hook Deck é um ótimo Gateway.
Por que a fila é a peça não negociável
Sim, eu acho que quando se trata de vários provedores, o que você está conseguindo é a normalização de como você lidar com esses diferentes tipos de eventos, você está conseguindo a funcionalidade que eu cobrei, mas você também está conseguindo a observabilidade, então você está vendo isso em todos esses diferentes provedores, enquanto antes você iria para o dashboard de Stripe e se interagir com suas APIs para entender o que está acontecendo na API de eventos e então para um segundo provedor, como você se interagir com eles e conseguir essa observabilidade e então o terceiro e o quinto e o quinto, mas o que O que o HookDeck faz, ou qualquer outro evento que o Gego faça, é centralizar a observabilidade e a funcionalidade. Então, o seu sistema só precisa saber como integrar com o HookDeck, e o HookDeck standardiza todos os eventos que ele envia para o seu sistema. Sim, o que nós fazemos é que nós suportamos numerosos mecanismos para verificação de webhooks, então você só configura isso com o HookDeck. Mas, enfim, nós faremos essa verificação para vocês e, depois da receita desses eventos, vocês só precisam verificar que eles vêm do HookDeck.
Há também um cheque que vocês podem fazer para garantir que foi verificado pelo HookDeck, mas não iria chegar se não estivesse. Há algumas coisas interessantes em torno disso, você sabe, obviamente, cada provedor de webhook terá diferentes uh, headers, conteúdo de corpo diferente, você não normalizaria essas estruturas, você sabe, se há pagamentos estrutura, você não diria que vai formatar da mesma forma que você faria uma estrutura de SMS mas o que você pode fazer é você pode estar recebendo webbooks para mensagens de SMS de Bird, Twilio, Vonage e você vai estandardizar isso em um formato de mensagem e você pode usar transformações no HookTech para até mesmo estandardizar pagamentos Não apenas o controle do fluxo, mas também o formato de mensagem. Bem, se você pensar, quando você está construindo APIs de REST, os verbos significam muito, sabe? Patch, meu entendimento, vou ter que olhar isso, é que patch deve mudar pedaços de dados indivíduos, enquanto put, eu acho, reúne o conteúdo inteiro.
E, tipo, eu acho que essa é a resposta que eu teria dado e que a maioria das pessoas dão, mas é, tipo, é muito mais nuancedo do que isso. Ele disse que, basicamente, você escreve a documentação e então é assim que o nosso post-endpoint se performance, o nosso put-endpoint se performance e tal. Então você pode dizer que é um novo evento, post-endpoint faz muito sentido. Essa é uma coisa que vamos entrar muito mais, e eu recentemente escrevi no site stripe.dev sobre um dos mecanismos para isso.
Leitura útil
Escale mentalmente cedo: queue entre ingest e process evita retry storm quando o volume chega. Use o trecho acima como restrição, não como citação ornamental.
Retry storm e o que ela revela
Então, eu falo um pouco sobre como estamos vendo a mudança, como a Stripe está investindo na experiência de entrega de eventos e em destinações de eventos, as iniciativas de destinações de eventos, o Outpost que abrimos como um sistema baseado em destinações de eventos Go, e também quais são as portas de eventos. Sim, o HookDeck está sendo demonstrado, mas ele fala sobre esses conceitos que você precisa ingerir de forma relativa, você precisa ser capaz de rotear eventos, você precisa ser capaz de filtrar eles. Temos coisas como Kafka no fundo, mas não como parte da nossa message queue, isso é mais para garantir que estamos armazenando eventos para que as pessoas possam queryá-los para oferecer algumas ferramentas dentro do dashboard. E aí, toda a parte de frente, tem um monte de Next.js lá.
O que são algumas das coisas que você está animado com essa nova categoria, como, digamos, nos próximos dois a cinco anos? Mas o que estamos vendo é que temos coisas como EventBridge, GCP, que tem algo chamado EventArc, Azure, Microsoft tem algo chamado EventGrid. Então, ver como isso se standardiza e, no final, o que se torna a definição real, ou se se torna uma categoria definida, e quais funcionalidades e funcionalidades estarão nela, porque então serão empresas e desenvolvedores que empurram para frente as capacidades que são solicitadas nessas plataformas. Algumas das coisas para o Hook Deck, que é uma representação, espero, de um Gateway Event que estou ansioso para ser.
Então você pode conseguir as datas da requerida final que foi enviada por queryar nossa API, mas você, no final, precisará pôr. Mas uma das coisas que estamos pensando é por que não podemos pipar a resposta de uma destinação para outra fonte? Então, por que não o resultado da solicitação de destinação pode ser pipado para outra fonte e depois enviado para o originador de forma assíncrona? Então, há alguns chamados de API que você provavelmente precisa de uma resposta de volta.
Separar ingestão de processamento
De um arquivo, sincronizando, talvez uma ID ou algo, mas se você puder puxar sua própria ID para aquele evento externo, então recebendo sincronizadamente, você sabe de onde veio, você tem alguma forma de estado. E acho que é por isso que vemos o ChatGPT e pensamos que tudo está construído neste interface conversacional de cara humana. Mas há tantas possibilidades com a AI em torno de fazer processamento de batch, processamento grande, documentos grandes, imagens, vídeos, fazer pesquisas profundas, coisas assim, que você não quer manter sua conexão aberta e dizer, ok, está tudo pronto? Então, eu acho que esses tipos de coisas, onde você realmente começa a ver os benefícios da infraestrutura assíncrona.
E também, uma vez que você começa a construir as coisas assíncronamente, você tem o benefício de processar paralelamente também, certo? Você pode usar, você sabe, todo o poder da cloud que vem com o poder de poder usar as coisas ao mesmo tempo e não esperar que uma coisa bloqueie para acontecer depois da outra. Quando eu estava no AWS, como advogado de desenvolvedores de serverless, eu acho que o maior mudança mental que as pessoas às vezes acham difícil de se superar é por que e como você construir coisas para funcionar de forma assíncrona no fundo, sabe, funções lambda ou eu não sei funções de passo e apenas receber o reconhecimento de que que começou. E é por causa da, como você disse, força de escala e de processamento paralelo, não é?
É engraçado porque o primeiro trabalho que eu fiz na universidade foi trabalhar com um serviço financeiro chamado Kaplan Systems, e foi um pós-sócio. E, de fato, eu não tinha feito nada disso na universidade, e de repente nós estávamos pensando em mensagem e eventos, e a forma como os dados eram representados nos sistemas era tudo muito diferente. Há uma natureza real-time para isso, mas também, como você disse, não apenas a escala, o fato de que isso permite, certamente em arquiteturas de eventos, permite que as pessoas ingerem eventos, certamente o PubSub, por exemplo, permite que as pessoas ingerem eventos e permite que os times distribuírem trabalho. E diferentes equipes para começar a ingerir eventos e serviços e fazer todas essas coisas legal hum, então eu acho que eu acho que isso se encaixa com o lado da escala de coisas onde as pessoas podem ir para aprender e descobrir mais sobre o hook dek social dek sim, quero dizer, é genuinamente ainda, embora uh chat gpt, você sabe, está começando a kind of rank higher em termos de referências para o nosso site e ainda temos muita gente que podemos ver da consola de busca de google as pessoas ainda só procuram por teclas de teclas, então de alguma forma a palavra de Matas, é oberto.
Lições para SaaS ainda pequeno
Então, Phil, quando você está projetando para bilhões de eventos, qual é a única coisa que talvez os maiores desenvolvedores devem pensar sobre? Eu não acho que ninguém comece a pensar que eles vão ingerir bilhões de eventos. Eu acho que é como muitas pessoas começam pequenas, certamente muitos de nossos clientes no HookTech começam pequenos e crescem, e eles beneficiam da nossa infraestrutura, mas se eles não têm, efetivamente, um queue sem servos, ou qualquer tipo de queue, system entre a ingestão e o processamento, as coisas se despegam. Você vai começar a atirar em retros e isso é a coisa mais importante.
Depois da minha palestra, vamos falar sobre como você separa sua ingestão do seu processamento. Essa é a coisa número um e se você tem isso em lugar, você resolveu um problema massivo e isso te permitirá escalar 2 bilhões. Então o segredo é separar e decouplicar a ingestão do processamento. E para o design para o falha também sim, acho que isso está mais para trás do processo como tanto quanto você está trabalhando com um provador razoável como stripe que vai retornar porque até mesmo o melhor sistema de ingestão pode ocasionally fall over for instance didn't aws gcp and cloudflare all have problems yeah about three weeks ago yeah yeah so like you'd assume that isso nunca aconteceria, mas às vezes isso acontece.
Você tinha que assumir que essas coisas seriam sua infraestrutura resiliente. Você tem que ingerir, empurrar em uma cueca e isso tem que acontecer o mais rápido possível. Os seus dox, os dox do Shopify, todos falam sobre isso como uma prática melhor. E isso parece simples, e provavelmente é tão simples como isso, dada a infraestrutura que temos disponível como desenvolvedores.
Próximo passo
Escolha uma métrica (tempo, retries, conversão ou qualidade aceita) e rode 7 dias antes de escalar o padrão.