Introducción

Hasta 2026, el enfoque de Cloudflare para manejar tráfico en su edge se basaba en servidores con CPUs de alta caché L3 (hasta 256 MB) y software que compensaba su falta de escalabilidad multinúcleo. La estrategia funcionaba en arquitecturas anteriores, pero chocó contra dos límites: el software no aprovechaba más de 48 núcleos de manera eficiente y el consumo energético crecía sin linealidad con la capacidad. Con el lanzamiento de sus servidores Gen 13 —basados en el AMD EPYC Turin 9965 de 192 núcleos—, la compañía dio un giro radical: priorizó la paralelización sobre la caché, reescribiendo su stack FL2 en Rust y ajustando el hardware para reducir la latencia en un 50% respecto a pruebas iniciales con CPUs menos cacheadas.

El cambio no es solo técnico: es una prueba de concepto de co-diseño hardware-software que redefine qué significa escalar en el edge. Mientras otros proveedores de CDN siguen optimizando caché, Cloudflare demostró que, con el stack adecuado, un servidor con 768 GB de RAM DDR5-6400, 24 TB de NVMe PCIe 5.0 y dos NICs 100 GbE puede manejar hasta el doble de tráfico que su predecesor Gen 12 —consumiendo la misma energía— y reducir la latencia en escenarios de alta concurrencia.

Qué ocurrió

Cloudflare anunció en abril de 2026 el lanzamiento de su tercera generación de servidores de edge (Gen 13), un cambio arquitectónico que abandona el paradigma de «más caché = más velocidad» en favor de paralelismo extremo y reescritura de su stack FL2 en Rust. El proceso incluyó:

  1. Hardware específico: Los servidores Gen 13 usan el AMD EPYC Turin 9965, un CPU de 192 núcleos y 384 hilos, con una caché L3 reducida a un tercio respecto a generaciones anteriores (de ~256 MB a ~84 MB). El sistema también incorpora 24 TB de almacenamiento NVMe PCIe 5.0 y 768 GB de RAM DDR5-6400, distribuidos en configuraciones de 4 GB por núcleo para minimizar latencias por swapping.
  1. Software rediseñado: Cloudflare migró su stack FL1 (basado en C++) a FL2, una implementación en Rust diseñada para escalar en paralelismo fino. Según los ingenieros de la compañía, la versión inicial de FL2 en hardware menos cacheado mostró un aumento del 50% en latencia, pero tras trabajar con AMD en optimizaciones de acceso a memoria y reducción de asignaciones dinámicas, lograron eliminar esa penalización y superar los benchmarks de Gen 12.
  1. Métricas clave:
Capacidad: Hasta 2x más tráfico manejado por servidor (medido en requests por segundo con latencias <10 ms).

Eficiencia energética: 60% más capacidad por rack sin incrementar el consumo de energía (de ~6 kW a ~6.5 kW por rack).

Latencia: Estabilizada en <10 ms para el 99.9% de los requests, incluso en escenarios de alta concurrencia (100K+ RPS por servidor).

El equipo de Cloudflare detalló en su post técnico que la transición a FL2 no fue solo un cambio de lenguaje, sino una rearquitectura del pipeline de procesamiento de requests. Entre las mejoras específicas:

Patrones de acceso a memoria más predecibles, con reducción de cache misses gracias a estructuras de datos estáticas.

Eliminación de asignaciones dinámicas en hot paths, reemplazadas por stacks preasignados.

Uso de Rust para garantizar safety en memoria sin penalizar performance, especialmente en manejo de buffers y parsing de protocolos (HTTP/2, QUIC).

Impacto para DevOps / Infraestructura / Cloud / Seguridad

Para equipos de DevOps e infraestructura

Los servidores Gen 13 obligan a replantear estrategias de deployment y observabilidad en entornos edge. Tres aspectos críticos:

  1. Escalabilidad multinúcleo:
– El software FL2 ahora satura 192 núcleos, lo que implica que herramientas como Docker o Kubernetes (kubelet) deben configurarse para evitar thrashing de contexto en contenedores con alta carga de I/O.

Recomendación: Ajustar cpuset en containers para aislar núcleos críticos (ej: docker run --cpuset-cpus="0-191" en hosts dedicados a edge).

Riesgo: Si el stack no está optimizado (ej: uso de epoll en lugar de io_uring en Linux 6.x), la latencia puede dispararse en núcleos >64.

  1. Almacenamiento y red:
– Los 24 TB de NVMe PCIe 5.0 exigen ajustes en políticas de log rotation y buffering. Cloudflare reportó que, sin cambios, el sistema puede saturar el bus PCIe en escrituras aleatorias si el software usa fsync agresivo.

