Maison  >  Article  >  développement back-end  >  Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached

Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached

藏色散人
藏色散人avant
2019-05-05 09:25:292776parcourir

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(&#39;192.168.75.132&#39;, &#39;11211&#39;);
$memcached->addServer(&#39;192.168.75.132&#39;, &#39;11212&#39;);
$memcached->addServer(&#39;192.168.75.132&#39;, &#39;11213&#39;);
$memcached->addServer(&#39;192.168.75.132&#39;, &#39;11214&#39;);
//写入12个key
for ($i =1;$i <= 12;$i++){
    $memcached->set(&#39;key_&#39;.$i, &#39;value_&#39;.$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

Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached

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

Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached

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(&#39;192.168.75.132&#39;, &#39;11211&#39;);
$memcached->addServer(&#39;192.168.75.132&#39;, &#39;11212&#39;);
$memcached->addServer(&#39;192.168.75.132&#39;, &#39;11213&#39;);
$memcached->addServer(&#39;192.168.75.132&#39;, &#39;11214&#39;);
//写入12个key
for ($i =1;$i <= 12;$i++){
    $ret = $memcached->set(&#39;key_&#39;.$i, &#39;value_&#39;.$i);
}

Exécuter le code ci-dessus, vérifier le log

Voir la distribution des clés

Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached

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

Hachage modulo PHP et opération de hachage cohérente Cluster distribué Memcached

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer