Redis 6: database, cache e broker di messaggi ad alta velocità

Come molti, potresti pensare a Redis solo come una cache. Questo punto di vista non è aggiornato.

Essenzialmente, Redis è un archivio di strutture dati in memoria NoSQL che può persistere su disco. Può funzionare come database, cache e broker di messaggi. Redis dispone di replica incorporata, script Lua, rimozione di LRU, transazioni e diversi livelli di persistenza su disco. Fornisce alta disponibilità tramite Redis Sentinel e partizionamento automatico con Redis Cluster.

Il modello di dati Redis di base è il valore-chiave, ma sono supportati molti tipi diversi di valori: stringhe, elenchi, set, set ordinati, hash, stream, HyperLogLog e bitmap. Redis supporta anche gli indici geospaziali con query e flussi di raggio.

[Anche su: Come Redis graffiava e prudeva e cambiava i database per sempre]

A Redis open source, Redis Enterprise aggiunge funzionalità per velocità, affidabilità e flessibilità aggiuntive, nonché un database cloud come servizio. Redis Enterprise è scalabile in modo lineare fino a centinaia di milioni di operazioni al secondo, ha una distribuzione globale attiva-attiva con latenza locale, offre Redis su Flash per supportare set di dati di grandi dimensioni al costo dell'infrastruttura di un database basato su disco e fornisce il 99,999% di uptime basato su -in durabilità e failover di una sola cifra in secondi.

Inoltre, Redis Enterprise estende la funzionalità Redis di base per supportare qualsiasi metodo di modellazione dei dati con moduli come RediSearch, RedisGraph, RedisJSON, RedisTimeSeries e RedisAI e consente di eseguire operazioni tra e tra i moduli e il core. Tutto questo viene fornito mantenendo la latenza del database inferiore a un millisecondo.

Funzionalità e casi d'uso principali di Redis

Cosa significa che Redis può ora funzionare come database, cache e broker di messaggi? E quali sono i casi d'uso supportati da questi ruoli?

La cache è la funzione classica di Redis. In sostanza, Redis si trova di fronte a un database basato su disco e salva query e risultati; l'applicazione controlla prima la cache Redis per i risultati memorizzati e interroga il database basato su disco per i risultati non attualmente nella cache. Dato il tasso di risposta inferiore al millisecondo di Redis, di solito questo è un grande vantaggio per le prestazioni dell'applicazione. I timer di scadenza e l'eliminazione di LRU (utilizzata meno di recente) dalla cache Redis aiutano a mantenere la cache aggiornata e a utilizzare la memoria in modo efficace.

Il session store è una parte importante delle moderne applicazioni web. È un posto comodo per conservare le informazioni sull'utente e le sue interazioni con l'applicazione. In un'architettura di web farm, l'hosting del session store direttamente sul server web richiede che l'utente "aderisca" allo stesso server back-end per richieste future, il che può limitare il bilanciamento del carico. L'utilizzo di un database basato su disco per l'archivio sessioni elimina la necessità di associare una sessione a un singolo server Web, ma introduce un'ulteriore fonte di latenza. L'utilizzo di Redis (o di qualsiasi altro database in memoria veloce) come archivio di sessione spesso si traduce in un'architettura dell'applicazione Web a bassa latenza e velocità effettiva.

Redis può funzionare come broker di messaggi utilizzando tre diversi meccanismi e uno dei casi d'uso importanti per Redis come broker di messaggi è fungere da collante tra i microservizi. Redis dispone di un meccanismo di notifica di pubblicazione / sottoscrizione a basso overhead che facilita il fuoco e dimentica i messaggi, ma non può funzionare quando il servizio di destinazione non è in ascolto. Per una coda di messaggi più persistente, simile a Kafka, Redis utilizza i flussi, che sono coppie chiave-valore ordinate con timestamp in una singola chiave. Redis supporta anche elenchi di elementi doppiamente collegati archiviati in una singola chiave, utili come coda FIFO (first-in / first-out). I microservizi possono, e spesso lo fanno, utilizzare Redis come cache oltre a utilizzarlo come broker di messaggi, sebbene la cache debba essere eseguita in un'istanza di Redis separata dalla coda dei messaggi.

La replica di base consente a Redis di scalare senza utilizzare la tecnologia cluster della versione Redis Enterprise. La replica Redis utilizza un modello leader-follower (chiamato anche master-slave), che è asincrono per impostazione predefinita. I client possono forzare la replica sincrona utilizzando un comando WAIT, ma anche questo non rende Redis coerente tra le repliche.

