Con el auge de Internet, las aplicaciones modernas cada vez tienen que dar servicio a un mayor número de usuarios (imaginaros el número de peticiones por segundo que reciben los servidores de Facebook, Google o Twitter). Las arquitecturas tecnológicas que se utilizaban antiguamente para desarrollar aplicaciones no son suficientemente escalables como para soportar cientos de millones de usuarios, por lo que ha sido necesario re-inventar el concepto de "Arquitectura Tecnológica de Aplicaciones" para dar cabida a estas nuevas necesidades, apoyándose en productos innovadores que sustituyen a las antiguas arquitecturas Cliente-Servidor y las Bases de Datos Relacionales.
En febrero del 2011 estuve en el Spring I/O, y os conté como una de las charlas que me encantó se llamaba “Aplicaciones web ultraescalables con Redis”. Era uno de mis primeros contactos con las base de datos NoSQL (de las que también os hablé hace tiempo). Ha llovido mucho desde entonces, y de todos los nuevos productos con los que he trabajado en este tiempo hay uno que me parece especialmente revolucionario y visionario, REDIS.
¿Qué es Redis?
La mejor definición que se me ocurre de Redis es que se trata de “un servidor de caché de memoria que conoce la estructura de los datos que alberga” o dicho de otra forma, “una caché de datos con estructura”.
La idea de servidores de caché de memoria en los que se alberga información para su rápido acceso desde distintos puntos es muy antigua, y existen productos muy consolidados en el mercado, como el famoso Memcached, utilizado por sitios con muchos millones de usuarios como Wikipedia, Twitter, Youtube, WordPress, etc.
Y si ya existen otros productos servidores de caché de memoria, ¿qué aporta Redis sobre ellos y por qué es tan revolucionario? El factor que diferencia a Redis respecto a una caché de memoria convencional es que conoce la estructura de los datos que alberga. Lo más fácil para entender el concepto es poner un ejemplo:
|
Un poco de historia
El desarrollo de Redis fue iniciado por Salvatore Sanfilippo a principios del 2009, para acelerar los tiempos de respuesta de un producto llamado LLOGG. Pronto fue ganando popularidad, hasta que en Marzo del 2012 la empresa VMWare contrató a Salvatore para trabajar a tiempo completo en Redis. Poco después VMWare contrató también a uno de los principales desarrolladores de Redis, Pieter Noordhuis. Desde entonces Redis ha evolucionado muy rápidamente, incluyendo funcionalidades que le hacen tan útil.
Tipos de Estructura de Datos soportados por Redis
Actualmente Redis soporta cinco tipos de estructuras de datos:
- Cadenas de caracteres (Strings)
- Listas (Lists)
- Conjuntos (Sets)
- Conjuntos Ordenados (Sorted Sets)
- Tablas Hash (Hashes)
Aunque puede parecer una lista muy corta, sólo con estos cinco tipos de estructuras se pueden modelar infinitud de procesos y aplicaciones complejas, hasta el punto que muchos de los usuarios de Redis han terminado por sustituir completamente las bases de datos relacionales.
Otras funcionalidades que aporta
Además de actuar como servidor de estructuras de datos, Redis aporta otras funcionalidades muy interesantes:
- Expiración de claves basada en tiempo
- Sistema de Publicación y Subscripción a colas de mensajes
- Operaciones Atómicas y Transacciones
- Persistencia periódica de la memoria a disco, para recuperación ante caídas
- Replicación Maestro-Esclavo, para en el futuro implementar un Cluster
- Protocolo abierto, y uso desde decenas de lenguajes de programación
Además, con la versión 2.6 de Redis liberada a finales de Octubre de 2012, se introduce una funcionalidad clave, la posibilidad de ejecutar Scripts dentro del servidor Redis, escritos en lenguaje LUA.
Rendimiento y Uso de Redis
Redis está escrito en ANSI C muy optilizado, lo que le hace increíblemente rápido, he visto con mis propios ojos a un sólo servidor de Redis procesar más de 150.000 peticiones por segundo. Este es uno de los motivos por los que se ha hecho tan popular, y es utilizado en multitud de sitios actualmente, algunos tan famosos como Flickr, Stack Overflow, GitHub, o la española Telefónica Digial.
El futuro de Redis
Desde la liberación de la versión 2.6, el equipo de Redis está bastante centrado en el desarrollo del Cluster de Redis, cuyo trabajo comenzó hace tiempo pero fue delegado a un segundo plano hasta que estuviese listo el Scripting en LUA (el cluster en principio estaba planificado para ser liberado a finales del 2011). Ahora que la versión 2.6 está liberada y estable, parece que hay avances en la implementación del Cluster que se liberará en la versión 3.0.
Algunos Enlaces Interesantes
7 comentarios:
Muy bueno! Voy a tener que hacer por coincidir contigo en el comedor.
D.M.
Muchisimas gracias por la entrada, por fin una explicacion clara de lo que es Redis :)
buen aporte ..bien explicado gracias.
Buen aporte, saludos
Buen aporte, gracias por la información
Complemtamente de acuerdo.
Redis es un sistema de cacheado extremadamente potente y con buenas prácticas puede ayudarte a optimizar tu web una barbaridad. La velocidad de lectura que tiene es altísima aparte al guardar el objeto ya con todo cargado lo que puede evitar varias consultas o procesamientos.
Aquí añado mi granito de arena sobre el mismo tema sobre para qué sirve redis
Un saludo.
Publicar un comentario