Download - Las cronicas de redis

Transcript
Page 1: Las cronicas de redis

#GlobalAzure

Las crónicas de redisFernando Escolar

Page 2: Las cronicas de redis
Page 3: Las cronicas de redis
Page 4: Las cronicas de redis

■ ¿qué es redis?■ ¿para qué sirve?

■ instalando redis

■ clusters■ master/slave

■ redis-sentinel

■ cluster

■ resumen

Agenda

Page 5: Las cronicas de redis

• 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

Page 6: Las cronicas de 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

Page 7: Las cronicas de 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

Page 8: Las cronicas de 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

Page 9: Las cronicas de 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

Page 10: Las cronicas de redis

• 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

Page 11: Las cronicas de redis
Page 12: Las cronicas de redis
Page 13: Las cronicas de 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

Page 14: Las cronicas de redis
Page 15: Las cronicas de redis

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

Page 16: Las cronicas de redis

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

Page 17: Las cronicas de redis
Page 18: Las cronicas de redis
Page 19: Las cronicas de redis

Master

Slave 1 Slave 2

Master/Slave

Page 20: Las cronicas de redis

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

Page 21: Las cronicas de redis

Master/Slave: configuración

slaveof <master-ip> <master-port>

masterauth <master-password>

slave-read-only [yes|no]

Page 22: Las cronicas de redis

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

Page 23: Las cronicas de redis

Master

Slave 1 Slave2

Sentinel

redis-sentinel

Page 24: Las cronicas de redis

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.

Page 25: Las cronicas de redis

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

Page 26: Las cronicas de redis

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

Page 27: Las cronicas de redis

Master 1 Master 2 Master 3

Cluster

Hash slots 0-5500 Hash slots 5501-11000 Hash slots 11001-16384

Page 28: Las cronicas de redis

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.

Page 29: Las cronicas de redis

appendonly yes

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

Cluster: configuración

Page 30: Las cronicas de redis

> CLUSTER MEET ip port

> CLUSTER NODES

> CLUSTER REPLICATE node-id

> CLUSTER ADDSLOTS slot [slot] ...

> CLUSTER SAVECONFIG

> CLUSTER RESET [HARD|SOFT]

Cluster: comandos

Page 31: Las cronicas de redis

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

Page 32: Las cronicas de redis

Master A

Slave A1 Slave A2

Master B

Slave B1 Slave B2

Master C

Slave C1 Slave C2

High Availability ≥3.0

Page 33: Las cronicas de redis
Page 34: Las cronicas de redis

■ 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

Page 35: Las cronicas de redis

¿Preguntas?

Page 36: Las cronicas de redis

■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

Page 37: Las cronicas de redis
Page 38: Las cronicas de redis

Thanks!