Redis ha lo scripting Lua lato server, che consente ai programmatori di estendere il database senza scrivere moduli C o codice lato client. Le transazioni Redis di base consentono a un client di dichiarare una sequenza di comandi come un'unità non interrompibile, utilizzando i comandi MULTI ed EXEC per definire ed eseguire la sequenza. Questo è non è la stessa come operazioni relazionali con rollback.

Redis ha diversi livelli di persistenza su disco che l'utente può selezionare. La persistenza RDB (file database Redis) acquisisce snapshot point-in-time del database a intervalli specificati. La persistenza AOF (file di solo aggiunta) registra ogni operazione di scrittura ricevuta dal server. È possibile utilizzare sia la persistenza RDB che AOF per la massima sicurezza dei dati.

Redis Sentinel, esso stesso un sistema distribuito, fornisce un'elevata disponibilità per Redis. Esegue il monitoraggio delle istanze master e replica, notifica se c'è qualcosa di sbagliato e failover automatico se il master smette di funzionare. Serve anche come provider di configurazione per i client.

Redis Cluster fornisce un modo per eseguire un'installazione Redis in cui i dati vengono automaticamente suddivisi in più nodi Redis. Redis Cluster fornisce anche un certo grado di disponibilità durante le partizioni, sebbene il cluster smetterà di funzionare se la maggior parte dei master non è disponibile.

Come accennato in precedenza, Redis è un archivio di valori-chiave che supporta stringhe, elenchi, set, set ordinati, hash, flussi, HyperLogLog e bitmap come valori. Uno dei casi d'uso più semplici e comuni è l'utilizzo di valori interi come contatori. A supporto di ciò, INCR (incremento), DECR (decremento) e altre singole operazioni sono atomiche e quindi sicure in un ambiente multi-client. In Redis, quando le chiavi vengono manipolate verranno create automaticamente se non esistono già.

> SET connessioni 10

ok

> Collegamenti INCR

(numero intero) 11

> Collegamenti INCR

(numero intero) 12

> DEL collegamenti

(numero intero) 1

> Collegamenti INCR

(numero intero) 1

> Collegamenti INCRBY 100

(numero intero) 101

> Collegamenti DECR

(numero intero) 100

> Collegamenti DECRBY 10

(numero intero) 90

Anche gli altri tipi di strutture di valori hanno i propri esempi nel tutorial Try Redis. Il tutorial era in manutenzione quando l'ho provato io stesso; Mi aspetto che venga risolto presto, poiché Redis Labs è stato coinvolto in quello che originariamente era uno sforzo della comunità.

Esistono numerosi moduli aggiuntivi per Redis tra cui (in ordine decrescente di popolarità) un modulo di rete neurale, ricerca full-text, SQL, un tipo di dati JSON e un database a grafo. Le licenze per i moduli sono impostate dagli autori. Alcuni dei moduli che funzionano con Redis sono principalmente moduli per Redis Enterprise.

Miglioramenti di Redis Enterprise

Utilizzando un'architettura cluster nulla condivisa, Redis Enterprise offre una scalabilità lineare infinita senza imporre costi generali non lineari in un'architettura scalabile. È possibile distribuire più istanze Redis su un singolo nodo del cluster, per sfruttare appieno l'architettura del computer multi-core. Redis Enterprise ha dimostrato di essere scalabile fino a centinaia di milioni di operazioni al secondo con cinque nove (99,999%) di uptime. Redis Enterprise esegue il ri-partizionamento e il ribilanciamento automatici mantenendo una bassa latenza e un throughput elevato per i carichi transazionali.

Redis Enterprise offre la distribuzione active-active per database distribuiti a livello globale, consentendo operazioni di lettura e scrittura simultanee sullo stesso set di dati su più posizioni geografiche. Per renderlo più efficiente, Redis Enterprise può utilizzare tipi di dati replicati senza conflitti (CRDT) per mantenere la coerenza e la disponibilità dei dati. Riak e Azure Cosmos DB sono altri due database NoSQL che supportano CRDT.

Sebbene esista un'ampia letteratura accademica sui CRDT, ammetto di non capire completamente come o perché funzionano. Il breve riassunto di ciò che fanno è che i CRDT possono risolvere le incongruenze senza intervento, utilizzando un insieme di regole derivate matematicamente. I CRDT sono preziosi per i dati ad alto volume che richiedono uno stato condiviso e possono utilizzare server dislocati geograficamente per ridurre la latenza per gli utenti.

