Optimización de Redis: el papel de los hash slots en la latencia

Fuentes: Optimizing Redis: The Role of Hash Slots in Latency

Un ingeniero de software describe cómo la gestión de los hash slots en Redis determinó la latencia de su servicio de asignación de entregas en una aplicación de economía gig. El problema surgió al intentar cachear estimaciones de rutas repetitivas para reducir la carga sobre el motor de enrutamiento, que era el principal cuello de botella. La solución inicial, que utilizaba coordenadas hexagonales H3 como claves, falló catastróficamente porque cada clave única caía en un slot diferente, impidiendo el uso eficiente de comandos multi-clave como MGET o MSET.

El análisis de trazas reveló que Redis distribuye las claves mediante un módulo de CRC16 sobre 16.384 slots, lo que significaba que claves similares podían terminar en nodos distintos. Para resolver esto, el equipo implementó un sistema de 'hash tags' personalizados, utilizando un algoritmo de fuerza bruta para generar identificadores que fuerzan a las claves a un slot específico. Esto permitió agrupar miles de claves en comandos de red eficientes, reduciendo la latencia de lectura y mejorando el rendimiento global. Además, se identificó que el uso de JSON para almacenar los valores de caché consumía recursos de CPU innecesarios, lo que se corrigió cambiando a un formato de valores separados por comas. El artículo ilustra la importancia de medir el rendimiento antes de optimizar y destaca cómo la comprensión profunda de los mecanismos internos de Redis es crucial para la escalabilidad en sistemas de alta concurrencia.