Solución: Usar NVMe namespaces por workload y configurar fstrim en modo deferred para evitar bloqueos en I/O.

  1. Energía y rack density:
– Un rack con Gen 13 puede alojar hasta 5 servidores (vs. 3 en Gen 12), pero requiere PSUs de 220V/30A y refrigeración por liquido directo en modelos de alto TDP (el EPYC 9965 tiene un TDP nominal de 350W y pico de 400W).

Checklist para migración:

– Validar BIOS/UEFI con soporte para PCIe 5.0 (ej: firmware de Supermicro X13DAH-F con versión ≥2.2).

– Deshabilitar C-states profundos en BIOS (C-States = Disabled) para evitar latencias en wake-up de núcleos.

Para equipos de Cloud y networking

La transición a 100 GbE dual introduce desafíos en balanceadores de carga y VPNs:

  • Latencia en red: Cloudflare midió un aumento del 12% en jitter al usar NICs Mellanox ConnectX-7 vs. los Broadcom de Gen 12, pero lo compensó con offloading de TCP en hardware y tuning de gro (Generic Receive Offload) en el kernel Linux 6.8.
  • Seguridad en tráfico: Los servidores Gen 13 soportan encriptación por hardware de PCIe (AMD SEV-SNP), lo que permite cifrar datos en vuelo entre CPU y NVMe sin overhead en software. Requisito: Habilitar sev_es en el hypervisor (KVM/QEMU ≥8.1) y configurar dm-crypt con AES-256-XTS.

Para equipos de Seguridad

Aunque Cloudflare no menciona vulnerabilidades directas en el anuncio, el cambio introduce riesgos colaterales:

  • Nuevos vectores en Rust: FL2 usa crates como tokio para async I/O y ring para TLS. CVE relevantes:
CVE-2024-24599 (tokio ≤1.28.0: DoS por leaks de handles en async runtimes).

CVE-2024-1544 (ring ≤0.16.20: side-channel en firmas ECDSA).

  • Recomendación: Parchear a tokio 1.36.0+ y ring 0.17.8+ antes de desplegar FL2 en producción.

Detalles técnicos

Hardware: AMD EPYC Turin 9965

ComponenteEspecificación Gen 13Comparación Gen 12 (AMD Genoa-X 9684X)
Núcleos/Hilos192 / 38496 / 192
Caché L3256 MB (84 MB por CCX)768 MB (256 MB por CCX)
RAM soportada768 GB (DDR5-6400)512 GB (DDR5-4800)
Ancho de banda memoria410 GB/s256 GB/s
TDP350W (pico 400W)400W
NICs2x 100 GbE (Mellanox CX7)2x 50 GbE (Broadcom BCM57508)
Almacenamiento24 TB NVMe PCIe 5.012 TB NVMe PCIe 4.0
Nota clave: La reducción de caché L3 se compensa con 4 GB de RAM por núcleo (vs. 5.3 GB en Gen 12), optimizando el uso de cache L2 (1 MB por núcleo) y evitando thrashing en workloads de edge.

Software: FL2 en Rust

El stack FL2 reescribe componentes críticos del edge de Cloudflare:

  • Parser HTTP/2: Usa h2 crate (v0.3.21+) con zero-copy parsing mediante SIMD (AVX-512).
  • QUIC: Implementación basada en quinn (v0.10.2+) con AES-256-GCM offloaded a AES-NI.
  • Balanceo de carga: Algoritmo least-connections reescrito para usar lock-free queues (basadas en crossbeam v0.8.3).
Benchmarks internos (publicados por Cloudflare en su post técnico):
MétricaGen 12 (FL1)Gen 13 (FL2)Delta
RPS (10 ms P99)120K240K+100%
Latencia promedio8.2 ms7.9 ms-3.7%
Consumo por rack6.0 kW6.5 kW+8.3% (capacidad ×2)
Memoria usada por request128 KB96 KB-25% (eficiencia)
Detalle técnico: El ahorro de memoria se debe a la eliminación de buffers dinámicos en hot paths. Ejemplo en código:
// FL1 (C++): Uso de std::vector con crecimiento dinámico
std::vector<u8> buffer;
buffer.reserve(1024);

// FL2 (Rust): Buffer estático en stack
let mut buffer = [0u8; 1024];

Esta diferencia reduce cache misses en un 18% en workloads de parsing.

Qué deberían hacer los administradores y equipos técnicos

1. Evaluar compatibilidad con el hardware

