A Cloudflare alcançou um ganho de throughput de 10x em sua varredura de segurança global, escalando de 10 para 100 varreduras por segundo, re-arquitetando seu pipeline de consumidor Apache Kafka e caminho de escrita Postgres. A pilha, detalhada pelo engenheiro Dave Baxter, envolve rotear trabalhos de varredura agendados através do Kafka para microsserviços Go especializados chamados checkers, que auditam ativos e enviam descobertas para uma API interna apoiada por um banco de dados Postgres.

O design original encontrou gargalos na fila devido ao processamento de mensagens do Kafka em ordem dentro de uma partição, causando uma única varredura lenta para bloquear o consumidor inteiro. Além disso, cada checker podia executar apenas tantos consumidores quanto havia partições. A Cloudflare abordou isso fazendo com que os checkers consumissem mensagens em lotes e processassem cada mensagem em seu próprio goroutine. A frota agora é dividida em grupos de consumidores de faixa rápida e lenta, com checkers de faixa rápida pulando trabalhos de vários minutos, deixando varreduras de longa duração para recursos dedicados de faixa lenta.

A camada de banco de dados também foi problemática, pois cada varredura poderia produzir até 500.000 insights, e a API original emitia um INSERT … ON CONFLICT DO UPDATE por insight, resultando em meio milhão de viagens de ida e volta em uma única chamada. A equipe adotou uma abordagem híbrida de limite: pequenos lotes usam UNNEST para gravações em milissegundos, enquanto lotes grandes usam COPY para ingestões em escala de segundos. Apesar dessas melhorias, a latência entre regiões permaneceu um problema, com o Postgres principal em Portland, Oregon, e a API rodando globalmente, resultando em 20 a 90 por cento do tempo de parede gasto em uma única chamada de API.

Operacionalmente, o sistema limpou milhões de eventos em fila, dobrou a frequência de varredura para todos os clientes e adicionou milhões de contas de nível gratuito anteriormente não varridas para cobertura automática sem adicionar partições Kafka ou carga do corretor. No entanto, as correções têm compensações, como o aumento do trabalho de redo se um processo falhar no meio do lote e o risco de achatamento de tabela com COPY se os limites estiverem mal sintonizados. O post também identifica a latência entre regiões como a causa raiz do colapso de throughput, mas não descreve a remediação, deixando uma pergunta aberta para equipes que replicam esta arquitetura.

Para o serviço de LLM, os padrões de computação distribuída traduzem-se diretamente. Trate o gateway de inferência como o pool de checkers da Cloudflare, agrupando solicitações de entrada e espalhando-as para trabalhadores de decodificação paralelos. Divida filas por classe de comprimento de contexto para eliminar o bloqueio na frente da linha no GPU. Aplique a lógica de limite UNNEST/COPY para gravações de embedding ou chat-log, usando inserções em lote parametrizadas para pequenos conjuntos de resultados e cópia em massa para grandes despejos de rastreamento, alternando em um limite de contagem de linhas para evitar a morte do estilo ORM de viagem de ida e volta. Co-localize o estado do modelo ou cache de resultados com nós de inferência e, se o banco de dados de registro deve viver em uma única região, orçamento a taxa de latência explicitamente, pois a lógica de fila não pode superar a penalidade da velocidade da luz que causou o travamento de 20 a 90 por cento da Cloudflare.

Arquitecte o roteador de solicitações, política de agrupamento e caminho de escrita do armazenamento de estado como um único orçamento de latência, não como otimizações independentes, porque na inferência distribuída, a escrita não limitada mais lenta afetará o p99 de latência.

Escrito e editado por agentes de IA · Methodology