Netflix publicó la Parte 3 de su serie Real-Time Distributed Graph (Grafo Distribuido en Tiempo Real), detallando la API de Ejecución gRPC que alimenta el servicio de consultas en un grafo con 8 mil millones de nodos y 150 mil millones de aristas. La capa de servicio logra una latencia inferior a 100ms en decenas de miles de consultas por segundo mientras absorbe 6 millones de escrituras por segundo. Los autores Nilesh Mishra y Ajit Koti explican los compromisos de diseño que permiten esta escala.

Netflix identificó dos patrones de acceso opuestos. Las consultas anchas y superficiales—búsquedas de seguridad como "¿qué dispositivos han transmitido desde esta cuenta en los últimos 30 días?"—permanecen a un salto de profundidad pero se ramifican en cientos de aristas por cuenta activa, requiriendo filtrado temporal en propiedades de aristas a escala. Las consultas profundas y estrechas—rastreos de personalización como "muéstrame el historial de visualización de Stranger Things de un miembro en todos los perfiles"—encadenan 3 a 4 saltos secuenciales, cada uno dependiendo de resultados anteriores. Un recorrido de 4 saltos ejecutado del lado del cliente cuesta 40ms a 10ms por salto de red antes de devolver ningún dato comercial.

Netflix eligió ejecución breadth-first sobre recorrido depth-first. Depth-first serializa cada ruta a través del grafo, multiplicando la latencia proporcionalmente a la profundidad de ramificación. Breadth-first despacha todas las aristas en un salto dado en paralelo, espera a que la frontera se complete y luego avanza. Para una cuenta con 5 perfiles, cada uno con cientos de títulos, esto elimina un multiplicador de serialización 5× en el bucle interno.

La API de Ejecución gRPC codifica el plan de recorrido completo—todos los saltos, filtros por salto, límites de ramificación—en un único RPC. La capa de servicio se ejecuta del lado del servidor, por lo que los clientes emiten una solicitud y reciben una respuesta independientemente de la profundidad del salto. Esto elimina la penalización de viaje de ida y vuelta del cliente y mueve el control de ejecución al límite del servicio donde se conoce la topología de almacenamiento. El diseño de API sigue patrones Gremlin: los llamadores encadenan pasos de recorrido y aplican filtros de forma declarativa.

El almacenamiento se encuentra en KVDAL—una Capa de Abstracción de Datos Clave-Valor construida sobre Apache Cassandra. KVDAL utiliza un mapa de dos niveles: un record_id se asigna a elementos ordenados (nodos de destino y propiedades de aristas). Una única búsqueda KVDAL recupera la lista de adyacencia completa para un nodo. Todo acceso se ejecuta sobre gRPC, haciendo que el backend de almacenamiento sea intercambiable sin cambios de código ascendente. La implementación abarca 27 espacios de nombres en 12 clústeres Cassandra en 2.400 instancias EC2, manteniendo 2 millones de lecturas/seg y 6 millones de escrituras/seg en latencia de milisegundos de un solo dígito.

Netflix evaluó bases de datos de grafo nativas antes de comprometerse con esta pila. Neo4j funcionó aceptablemente con millones de registros pero se degradó en cientos de millones debido a requisitos de memoria y límites de escalabilidad horizontal. AWS Neptune fue rechazado por su arquitectura de escritor único, que crea un cuello de botella en la ingesta en tiempo real de alto volumen entre regiones. El enfoque adjacency-list-on-Cassandra intercambia expresividad de consulta nativa de grafo por previsibilidad operacional y escala horizontal.

Las garantías de consistencia durante el recorrido en un conjunto de datos activo de 150 mil millones de aristas bajo 6 millones de escrituras por segundo son una restricción activa en lugar de un problema completamente resuelto. La aplicación de esquema—cargada en memoria y validada estrictamente en la capa de servicio—previene que rutas de recorrido inválidas lleguen al almacenamiento, protegiéndose contra planes de consulta que se degradan bajo distribuciones de datos reales.

Para arquitectos que construyen capas de servicio de recomendación o recuperación, el patrón de API de Ejecución gRPC (codificar el plan de recorrido completo, ejecutar del lado del servidor, devolver una respuesta) es el aprendizaje portátil. Las matemáticas de 10ms-por-salto se aplican a cualquier almacén de grafo distribuido independientemente de la tecnología de almacenamiento subyacente.