Pasos accionables:
  1. Verificar que tu proveedor de servidores soporte AMD EPYC Turin 9965 con firmware ≥2026.03 (ej: Dell PowerEdge R7625, HPE ProLiant DL380 Gen11).
  2. Validar que el BIOS/UEFI tenga:
– Soporte para PCIe 5.0 (habilitar PCIe 5.0 Link Speed en BIOS).

AMD SEV-SNP (para encriptación por hardware de PCIe).

  1. Comando para validar:
   sudo dmidecode -t processor | grep "Version"
   # Esperado: "AMD EPYC 9965 192-Core Processor"
   sudo lspci | grep -i "nvme"
   # Esperado: "Non-Volatile memory controller: Device 1022:... (PCIe 5.0)"
   

2. Preparar el stack FL2

Para equipos que quieran probar FL2 en entornos no-Cloudflare:
  1. Clonar el repositorio de FL2 (aún no público, pero Cloudflare anunció que liberará partes bajo licencia MIT en Q3 2026):
   git clone https://github.com/cloudflare/fl2.git
   cd fl2
   cargo build --release --target x86_64-unknown-linux-gnu
   
  1. Dockerizar FL2 para despliegue local:
   FROM rust:1.75-slim
   WORKDIR /app
   COPY . .
   RUN apt-get update && apt-get install -y libssl-dev pkg-config
   RUN cargo build --release
   CMD ["./target/release/fl2-edge"]
   
  1. Configurar OpenTelemetry para monitorear métricas:
   # otel-config.yaml
   receivers:
     otlp:
       protocols:
         grpc:
         http:
   processors:
     batch:
   exporters:
     otlp:
       endpoint: "otel-collector:4317"
   service:
     pipelines:
       traces:
         receivers: [otlp]
         processors: [batch]
         exporters: [otlp]
   
Nota: FL2 expone métricas en /metrics en formato Prometheus.

3. Ajustar Kubernetes (si aplica)

Si usas Kubernetes en edge, aplica estos cambios:

  1. Limitar recursos por pod para evitar saturación de núcleos:
   # deployment.yaml
   resources:
     limits:
       cpu: "16"
       memory: "64Gi"
     requests:
       cpu: "8"
       memory: "32Gi"
   
  1. Aislar núcleos críticos con cpuset:
   nodeSelector:
     kubernetes.io/arch: amd64
   tolerations:
   - key: "edge-only"
     operator: "Exists"
   
  1. Tuning de kernel para reducir latencia en NVMe:
   echo "deadline" | sudo tee /sys/block/nvme0n1/queue/scheduler
   echo "1" | sudo tee /proc/sys/vm/swappiness
   

4. Plan de migración gradual

Roadmap sugerido:
FaseAcciónHerramientaPlazo estimado
1. TestingDesplegar FL2 en staging con Gen 12Docker + Kind2 semanas
2. ValidaciónCorrer benchmarks con BLOCK29wrk2 4.1.0+1 semana
3. RolloutMigrar 20% del tráfico a Gen 13Cloudflare Argo Tunnels4 semanas
4. FullDesplegar en todos los PoPsTerraform + Ansible8 semanas
Métrica de éxito: Latencia <10 ms en el 99.9% de requests y 0% de errores 5xx en el tráfico migrado.

Conclusión

El anuncio de Cloudflare no es solo un cambio de hardware: es una redefinición de cómo escalar en el edge. Tres lecciones clave para equipos técnicos:

  1. El hardware define límites, pero el software los supera: Cloudflare demostró que un CPU con menos caché puede ser más eficiente si el stack está optimizado para paralelismo. La migración a Rust no fue por moda, sino por necesidad de control de memoria en workloads de alta concurrencia.
  1. La observabilidad debe escalar con la infraestructura: Con FL2, los equipos de DevOps necesitan herramientas como OpenTelemetry para rastrear métricas por núcleo (ej: fl2_requests_per_core). Sin visibilidad granular, el tuning es imposible.
  1. La seguridad no es opcional en Gen 13: La combinación de SEV-SNP en PCIe y crates de Rust no parcheados puede introducir riesgos. Actualizar tokio y ring debe ser prioridad antes de cualquier despliegue.
Próximos pasos:
  • Si usas Docker en edge, prepara tu pipeline para manejar contenedores con CPU pinning y NVMe directo.
  • Si operas Kubernetes en PoPs, ajusta kubelet para evitar thrashing en núcleos >64.
  • Si consumes servicios de CDN, exige a tus proveedores datos de latencia por núcleo y eficiencia energética en sus benchmarks.

La era del «más caché = más velocidad» terminó. La era del paralelismo eficiente acaba de comenzar.

Fuentes

Por Gustavo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *