Comúnmente conocemos redis como un sistema de caché distribuido que podemos usar en modo PaaS gracias a la plataforma de azure. Pero redis se define como un sistema de base de datos NoSql de tipo clave valor, que funciona perfectamente como memoria caché, pero que además tiene muchas características adcionales. A lo largo de esta charla comentaremos las posibilidades de este servicio y cómo podemos explotarlas.
5. • Redis es un sistema de almacenamiento y cache avanzado
• usa datos de tipo clave-valor
• open source y con licencia BSD.
• Usualmente se le denomina servidor de estructura de datos ya que
una clave puede contener: strings, hashes, lists, sets, sorted sets,
bitmaps y hyperloglogs.
redis
6. • Trabaja en memoria
• pero persiste en forma de dumps y logs de comandos
• Tiene configuraciones simples para actuar como cluster y
master/slave
• Soporta transacciones
• Implementa Publicación/Suscripción
• Procesos en forma de scripts en Lua
• …
redis
7. • Datos de Interes
• redis = REmote DIctionary Server
• La primera release fue en 2009
• La versión más reciente: 3.0.0 (3.2 inestable)
• Escrito en C ANSI
• Tiene librerías para más de 30 lenguajes de programación
• Una buena documentación
redis
8. • Números
• un cluster puede componerse de hasta ~1000 nodos
• 16384 slots de almacenamiento de claves (divididos en los master del cluster)
• 1 millón de pequeñas “key -> string” usan ~ 100 MB de memoria
• un solo hilo de ejecución – pero la CPU no será un cuello de botella
• un sistema normal linux puede enviar 500k requests/segundo
• el límite de almacenamiento es el mismo que el de memoria disponible
• max. 232 keys
redis
9. redis memcached
Sistema distribuido X X
Trabaja en memoria X X
Persiste eventualmente X
Caché LRU X X
Almacén de datos X
Features: Pub/Sub, Lua Scripting, … X
Diferentes estructuras de datos X
Multi-hilo X
Alta velocidad X X
Operaciones con datos X
redis vs. memcached
10. • Casos donde aplica redis:
• Listados de últimos xxx: LPUSH y LTRIM
• Tablas de top o de rankings: ZADD, ZREVRANGE y ZREVRANGEBYSCORE
• Cálculos de tipo “karma”: ZADD, ZRANK, ZINCRBY
• Contadores usuarios activos: INCR y EXPIRE
• Publicación y suscripción: mediator
• QUEUE’s (colas): BLPOP y LPUSH
• Textos auto-completables: ZADD, ZRANK y ZRANGE
• Almacenar información que caduca: EXPIRE
redis
11.
12.
13. - Platform as a Service
- Azure Cache Redis
- Software as a Service
- Redis Cloud by Redis Labs, Inc.
- http://azure.microsoft.com/en-us/marketplace/partners/garantiadata/redis/
- Infrastructure as a Service
- Virtual Machines
Diferentes opciones
16. root@vm:/# apt-get install redis-server
root@vm:/# wget http://download.redis.io/redis-
stable.tar.gz
root@vm:/# tar xvzf redis-stable.tar.gz
root@vm:/# cd redis-stable
root@vm:/# make
Instalar en máquina virtual Linux
v. 3.0.0
20. Master/Slave
• La replicación es asíncrona
• Un maestro puede tener ‘n’ esclavos
• Los esclavos pueden ser maestro de otros esclavos
• La replicación no bloquea ni al maestro ni a los esclavos
• Un esclavo puede ser de solo lectura
• Se puede eliminar la persistencia del maestro y que la realice un
esclavo
22. Master/Slave: comandos
> SLAVEOF [ip] [port]
Si no se especifica nada y ya es un esclavo, lo promociona a maestro.
Si se especifica la ip y el puerto, lo convierte en esclavo en caliente
24. redis-sentinel:
• Monitorización: comprueba que maestros y esclavos funcionen como
se espera
• Notificación: notifica de errores mediante una api
• Failover automático: si detecta un error puede promocionar un
esclavo para sustituir un maestro
• Proveedor de configuración: los clientes preguntarán a redis-sentinel
cual es el servidor responsable antes de conectar.
25. redis-sentinel: configuración
sentinel monitor <name> <ip> <port> <quorum>
sentinel down-after-milliseconds <name> 60000
sentinel failover-timeout <name> 180000
sentinel parallel-syncs <name> 1
*quorum: número de sentinels que tienen que detectar un estado de
error para marcar un maestro como ODOWN
26. Cluster
• A partir de la v. 3.0
• Añade:
• La capacidad de fragmentar la información en varios nodos de forma
automática
• La capacidad de continuar con las operaciones cuando una serie de sub
nodos experimentan errores
28. Cluster
• Existen 16384 hash slots
• Para saber el slot: slot_id = CRC16(key) mod 16384
• Si se escribe algo entre llaves dentro de la clave, solo se calcula el slot con esa
parte:
• {users:followers}123 122 124 125
• {users:followers}124 122 123 125
• Acepta una configuración master/slave dentro del cluster
• Si un maestro falla promociona a su esclavo más hábil como maestro
• Cluster Bus: cada nodo se conecta con los demás nodos a través del
bus.
31. Master A
Slave A1 Slave A2
Sentinel
Master B
Slave B1 Slave B2
Sentinel
Master C
Slave C1 Slave C2
Sentinel
High Availability ≥2.8
32. Master A
Slave A1 Slave A2
Master B
Slave B1 Slave B2
Master C
Slave C1 Slave C2
High Availability ≥3.0
33.
34. ■ Maneja cadenas de texto (o byte arrays)
■ 5 tipos de datos: Keys, Hashes, Lists, Sets y Sorted Sets
■ Pub/Sub, Lua Scripts, colas, transacciones …
■ Mono-hilo, en memoria pero persiste en forma de snapshots
■ Recomendable instalar la última versión estable (3.0.0 actualmente)
■ Para usarlo como memoria caché: Azure redis cache (PaaS)
■ Para usarlo facilmente: Redis Cloud (SaaS)
■ Para instalaciones simples usar master/slave (IaaS)
■ Para clusters complejos usar la tecnología de cluster (IaaS)
■master/slave
■ redis-sentinel
■ cluster
Resumen
36. ■Sitio oficial de redis
http://redis.io/
■Sitio del fork de redis para Windows
https://github.com/MSOpenTech/Redis
■Servicio en Azure de cache redis
http://azure.microsoft.com/es-es/services/cache/
■Redis Cloud by Redis Labs
http://azure.microsoft.com/en-us/marketplace/partners/garantiadata/redis/
■Documentación de redis
https://github.com/antirez/redis-doc
Bibliografía