Maison > Article > développement back-end > Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached
1. Ouvrez 4 clusters de simulation de service Memcached
/usr/local/memcached/bin/memcached -d -p 11211 -u memcached -vv >> /var/log/memcached.11211.log 2>&1 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -vv >> /var/log/memcached.11212.log 2>&1 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -vv >> /var/log/memcached.11213.log 2>&1 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -vv >> /var/log/memcached.11214.log 2>&1
2. Algorithme de hachage Modulo
code php
<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/28 * Time: 11:38 */ $memcached = new Memcached(); //设置算法为取模hash $memcached->setOptions( array( Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_MODULA, //Memcached::OPT_LIBKETAMA_COMPATIBLE => true, Memcached::OPT_REMOVE_FAILED_SERVERS=> true, ) ); //添加服务器 $memcached->addServer('192.168.75.132', '11211'); $memcached->addServer('192.168.75.132', '11212'); $memcached->addServer('192.168.75.132', '11213'); $memcached->addServer('192.168.75.132', '11214'); //写入12个key for ($i =1;$i <= 12;$i++){ $memcached->set('key_'.$i, 'value_'.$i); }
. Exécutez le code ci-dessus et vérifiez le journal
#memcached.11211.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_2 0 0 7 >28 STORED <28 set key_3 0 0 7 >28 STORED <28 set key_4 0 0 7 >28 STORED <28 set key_10 0 0 8 >28 STORED <28 quit <28 connection closed. #memcached.11212.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_1 0 0 7 >28 STORED <28 set key_6 0 0 7 >28 STORED <28 set key_9 0 0 7 >28 STORED <28 set key_12 0 0 8 >28 STORED <28 quit <28 connection closed. #memcached.11213.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_7 0 0 7 >28 STORED <28 set key_8 0 0 7 >28 STORED <28 quit <28 connection closed. #memcached.11214.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_5 0 0 7 >28 STORED <28 set key_11 0 0 8 >28 STORED <28 quit <28 connection closed.
Affichez la distribution des clés
Commentez 11214//$memcached->addServer( dans le code php '192.168.75.132', '11214');
Exécuter à nouveau le code php
Voir la distribution des clés
Comparer la distribution des deux clés :
Les hits key_2 et key_10 n'ont pas changé et sont toujours dans 11211. Les 10 autres clés ont changé en raison de la réduction du serveur
Algorithme de hachage cohérent
Code PHP
<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/28 * Time: 11:38 */ $memcached = new Memcached(); //设置算法为一致性hash $memcached->setOptions( array( Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT, Memcached::OPT_LIBKETAMA_COMPATIBLE => true, Memcached::OPT_REMOVE_FAILED_SERVERS=> true, ) ); //添加服务器 $memcached->addServer('192.168.75.132', '11211'); $memcached->addServer('192.168.75.132', '11212'); $memcached->addServer('192.168.75.132', '11213'); $memcached->addServer('192.168.75.132', '11214'); //写入12个key for ($i =1;$i <= 12;$i++){ $ret = $memcached->set('key_'.$i, 'value_'.$i); }
Exécuter le code ci-dessus, vérifier le log
Voir la distribution des clés
Commentaire out 11214//$ dans le code PHP memcached->addServer('192.168.75.132', '11214');
Exécuter à nouveau le code php
Voir la distribution des clés
Comparez les clés deux fois Distribution :
11211 La frappe de touche d'origine n'a pas changé, key_4 a été ajoutée
11212 La frappe de touche d'origine n'a pas changé
11213 La touche d'origine frappée Aucun changement n'a eu lieu, key_12 a été ajouté
2 clés ont changé en raison de la réduction des frappes du serveur
Comparaison de
algorithme de hachage modulo La réduction d'un serveur à 10 accès clés a changé.
L'algorithme de hachage cohérent a changé pour réduire 2 accès clés sur un serveur.
Seules 12 clés sont testées ici. La quantité de données simulées est trop petite, ce qui entraîne une répartition inégale des clés. Cependant, le changement dans les accès aux clés provoqué par la réduction des serveurs n'a rien à voir avec la taille des clés. données simulées, mais est lié à l'algorithme de hachage. Ces tests reflètent les avantages de l'algorithme de hachage cohérent. En raison de la réduction du nombre de serveurs, les résultats de hachage modulaire d'un grand nombre de clés ont également changé. ; alors que la clé de l'algorithme de hachage cohérent est fixée à une valeur de 2^32-1 Sur l'anneau de hachage des nœuds, la position du serveur sur l'anneau de hachage ne changera pas si le serveur réduit la clé. Cela n'affecte que l'accès de. la clé sur le serveur réduit L'ajout d'un serveur n'affecte qu'une partie des clés du serveur à la position suivante sur l'anneau de hachage
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!