Der er to grunde til at bruge flere noder i en klynge:
- Sharding for at begrænse mængden af data, der er gemt på hver node
- Duplikering for at reducere læsebelastningen og tillade, at en node fjernes uden tab af data.
De to er fundamentalt forskellige, men du kan implementere begge - brug konsekvent hashing for at pege på et sæt noder med en standard master/slave-opsætning i stedet for en enkelt node.
Hvis klyngen er dit primære datalager i stedet for en cache, skal du bruge en anden omfordelingsstrategi, der inkluderer kopiering af dataene.
Min implementering er baseret på at få klienten til at vælge en af 64k buckets til en hash og have en tabel, der kortlægger den bucket til en node. Indledningsvis er alle kortlagt til node #1.
Når node #1 bliver for stor, bliver dens slave master node #2, og tabellen opdateres til at kortlægge halvdelen af node #1 nøglerne til node #2. På dette tidspunkt vil alle læsninger og skrivninger fungere med den nye kortlægning, og du skal bare rydde op i de nøgler, der nu er på den forkerte node. Afhængigt af ydeevnekravene kan du kontrollere alle nøgler på én gang eller kontrollere et tilfældigt udvalg af nøgler, som udløbssystemet gør.