Redis, un apoyo para construir aplicaciones con mejor rendimiento

Luis Felipe Mesa
28 de septiembre de 2018
5 min. de lectura

Construir aplicaciones que proporcionen niveles de rendimiento adecuados para realizar la función para las que fueron construidas es uno de los atributos de calidad más importantes a la hora de realizar el diseño y la implementación de sistemas informáticos. Ya sea que estas se construyan como una aplicación monolítica o se descompongan en microservicios.

Lo que se espera de las aplicaciones es que respondan rápidamente ante las solicitudes que reciben de los usuarios y que reduzcan los tiempos de indisponibilidad del sistema ya sea por fallas en su procesamiento o labores de mantenimiento.

En la búsqueda de construir aplicaciones que cumplan con estas expectativas de los usuarios, se han teorizado arquitecturas y se han construido frameworks y herramientas puestas a nuestra disposición para la construcción de aplicaciones con estos atributos de calidad.

Redis es una de estas herramientas que nos ayuda a mejorar los tiempos de respuesta de acceso a información en nuestras aplicaciones. En este post conoceremos un poco sobre esta herramienta, ¿qué es y cómo utilizarla?

¿Qué es Redis?

Redis (Remote Dictionary Server) es una base de datos NoSQL distribuida para almacenar estructuras de datos en memoria con un modelo Llave-valor, que goza de gran popularidad y reconocimiento, gracias a la velocidad de acceso los datos, soporte a varios tipos de datos y su amplio conjunto de operaciones sobre la información que almacena. Además, tiene una arquitectura escalable y de alta disponibilidad.

Si quieres saber más de base de datos NoSQL, lee: los beneficios de las bases de datos NoSQL

Características de Redis

Redis cuenta con varias características que lo convierten en una opción interesante como un componente en el que nos podemos apoyar para la construcción aplicaciones, tales como:

Almacenamiento en memoria: los datos en estructuras Llave-valor se almacenan en la memoria para facilitar el rápido acceso y escritura de la información.

Persistencia en disco: aparte del almacenamiento en memoria, Redis guarda datos en disco para posibilitar la recuperación de la información en caso de una falla en el componente.

Estructuras de datos: no solo almacena cadena de texto como valor en una respectiva llave, sino que también soporta estructuras de datos más complejas como Lists, Sets, Sorted Sets, Hashes.

La siguiente imagen muestra los tipos de datos soportados por Redis.

datos_soportados_

Expiración de datos: en Redis es posible asignar a cada registro de datos un tiempo de expiración. Cuando se cumple, el registro se remueve automáticamente por el sistema sin requerir ninguna intervención por parte de las aplicaciones.

Políticas de desalojo: es un mecanismo para remover automáticamente registros antiguos y adicionar nuevos, cuando la capacidad de la base de datos alcance un límite definido.  Cuando eso pase, se pueden configurar políticas para indicarle a Redis cómo actuar.

Replicación: el modo de configuración de las réplicas en Redis es maestro-esclavo. Cuando el maestro recibe las escrituras de datos, replica esta información de forma asíncrona a los nodos esclavos.

Si el enlace entre los nodos esclavos y el maestro se rompe, los esclavos intentarán reconectarse automáticamente y ejecutar procedimientos de sincronización parcial o completa para obtener la información que no se recibió desde el maestro debido a la desconexión.

La configuración de replicación se muestra en la siguiente imagen.

replicacion_redis

Cluster: la creación de un cluster de Redis intenta solventar los requerimientos de aplicaciones que exigen el manejo de grandes volúmenes de datos y mantiene niveles de rendimiento en la escritura y lectura de datos, que no pueden ser almacenados en un solo nodo o con una réplica.

Soporte patrón Publicador-Suscriptor: Redis implementa un sistema de mensajería Publicador-Subscriptor, donde el intercambio de mensajes se da a través de canales, a los cuales los publicadores envían mensajes que serán recibidos por los consumidores suscritos al canal, desacoplando la interacción entre los diferentes componentes y favoreciendo la escalabilidad del sistema.

La siguiente imagen muestra el patrón pub/sub en redis.

patron_pub_sub

Algunos casos de uso de Redis

Teniendo en cuenta la naturaleza de Redis para ofrecer alto rendimiento y baja latencia en las operaciones de escritura, y principalmente de lectura, es normal encontrarlo en las diferentes implementaciones de sistemas siendo utilizado para almacenamiento principal, caché de alta velocidad y Broker de mensajes.

Almacenamiento principal: en este caso, Redis se convierte en la fuente de verdad para muchas aplicaciones que requieren responder muy rápidamente a las solicitudes que reciben, tales como ingestión de datos en tiempo real, monitoreo de la operación de un sistema y extraer datos para realizar procedimientos analíticos.

Caché de alta velocidad: es el uso más popular para lo que se utiliza Redis, con lo podemos construir aplicaciones con mejores capacidades de responsividad y escalabilidad al contar con los datos mucho más cerca de las aplicaciones, reduciendo a su vez el tráfico hacia las fuentes de datos.

Cuando la aplicación recibe una petición para obtener un recurso, como por ejemplo obtener las listas de las ciudades principales de un país, la aplicación busca primero si la información está en Redis, si no la encuentra, hace la consulta a la fuente de datos, y almacena los datos en Redis para entregar  la respuesta rápidamente en próximas peticiones.

Broker de mensajes: Redis puede usarse para comunicar diferentes procesos en un sistema distribuido, haciendo uso de la estructura de datos de listas y las operaciones que soporta. Se puede implementar un sistema de colas sencillo en el que un productor envía valores a la lista, mientras que un consumidor los va retirando y procesando.

Por otra parte, como se mencionó en las características de Redis, este implementa el patrón Publicador /Suscriptor, el cual puede utilizarse por una aplicación para producir eventos que puedan ser de interés a otras aplicaciones del sistema, como por ejemplo notificar el ingreso o retiro de un usuario en un grupo de chat, notificar a varias aplicaciones que el valor de una divisa cambió, enviar un mensaje a todos los clientes conectados a un canal o el valor de un sensor, entre otros.

Ante la popularidad e importancia de esta base de datos en algunas arquitecturas de software, existen clientes para gran cantidad de lenguajes de programación tales como Python, Java, Go, Scala, Node, entre otros. La lista de clientes de redis se puede acceder aquí.

Por todo esto, Redis es un componente de software que goza de gran popularidad, gracias a las funcionalidades que ofrece a los diferentes tipos de aplicaciones que en común comparten la necesidad de acceso e intercambio de información a una alta velocidad.

Por lo que es un componente que debe ser puesto en consideración a la hora de diseñar nuestras arquitecturas de software, y en particular, las arquitecturas basadas en microservicios por el papel preponderante que puede desempeñar.

Nuevo llamado a la acción

Suscríbete