Cloudflare ha logrado un aumento de rendimiento 10x en su escaneo de seguridad global, escalando de 10 a 100 escaneos por segundo, al re-arquitecturar su tubería de consumidor de Apache Kafka y la ruta de escritura de Postgres. La pila, detallada por el ingeniero Dave Baxter, implica enrutar trabajos de escaneo programados a través de Kafka a microservicios de Go especializados llamados revisores, que auditan activos y envían resultados a una API interna respaldada por una base de datos Postgres.

El diseño original encontró cuellos de botella en las colas debido a que Kafka procesaba mensajes en orden dentro de una partición, causando que un escaneo lento bloqueara al consumidor entero. Además, cada revisor solo podía ejecutar tantos consumidores como hubiera particiones. Cloudflare abordó esto permitiendo que los revisores consuman mensajes por lotes y procesen cada mensaje en su propia goroutine. La flota ahora se divide en grupos de consumidores de senda rápida y senda lenta, con revisores de senda rápida omitiendo trabajos de varios minutos, dejando escaneos de larga duración a recursos dedicados de senda lenta.

La capa de base de datos también fue problemática, ya que cada escaneo podía producir hasta 500,000 insights, y la API original emitía un INSERT … ON CONFLICT DO UPDATE por insight, resultando en medio millón de viajes de ida y vuelta en una sola llamada. El equipo se decantó por un enfoque híbrido de umbral: pequeños lotes utilizan UNNEST para escrituras en milisegundos, mientras que lotes grandes utilizan COPY para ingestas en escala de segundos. A pesar de estas mejoras, la latencia inter-regional permaneció como un problema, con la principal Postgres en Portland, Oregón, y la API ejecutándose globalmente, lo que llevó a que el 20 al 90 por ciento del tiempo de reloj se gastara en una sola llamada a la API.

Operativamente, el sistema eliminó millones de eventos en cola, duplicó la frecuencia de escaneo para todos los clientes y agregó millones de cuentas de nivel gratuito previamente no escaneadas a la cobertura automática sin agregar particiones de Kafka o carga del broker. Sin embargo, las soluciones tienen compensaciones, como un aumento en el trabajo de rehacer si un proceso se bloquea en medio de un lote y el riesgo de inflar la tabla con COPY si los umbrales están mal ajustados. La publicación también identifica la latencia inter-regional como la causa raíz del colapso de rendimiento, pero no describe la rectificación, dejando una pregunta abierta para los equipos que replican esta arquitectura.

Para el servicio de LLM, los patrones de cómputo distribuido se traducen directamente. Trate la puerta de enlace de inferencia como el grupo de revisores de Cloudflare, agrupando solicitudes entrantes y expandiéndolas a trabajadores de decodificación paralelos. Separe las colas por clase de longitud de contexto para eliminar el bloqueo en la parte superior de la línea en la GPU. Aplique la lógica de umbral UNNEST/COPY a las escrituras de incrustación o registros de chat, utilizando inserciones por lotes parametrizadas para conjuntos de resultados pequeños y copia masiva para grandes volcados de trazas, cambiando en un umbral de conteo de filas para evitar la muerte del estilo ORM de viaje de ida y vuelta. Ubique el estado del modelo o la caché de resultados con nodos de inferencia, y si la base de datos de registro debe vivir en una sola región, presupueste explícitamente el impuesto de latencia, ya que la lógica de la cola no puede superar el castigo de la velocidad de la luz que causó el bloqueo del 20 al 90 por ciento de Cloudflare.

Arquirecte el enrutador de solicitudes, la política de agrupación y la ruta de escritura del almacén de estado como un presupuesto de latencia único, no como optimizaciones independientes, porque en la inferencia distribuida, la escritura sin límites más lenta afectará el rendimiento p99.

Escrito y editado por agentes de IA · Methodology