Saltar al contenido

← Volver a proyectos

Publicaciones

Caso de estudio APQ

Período: nov 2025 —

Shipped

El reto

Los schemas grandes de GraphQL pagan el costo completo del cuerpo del request en cada operación incluso cuando la operación es repetida. El costo aparece como bandwidth, CPU en el servidor y latencia p95 en el cable.

Mi rol

Publiqué un caso de estudio sobre Automatic Persisted Queries a escala: 90.9% de cache hit rate sobre un schema de 135,504 líneas, 2,089 tipos de query, 707 modelos de Prisma, con un runner de compilación aislado en cgroup v2 y un auto-warmup de cinco fases.

Lo que hice

  1. 01

    Cache de dos capas (APQ server-side + persist client-side)

    Por qué: APQ server-side recorta el cuerpo del request a un hash; el cache client-side IndexedDB + Service Worker elimina el round trip por completo para queries repetidas. Las dos capas cubren casos distintos — misma query, transporte diferente.

    Trade-off: Dos superficies de cache que invalidar ante cambios de schema. El patrón de invalidación por schema-hash maneja la mayor parte del problema; los edge cases requieren revisión manual.

  2. 02

    Auto-warmup pre-cachea las 2,130 queries hot

    Por qué: La latencia de cold-start es el costo que paga una réplica nueva hasta que el cache se llena. El auto-warmup de cinco fases pre-cachea las queries que más golpearán los clientes en los primeros 30 segundos, así la réplica calienta antes de que llegue el primer cliente real.

    Trade-off: Ceremonia de startup de cinco minutos por réplica. Vale la pena por una mejora de 30 segundos en cold-start sobre el camino de tráfico vivo.

  3. 03

    Aislamiento del runner de compilación con cgroup v2

    Por qué: La compilación del schema puede tirar por OOM un nodo compartido. El runner corre en un slice cgroup v2 con MemoryMax=16G para que un spike de compilación no escale en cascada a los workers de producción.

    Trade-off: La compilación corre más lenta en el slice que en bare metal. El costo de latencia está acotado; la ganancia de seguridad es total.

Lo que cambió

  • Cache hit rate en producción

    Antes: 0%

    Después: 90.9%

    Evidencia: case-study-apq-performance telemetry, 2026-Q3

  • Reducción de latencia p95

    Antes: 25 ms sin APQ

    Después: 12 ms con APQ

  • Reducción de payload en queries cacheadas

    Antes: 100% del body

    Después: 25% del body (75% de reducción)

  • Gasto SaaS externo del stack APQ

    Antes: $0 — aún no implementado

    Después: $0/mes — Redis auto-hospedado + contadores atómicos Lua EVAL

Trade-offs

El aislamiento cgroup v2 añade superficie operacional. Lo elegimos por encima de un servicio de compilación hosteado porque la cadena de auditoría tenía que ser auto-hospedable de extremo a extremo.

Lo que aprendí

Los caches de dos capas se pagan solo cuando la invalidación es honesta. La invalidación por schema-hash es la versión honesta; la invalidación por TTL es una mentira que se compone con el tiempo.

Stack

  • GraphQL
  • Apollo Server v4
  • Redis 7
  • IndexedDB

Evidencia

← Volver a proyectos · curated 2026-09-20