10 puntos por kunggom 2020-09-03 | 1 comentarios | Compartir por WhatsApp

Redis es una base de datos en memoria ampliamente utilizada para el caché de servicios en línea. Pero si se usa mal, pueden surgir problemas inesperados o incluso producirse fallas graves. Hace poco fui a una librería y por casualidad conocí a un ingeniero en activo que trabaja en el equipo de SRE de cierta empresa; durante la conversación, esa persona dijo algo como: “Redis es en realidad un mal necesario. Hay que usarlo pensando que tarde o temprano una incidencia relacionada va a estallar al menos una vez”.

Referencia - Kakao "Si usas mal Redis, te hundes":

https://zdnet.co.kr/view/?no=20131119174125

Referencia - La causa del error de Coupang fue la base de datos de código abierto 'Redis DB':

http://www.digitaltoday.co.kr/news/articleView.html?idxno=212904

Así, Redis es una herramienta que solo debe usarse con buen conocimiento y mucho cuidado.

La introducción fue larga. Presentamos un documento de NHN que, con base en una charla de RedisConf 2020, señala tres puntos donde pueden surgir problemas de rendimiento al usar Redis como caché en un entorno de tráfico a gran escala, y explica cómo resolverlos. (Coreano)

  • Cache Stampede: como el espacio de caché es limitado, normalmente se establece un tiempo de expiración (TTL) para los datos almacenados. Pero si siguen llegando solicitudes de lectura para esos datos cuando se acerca el vencimiento del caché, esas lecturas se concentran de golpe en la base de datos, y luego se convierten en solicitudes de escritura duplicadas hacia Redis. A esto se le llama cache stampede, y como solución se puede renovar de antemano el valor del TTL mediante un algoritmo basado en distribución de probabilidad, o introducir el concepto de debounce (ejecutar solo el último evento entre varios eventos repetidos).

  • Hot Keys: el rendimiento también puede caer cuando las lecturas se concentran en una sola clave. El texto presenta como contramedida un método para crear varias réplicas agregando un prefijo al nombre de la clave y luego distribuir aleatoriamente las lecturas entre esas réplicas con prefijo.

  • Compression: también puede haber degradación de rendimiento al guardar datos grandes en Redis. En ese caso, solo con aplicar una compresión adecuada se pueden obtener grandes beneficios en velocidad y uso de memoria. Como el método y la tasa de compresión adecuados pueden variar según la situación y el entorno, al aplicarlo es indispensable realizar pruebas de benchmark que reproduzcan el entorno de uso.

1 comentarios

 
kunggom 2020-09-03

Referencia: un artículo con código de ejemplo del algoritmo basado en distribución de probabilidad mencionado arriba (Probablistic Early Recomputation):

https://engineering.linecorp.com/ko/blog/…