Question

Predis revendication avoir sharding côté client (support pour le hachage uniforme des touches). http://github.com/nrk/predis

Je peux faire sharding à l'aide se connecter à un ensemble de profils (nœuds), mais ce n'est pas hashage cohérent. Lorsque j'ajoute un autre nœud à la piscine, ne peut pas être trouvé quelques-unes des clés. Toute personne a une expérience sur ce sujet?

Utilisation de php 5.2 (et version php 5.2 de Redis).

Était-ce utile?

La solution

Le site officiel Redis dit « Redis soutient sharding côté client via hashage cohérent. À l'heure actuelle il n'y a pas de soutien à l'échec de la tolérance, ni pour ajouter ou supprimer des clusters au moment de l'exécution. »

D'après ce que je comprends, au moment de ce genre de partage est pas tolérant aux pannes, et toutes les clés stockées sur un nœud défaillant sera perdu. De même, si vous ajoutez un nouveau nœud, une partie de l'espace clé sera maintenant perdu (comme les clés seront stockées sur le mauvais nœud). Normalement, dans un système hashage cohérent, lorsqu'un nouveau nœud se joint à elle copie toutes les clés qui cartographient maintenant de ses voisins. Il n'y a pas de support dans le serveur Redis pour le faire.

fonctionne le hashage cohérent bien si vous utilisez Redis comme un cache, où les données sont stockées réellement derrière Redis, mais pour le moment ne vous attendez pas que vos données ne disparaissent.

Mise à jour: Il est possible de mettre en œuvre sharding réel via une bibliothèque hashage cohérent appelé Ketama .

Autres conseils

La solution est d'utiliser sharding virtuelle. Je ne sais pas fonctionne cadre Predis mais je prédis qu'il utilise une sorte de tableau - vous remplissez probablement avec des informations sur chaque tesson au démarrage.

Supposons que vous aurez un maximum de 10 tessons (ce nombre devrait être peu susceptible d'être atteint). Ensuite, créer une matrice de sharding qui pointe vers seulement 3 serveurs réels. À l'avenir, lorsque vous ajouterez de nouveaux nœuds, vous migrer des données relatives aux nouveaux tesson et la cartographie des changements. Cette approche préserve changement de forme fonction de hachage.

cartographie initiale:

0 => 0 //node #0
1 => 0
2 => 0
3 => 1 //node #1
4 => 1
5 => 1
6 => 2 //node #2
7 => 2
8 => 2
9 => 2

Lorsque vous AJOUTE nouveau nœud vous modifiez uniquement la cartographie:

0 => 0
1 => 0
2 => 3 // new node #3
3 => 1
4 => 1
5 => 3 // new node #3
7 => 2
8 => 2
9 => 3 // new node #3

il faut donc déplacer les données avec h (x) = 9, 5 ou 2 à noeud # 3.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top