Redis
 sql >> Database >  >> NoSQL >> Redis

Hashing coerente come metodo per ridimensionare le scritture

Esistono due motivi per utilizzare più nodi in un cluster:

  • Sharding per limitare la quantità di dati archiviati su ciascun nodo
  • Duplicazione per ridurre il carico di lettura e consentire la rimozione di un nodo senza perdita di dati.

I due sono fondamentalmente diversi, ma puoi implementarli entrambi:usa l'hashing coerente per puntare a un insieme di nodi con una configurazione master/slave standard anziché a un singolo nodo.

Se il cluster è il tuo datastore principale anziché una cache, avrai bisogno di una strategia di ridistribuzione diversa che includa la copia dei dati.

La mia implementazione si basa sul fatto che il cliente scelga uno dei 64k bucket per un hash e abbia una tabella che associa quel bucket a un nodo. Inizialmente, tutti mappano al nodo n. 1.

Quando il nodo n. 1 diventa troppo grande, il suo slave diventa il nodo master n. 2 e la tabella viene aggiornata per mappare metà delle chiavi del nodo n. 1 al nodo n. 2. A questo punto tutte le letture e le scritture funzioneranno con la nuova mappatura e devi solo ripulire le chiavi che ora si trovano sul nodo sbagliato. A seconda dei requisiti di prestazione, puoi controllare tutte le chiavi contemporaneamente o selezionare una selezione casuale di chiavi come fa il sistema di scadenza.