Este incidente describe una serie de desafíos de escalabilidad encontrados durante la construcción de un sistema de mapa de dependencias de servicios en tiempo real en Netflix. La causa raíz subyacente fue la incapacidad de la arquitectura inicial para manejar el volumen y la distribución de datos a escala de hyperscaler. Los problemas iniciales de lag en Kafka revelaron que la ingesta no podía seguir el ritmo, lo que llevó a la necesidad de optimizar las particiones y los parámetros de fetch.
La principal cascada de fallos se manifestó en los 'hot nodes'. La distribución desigual del tráfico, exacerbada por la naturaleza de ley de potencia de las dependencias de servicios (pocos servicios muy populares), hizo que algunas instancias se sobrecargaran. Esto llevó a un consumo excesivo de memoria, thrashing de Garbage Collection (GC) y, finalmente, a la caída de instancias, redistribuyendo la carga y potencialmente causando más fallos. Las salvaguardas iniciales, como el hashing consistente, no fueron suficientes para mitigar la concentración de datos.
Las optimizaciones posteriores abordaron la ineficiencia del procesamiento y la gestión de la memoria. El uso de estructuras de datos inmutables, aunque una buena práctica general, se convirtió en una fuente de presión de GC a millones de asignaciones por segundo. La complejidad de los Reactive Streams con backpressure también presentó una curva de aprendizaje, llevando a configuraciones subóptimas y dificultades de depuración. La solución implicó una reevaluación pragmática de las mejores prácticas, priorizando el rendimiento basado en mediciones sobre la convención, y una inversión significativa en la comprensión de las herramientas subyacentes.