Redis Sharding

Redis Sharding
Quando inizi a usare Redis, è facile credere che non dovrai mai ridimensionarlo oltre le impostazioni predefinite. Il problema è che man mano che l'applicazione cresce, alla fine avrai bisogno di più capacità di memoria, CPU e throughput per supportare le tue esigenze aziendali. In questo articolo, ti mostreremo come il cluster Redis si ridimensiona con frammenti per darti la capacità extra di cui hai bisogno per gestire la tua attività senza intoppi e crescere nel futuro. Impareremo specificamente come il cluster Redis fornisce un elevato throughput con sharding.

Scalabilità

Esistono due approcci comuni al ridimensionamento di un server: ridimensionamento verticale e ridimensionamento orizzontale. Il ridimensionamento o il ridimensionamento verticale è dove aggiungi più potenza e risorse al tuo server, come più CPU, memoria e archiviazione, il che è costoso. D'altra parte, il ridimensionamento orizzontale sta aggiungendo più nodi al pool di risorse esistente. Questo si chiama ridimensionamento. Quindi, in base ai limiti e ai requisiti, spetta a te avere un'istanza server singola più grande o distribuire più nodi del server.

Supponiamo che tu abbia 100 GB di RAM e che debba contenere 200 GB di dati. In questo caso, hai due scelte:

  • Aumentare aggiungendo più RAM al sistema
  • Ridimensionare aggiungendo un'altra istanza del server con 100 GB di RAM

Se hai raggiunto il limite massimo RAM all'interno della tua infrastruttura, il ridimensionamento è l'approccio ideale. Inoltre, il ridimensionamento aumenterà il throughput del database con un enorme margine.

Redis Sharding

È noto che Redis opera su un singolo thread. Quindi, Redis non è in grado di utilizzare più core della CPU del server per elaborare i comandi. Pertanto, l'aggiunta di più core CPU non ti dà molta throughput o prestazioni con Redis. Non è il caso di dividere i dati tra più istanze del server. Aggiunta di diversi server e distribuire il set di dati tra quelli abilita l'elaborazione delle richieste del client parallele, il che aumenta il throughput. Inoltre, le prestazioni complessive possono aumentare vicino a linearmente.

Questo approccio di scissione o distribuzione di dati tra più server con il ridimensionamento sharding. Tutti i server che archiviano porzioni di dati sono chiamati frammenti.

Come viene fatto lo sharding - frammento algoritmico

Una delle principali preoccupazioni con il frammento era come individuare una determinata chiave tra più nodi Redis. Poiché una determinata chiave può essere archiviata in qualsiasi frammento disponibile, interrogare tutti i frammenti per trovare una chiave specifica non è l'opzione migliore. Quindi, dovrebbe esserci un modo per mappare ogni chiave su un frammento specifico e Redis utilizza una strategia di frammento algoritmica.

L'approccio più comune è calcolare un valore di hash usando il nome e il modulo della chiave Redis. Quindi, dividilo per i frammenti di Redis disponibili nel sistema.

Hash_slot = CRC16 (chiave) Mod 16384

È una buona soluzione fintanto che il numero totale di frammenti è costante. Ogni volta che si aggiunge una nuova istanza del server Reids, il valore risultante per una determinata chiave può cambiare poiché il numero totale di frammenti è aumentato. Finirà per interrogare il Redis Shard sbagliato. Pertanto, è necessario seguire il processo di rianimazione calcolando il nuovo frammento per ciascuna chiave e trasferendo i dati sul server corretto, che è ingombrante e non un'attività banale se il conteggio totale dei frammenti aumenta di volta in volta.

Redis utilizza una nuova entità logica chiamata a slot hash per prevenire questo problema. Sono disponibili diversi slot di hash per un determinato frammento e uno slot hash singolo può contenere più tasti Redis. Ci sono 16384 slot di hash in un cluster di database Redis che rimane invariato. La divisione Modulo viene eseguita con il numero di slot di hash invece del conteggio dei frammenti. Fornisce la posizione corretta dello slot hash per la chiave specificata anche quando il numero di frammenti è aumentato. Semplifica il processo di rianimazione spostando le fessure hash da un frammento a quello nuovo che divide i dati attraverso le diverse istanze di Redis secondo i requisiti.

Vantaggi di Redis Sharding

Redis Sharding consente diversi vantaggi al sistema di database con cambiamenti minimi.

Throughput elevato

Poiché Redis è singolo, l'elaborazione di più richieste client non può elaborare parallele utilizzando più core CPU. Quindi, l'aggiunta di nuovi frammenti o istanze del server garantisce che è possibile eseguire le operazioni Redis in parallelo. Aumenta le operazioni al secondo nel tuo database Redis, che alla fine ti dà un throughput elevato.

Alta disponibilità

Con l'approccio dello sharding, il cluster Redis può impostare un'architettura Master-Replica che garantisce un'elevata disponibilità e durata.

Leggi le repliche

Sharding ti consente di conservare una copia esatta dei tuoi dati e fornire operazioni di lettura attraverso istanze di Redis separate, il che aumenta le prestazioni dell'esecuzione della query di lettura.

Oltre a questi benefici, i frammenti possono causare situazioni di parco diviso quando si dispone di un numero pari di frammenti nel cluster Redis. Quindi, si consiglia un numero dispari di frammenti nel cluster Redis.

Conclusione

Per riassumere, Redis Sharding sta dividendo i dati tra più server, il che consente il ridimensionamento e il throughput elevato per il database. Come discusso, Redis utilizza una strategia di frammento algoritmica per puntare le richieste dei clienti al frammento corretto. Questo ha alcuni svantaggi quando aumenta il numero totale di frammenti. Quindi, invece del numero totale di frammenti, Redis utilizza il numero di slot di hash per calcolare il frammento appropriato. Con l'introduzione di sharding, i database Redis forniscono elevata disponibilità, elevata throughput e prestazioni elevate.