las cronicas de redis
TRANSCRIPT
#GlobalAzure
Las crónicas de redisFernando Escolar
■ ¿qué es redis?■ ¿para qué sirve?
■ instalando redis
■ clusters■ master/slave
■ redis-sentinel
■ cluster
■ resumen
Agenda
• 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
• 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
• 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
• 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
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
• 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
- 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
https://github.com/MSOpenTech/Redis
Nuget
PM> Install-Package Redis-64
Chocolatey
c:\> choco install redis-64
Instalar en máquina virtual Windows
v. 2.8.19
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
Master
Slave 1 Slave 2
Master/Slave
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
Master/Slave: configuración
slaveof <master-ip> <master-port>
masterauth <master-password>
slave-read-only [yes|no]
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
Master
Slave 1 Slave2
Sentinel
redis-sentinel
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-sentinelcual es el servidor responsable antes de conectar.
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
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
Master 1 Master 2 Master 3
Cluster
Hash slots 0-5500 Hash slots 5501-11000 Hash slots 11001-16384
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.
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
Cluster: configuración
> CLUSTER MEET ip port
> CLUSTER NODES
> CLUSTER REPLICATE node-id
> CLUSTER ADDSLOTS slot [slot] ...
> CLUSTER SAVECONFIG
> CLUSTER RESET [HARD|SOFT]
Cluster: comandos
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
Master A
Slave A1 Slave A2
Master B
Slave B1 Slave B2
Master C
Slave C1 Slave C2
High Availability ≥3.0
■ 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
¿Preguntas?
■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
Thanks!