Scalabilità
Esistono due approcci comuni per ridimensionare un server: ridimensionamento verticale e ridimensionamento orizzontale. Il ridimensionamento o il ridimensionamento verticale è il punto in cui aggiungi più potenza e risorse al tuo server, come più CPU, memoria e spazio di archiviazione, il che è costoso. D'altra parte, il ridimensionamento orizzontale aggiunge più nodi al pool di risorse esistente. Questo si chiama ridimensionamento. Pertanto, in base alle tue limitazioni e requisiti, spetta a te disporre di un'unica istanza del server più grande o distribuire più nodi del server.
Supponiamo di avere 100 GB di RAM e di dover contenere 200 GB di dati. In questo caso, hai due scelte:
- Scalare aggiungendo più RAM al sistema
- Aumenta la scalabilità aggiungendo un'altra istanza del server con 100 GB di RAM
Se hai raggiunto il limite massimo di RAM all'interno della tua infrastruttura, la scalabilità orizzontale è l'approccio ideale. Inoltre, la scalabilità orizzontale aumenterà notevolmente il throughput del database.
Redis Sharding
È noto che Redis opera su un singolo thread. Pertanto, Redis non è in grado di utilizzare più core della CPU del tuo server per elaborare i comandi. Pertanto, l'aggiunta di più core della CPU non offre molto throughput o prestazioni con Redis. Non è il caso di suddividere i dati tra più istanze del server. L'aggiunta di più server e la distribuzione del set di dati tra di essi consente l'elaborazione parallela delle richieste dei client, il che aumenta il throughput. Inoltre, le prestazioni complessive possono aumentare quasi in modo lineare.
Viene chiamato questo approccio di suddivisione o distribuzione dei dati tra più server tenendo presente il ridimensionamento sharding . Vengono richiamati tutti i server che memorizzano porzioni di dati frammenti .
Come viene eseguito lo sharding: lo sharding algoritmico
Una delle principali preoccupazioni relative allo sharding era come individuare una determinata chiave tra più nodi Redis. Poiché una determinata chiave può essere archiviata in qualsiasi partizione disponibile, l'interrogazione di tutte le partizioni per trovare una chiave specifica non è l'opzione migliore. Quindi, dovrebbe esserci un modo per mappare ogni chiave a uno specifico frammento e Redis utilizza una strategia di partizionamento algoritmico.
L'approccio più comune consiste nel calcolare un valore hash utilizzando il nome e il modulo della chiave Redis. Quindi, dividilo per i frammenti Redis disponibili nel sistema.
HASH_SLOT = CRC16(chiave) mod 16384È una soluzione abbastanza buona fintanto che il numero totale di frammenti è costante. Ogni volta che aggiungi una nuova istanza del server Reids, il valore risultante per una determinata chiave potrebbe cambiare poiché il numero totale di frammenti è aumentato. Finirà per interrogare il frammento Redis sbagliato. Quindi, dovresti seguire il processo di resharding calcolando il nuovo shard per ogni chiave e trasferendo i dati al server corretto, che è un'attività ingombrante e non banale se il tuo numero totale di shard aumenta di volta in volta.
Redis usa una nuova entità logica chiamata a slot hash per prevenire questo problema. Sono disponibili diversi slot hash per un determinato shard e un singolo slot hash può contenere più chiavi Redis. Ci sono 16384 hash slot in un cluster di database Redis che rimangono invariati. La divisione modulo viene eseguita con il numero di slot hash invece che con il conteggio degli shard. Fornisce la posizione corretta dello slot hash per la chiave specificata anche quando il numero di shard è aumentato. Semplifica il processo di resharding spostando gli hash slot da uno shard a quello nuovo che suddivide i dati tra le diverse istanze Redis secondo i requisiti.
Vantaggi di Redis Sharding
Lo sharding Redis offre diversi vantaggi al tuo sistema di database con modifiche minime.
Alto rendimento
Poiché Redis è a thread singolo, l'elaborazione di più richieste client non può essere elaborata in parallelo utilizzando più core della CPU. Pertanto, l'aggiunta di nuovi shard o istanze del server garantisce la possibilità di eseguire operazioni Redis in parallelo. Aumenta le operazioni al secondo nel tuo database Redis, che alla fine ti offre un throughput elevato.
Alta disponibilità
Con l'approccio di sharding, il cluster Redis può configurare un'architettura master-replica che garantisce disponibilità e durabilità elevate.
Leggi le repliche
Lo sharding ti consente di conservare una copia esatta dei tuoi dati e fornire operazioni di lettura tramite istanze Redis separate, il che aumenta le prestazioni dell'esecuzione della query di lettura.
Oltre a questi vantaggi, lo sharding può causare situazioni di split brain quando si dispone di un numero pari di shard nel cluster Redis. Pertanto, si consiglia di mantenere un numero dispari di shard nel cluster Redis.
Conclusione
Per riassumere, lo sharding Redis divide i dati tra più server, il che consente il ridimensionamento e un throughput elevato per il database. Come discusso, Redis utilizza una strategia di sharding algoritmico per indirizzare le richieste dei client allo shard corretto. Ciò presenta alcuni inconvenienti quando il numero totale di frammenti aumenta. Quindi, invece del numero totale di shard, Redis utilizza il numero di slot hash per calcolare lo shard appropriato. Con l'introduzione dello sharding, i database Redis offrono disponibilità elevata, throughput elevato e prestazioni elevate.