Er zijn twee redenen om meerdere nodes in een cluster te gebruiken:
- Sharding om de hoeveelheid gegevens die op elk knooppunt wordt opgeslagen te beperken
- Duplicatie om de leesbelasting te verminderen en een node te laten verwijderen zonder gegevensverlies.
De twee zijn fundamenteel verschillend, maar je kunt beide implementeren - gebruik consistente hashing om te verwijzen naar een set knooppunten met een standaard master/slave-configuratie in plaats van een enkel knooppunt.
Als het cluster uw primaire gegevensopslag is in plaats van een cache, hebt u een andere herdistributiestrategie nodig, waaronder het kopiëren van de gegevens.
Mijn implementatie is gebaseerd op het feit dat de klant een van 64k-buckets voor een hash kiest en een tabel heeft die die bucket aan een knooppunt toewijst. In eerste instantie worden ze allemaal toegewezen aan knooppunt #1.
Wanneer knooppunt #1 te groot wordt, wordt zijn slave hoofdknooppunt #2 en wordt de tabel bijgewerkt om de helft van de knooppunt #1-sleutels toe te wijzen aan knooppunt #2. Op dit punt werken alle lees- en schrijfbewerkingen met de nieuwe toewijzing en hoeft u alleen de sleutels op te schonen die zich nu op het verkeerde knooppunt bevinden. Afhankelijk van de prestatie-eisen kunt u alle sleutels tegelijk controleren of een willekeurige selectie van sleutels controleren, zoals het vervalsysteem doet.