Una delle principali differenze tra Redis e Redis Enterprise è che Redis Enterprise separa il percorso dei dati dalla gestione del cluster. Ciò migliora il funzionamento di entrambi i componenti. Il percorso dei dati si basa su più proxy multithread a latenza zero che risiedono su ciascuno dei nodi del cluster per mascherare la complessità sottostante del sistema. Il cluster manager è una funzione di governo che fornisce funzionalità come resharding, ribilanciamento, auto-failover, rack-awareness, provisioning del database, gestione delle risorse, configurazione della persistenza dei dati e backup e ripristino. Poiché il gestore cluster è completamente disaccoppiato dai componenti del percorso dati, le modifiche ai suoi componenti software non influiscono sui componenti del percorso dati.

Redis on Flash è una funzionalità di Redis Enterprise che può ridurre drasticamente il costo dell'hardware per Redis. Invece di dover pagare tutto sommato per terabyte di RAM o limitare le dimensioni dei tuoi set di dati Redis, puoi utilizzare Redis su Flash per inserire dati hot a cui si accede frequentemente in memoria e valori più freddi in Flash o memoria persistente, come Intel Optane DC.

I moduli Redis Enterprise includono RedisGraph, RedisJSON, RedisTimeSeries, RedisBloom, RediSearch e RedisGears. Tutti i moduli Redis Enterprise funzionano anche con Redis open source.

Cosa c'è di nuovo in Redis 6?

Redis 6 è una grande release, sia per la versione open source che per la versione commerciale di Redis Enterprise. La novità sulle prestazioni è l'uso di I / O threaded, che offre a Redis 6 un miglioramento della velocità di 2x rispetto a Redis 5 (che non è stato un problema). Ciò viene trasferito in Redis Enterprise, che offre ulteriori miglioramenti della velocità per i cluster come descritto sopra.

L'aggiunta di elenchi di controllo di accesso (ACL) fornisce a Redis 6 il concetto di utente e consente agli sviluppatori di scrivere codice più sicuro. Redis Enterprise 6 si basa sugli ACL per offrire il controllo degli accessi basato sui ruoli (RBAC), che è più conveniente per i programmatori e gli amministratori di database.

Nuove funzionalità principali in Redis 6

Redis 6.0 open source

  • Elenchi di controllo di accesso (ACL)
  • Sfratti migliorati
  • I / O filettato
  • Protocollo RESP3

Redis Enterprise 6.0

  • Controllo degli accessi basato sui ruoli (RBAC)
  • Estensione attivo-attivo
  • HyperLogLog
  • Flussi

Redis Enterprise 6.0 aggiunge il supporto per il tipo di dati Streams nei database active-active. Ciò consente sia alta disponibilità che bassa latenza durante la lettura e la scrittura simultanea da e verso un flusso in tempo reale in più data center in più posizioni geografiche.

RedisGears è un framework dinamico che consente agli sviluppatori di scrivere ed eseguire funzioni che implementano flussi di dati in Redis. Consente agli utenti di scrivere script Python da eseguire all'interno di Redis e consente una serie di casi d'uso tra cui write-behind (Redis funge da front-end per un database basato su disco), elaborazione dati in tempo reale, streaming ed elaborazione di eventi, operazioni che attraversano strutture e modelli di dati e transazioni guidate dall'intelligenza artificiale.

RedisAI è un motore di servizio modello che gira all'interno di Redis. Può eseguire inferenze con i modelli PyTorch, TensorFlow e ONNX. RedisAI può essere eseguito su CPU e GPU e consente casi d'uso come rilevamento di frodi, rilevamento di anomalie e personalizzazione.

Installazione di Redis

Puoi installare Redis scaricando e compilando un tarball di origine o estraendo un'immagine Docker dall'hub Docker. Redis può essere compilato e utilizzato su Linux, MacOS, OpenBSD, NetBSD e FreeBSD. Il repository del codice sorgente è su GitHub. In Windows, puoi eseguire Redis in un contenitore Docker o in Windows Subsystem for Linux (WSL), che richiede Windows 10.

Puoi installare Redis Enterprise su Linux o in contenitori Docker. I download di Linux si presentano sotto forma di pacchetti binari (DEB o RPM a seconda del gusto di Linux) e script di shell Bash per l'installazione in cluster. Gli script controllano i quattro core e 15 GB di RAM richiesti per l'installazione.

Redis Enterprise Cloud

Il modo più veloce per installare Redis Enterprise non è installarlo affatto, ma piuttosto eseguirlo in Redis Enterprise Cloud. Quando l'ho provato io stesso a scopo di revisione, inizialmente ho ricevuto un'istanza di Redis 5; Ho dovuto chiedere un aggiornamento a Redis 6.