Le cluster Redis n'utilise pas de hachage cohérent, mais introduit le concept d'emplacement de hachage. Le cluster Redis dispose de 16 384 emplacements de hachage. Chaque clé est vérifiée modulo 16 384 après vérification CRC16 pour déterminer quel emplacement placer. Chaque nœud du cluster est responsable d'une partie de l'emplacement de hachage. Mais pourquoi le nombre d'emplacements de hachage est-il de 16 384 (2 ^ 14) ? Cette question a été posée sur github, et l'auteur a également donné une réponse. Analysons-la brièvement.
Pourquoi 16384 (2^14) ?
Lorsque le nœud Redis envoie le paquet de battement de cœur, tous les emplacements doivent être placés dans le paquet de battement de cœur afin que le nœud puisse connaître les informations actuelles du cluster 16384=16k. Lors de l'envoi du paquet de battement de cœur, utilisez. bitmap pour le compresser 2k (2 * 8 (8 bit) * 1024(1k) = 2K
), ce qui signifie que 16k emplacements sont créés en utilisant 2k d'espace.
Bien que l'algorithme CRC16 puisse être utilisé pour allouer jusqu'à 65535 (2^16-1) emplacements, 65535=65k, après compression, il est de 8k (8 * 8 (8 bit) * 1024(1k) = 8K
), ce qui signifie que 8k paquets de battements de cœur sont nécessaires , l'auteur, je ne pense pas que cela vaut la peine de faire cela ; et généralement, un cluster Redis n'aura pas plus de 1 000 nœuds maîtres, donc 16 000 emplacements sont un choix plus approprié.
Mots originaux de l'auteur :
1. Les paquets de battements de cœur ordinaires transportent la configuration complète du nœud. Cette configuration peut être remplacée par l'ancienne configuration de manière idempotente. pour mettre à jour l'ancienne configuration. Cela signifie qu'ils contiennent la configuration des emplacements du nœud dans sa forme brute, une configuration de 16 000 emplacements utiliserait 2 Ko de mémoire, mais l'utilisation de 65 000 emplacements utiliserait 8 Ko de mémoire.
2. Dans le même temps, en raison d'autres compromis de conception, le cluster Redis ne peut pas être étendu à plus de 1 000 nœuds.
Par conséquent, 16k est plus approprié pour garantir que chaque appareil principal dispose de suffisamment d'emplacements, jusqu'à 1000. Les informations de configuration des nœuds de Redis sont transmises via le stockage bitmap. Il existe un processus de compression avant la transmission. Le taux de compression a une grande relation avec le nombre d'emplacements et de nœuds (car lorsque N est petit, le bitmap aurait des emplacements/N bits définis pour cela. représente un grand pourcentage de bits définis.) [Nombre d'emplacements/nombre de nœuds] Plus N est grand, plus le taux de compression est petit.
Pour plus d'articles techniques liés à Redis, veuillez visiter la colonne Tutoriel Redis pour apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!