La méthode la plus simple pour répartir les données consiste à calculer le hachage de la clé, puis à diviser ce résultat par le nombre de machines. Cela fonctionne parfaitement jusqu’à ce que vous ajoutiez une quatrième machine à un cluster de trois machines — auquel cas presque toutes les clés changent de place, et le cluster doit transférer l’intégralité des données sur le réseau.
Disposez tout en formant un cercle
Le hachage cohérent (Consistent Hashing) hachage à la fois la clé et le serveur dans un même espace, que l'on peut imaginer comme un cercle. Chaque clé est attribuée au premier serveur rencontré en suivant le sens des aiguilles d'une montre à partir de sa position.
L'ajout d'un serveur n'affecte que la partie de la chaîne située juste avant lui — en moyenne 1/n des données au lieu de la quasi-totalité. Il en va de même pour la suppression d'un serveur : seule la partie qui lui correspond est transférée vers le serveur suivant.
Le problème de la distribution asymétrique et ses solutions
Avec un nombre réduit de machines, les points de répartition sur le cercle sont inégaux : certaines machines couvrent un arc plusieurs fois plus long que d’autres. La solution standard consiste à utiliser des nœuds virtuels : chaque machine physique est répartie sur le cercle à des centaines d’emplacements différents. La loi des grands nombres assure une répartition uniforme.
Les boutons virtuels présentent également l'avantage de permettre aux machines puissantes de prendre en charge davantage de positions que les machines moins puissantes — la charge étant ainsi répartie en fonction de leurs capacités réelles.
L'endroit où tu l'as rencontré
Cache distribué, base de données clé-valeur distribuée, réseau de diffusion de contenu avec sélection des serveurs périphériques, et équilibrage de charge garantissant qu’un même utilisateur soit toujours redirigé vers le même serveur.
Si votre système ne comporte qu'un seul serveur et qu'il n'y en aura peut-être jamais qu'un seul, ne mettez pas cela en place. Cela répond à un besoin d'évolutivité, et n'en vaut la peine que si ce besoin est réel.
Thảo luận