Istnieją dwa powody używania wielu węzłów w klastrze:
- Sharding w celu ograniczenia ilości danych przechowywanych w każdym węźle
- Duplikacja w celu zmniejszenia obciążenia odczytu i umożliwienia usunięcia węzła bez utraty danych.
Te dwa są zasadniczo różne, ale możesz zaimplementować oba - użyj spójnego hashowania, aby wskazać zestaw węzłów ze standardową konfiguracją master/slave, a nie pojedynczym węzłem.
Jeśli klaster jest Twoim głównym magazynem danych, a nie pamięcią podręczną, będziesz potrzebować innej strategii redystrybucji, która obejmuje kopiowanie danych.
Moja implementacja opiera się na tym, że klient wybiera jeden z 64k wiader dla hash i posiada tabelę, która mapuje ten wiadro do węzła. Początkowo wszystkie mapowane do węzła nr 1.
Gdy węzeł nr 1 staje się zbyt duży, jego podrzędny staje się węzłem głównym nr 2, a tabela jest aktualizowana w celu odwzorowania połowy kluczy węzła nr 1 na węzeł nr 2. W tym momencie wszystkie odczyty i zapisy będą działać z nowym mapowaniem i wystarczy wyczyścić klucze, które są teraz w niewłaściwym węźle. W zależności od wymagań dotyczących wydajności możesz sprawdzić wszystkie klucze naraz lub sprawdzić losowy wybór kluczy, tak jak robi to system wygaśnięcia.