El incidente principal descrito en el artículo no es un fallo único y catastrófico, sino una serie de desafíos de escalabilidad y rendimiento que surgieron durante la implementación de la primera versión del sistema de Service Topology en Netflix. La causa raíz subyacente fue la incapacidad de la arquitectura inicial para manejar la escala y la naturaleza de los datos de producción, lo que llevó a una cascada de problemas de rendimiento y estabilidad. Inicialmente, el sistema funcionaba en entornos de desarrollo, pero la distribución de tráfico de ley de potencia (power-law distribution) en producción, donde unos pocos servicios populares generaban un volumen de datos desproporcionadamente alto, expuso fallos fundamentales en el diseño.
Las salvaguardas iniciales, como el uso de consistent hashing para la distribución de carga, fallaron porque no consideraron la concentración inherente de datos alrededor de servicios populares. Esto creó 'nodos calientes' (hot nodes) que experimentaron una sobrecarga masiva de CPU y memoria, llevando a pausas prolongadas de Garbage Collection (GC) y, eventualmente, a la caída de instancias. La elección de gRPC para la comunicación entre etapas también contribuyó a la sobrecarga de recursos, consumiendo más CPU en serialización que en lógica de negocio. Además, la adopción de estructuras de datos inmutables, aunque una buena práctica general, generó una tasa de asignación de objetos insostenible a la escala de millones de registros por segundo, exacerbando la presión de memoria y las pausas de GC.
La cascada de fallos se manifestó como un ciclo vicioso: el lag en los consumidores de Kafka aumentaba la cantidad de datos en memoria, lo que incrementaba la presión sobre los nodos calientes. Las pausas de GC en estos nodos ralentizaban aún más el procesamiento, lo que a su vez aumentaba el lag y la presión de memoria, llevando a la inestabilidad del sistema. La complejidad de los Reactive Streams, aunque una herramienta poderosa, también presentó una curva de aprendizaje que inicialmente dificultó el diagnóstico y la resolución de problemas de flujo y backpressure. La falta de un monitoreo granular en las etapas del pipeline y la comprensión incompleta de los límites asíncronos contribuyeron a la dificultad de identificar y aislar los cuellos de botella.