Publicaciones
Caso de estudio APQ
Período: nov 2025 —
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
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.
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.
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