Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster

PHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster

藏色散人
藏色散人nach vorne
2019-05-05 09:25:292782Durchsuche

1. Öffnen Sie 4 Memcached-Service-Simulationscluster

/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. Modulo-Hash-Algorithmus

PHP-Code

<?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);
}

Führen Sie den obigen Code aus und überprüfen Sie das Protokoll

#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.

Sehen Sie sich die Schlüsselverteilung an

PHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster

Kommentieren Sie 11214//$memcached->addServer( im php Code '192.168.75.132', '11214');
Führen Sie den PHP-Code erneut aus
Sehen Sie sich die Verteilung der Schlüssel an

PHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster

Vergleichen Sie die Verteilung der beiden Schlüssel :

Die Treffer key_2 und key_10 haben sich nicht geändert und liegen immer in 11211. Die anderen 10 Schlüssel haben sich aufgrund der Reduzierung des Servers geändert

3. Konsistenter Hash-Algorithmus

PHP-Code

<?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);
}

Führen Sie den obigen Code aus, überprüfen Sie das Protokoll

Sehen Sie sich die Verteilung der Schlüssel an

PHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster

Kommentieren Sie 11214//$ im PHP-Code memcached->addServer('192.168.75.132', '11214');
Führen Sie den PHP-Code erneut aus
Sehen Sie sich die Verteilung der Schlüssel an

PHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster

Vergleichen Sie die Tasten zweimal. Verteilung:

11211 Der ursprüngliche Tastendruck hat sich nicht geändert, Taste_4 wurde hinzugefügt

11212 Der ursprüngliche Tastendruck hat sich nicht geändert

11213 Der ursprüngliche Schlüsseltreffer Es ist keine Änderung aufgetreten, Schlüssel_12 wurde hinzugefügt

2 Schlüssel haben sich aufgrund der Reduzierung der Servertreffer geändert

4. Vergleich von

Modulo-Hash-Algorithmus Die Reduzierung eines Servers auf 10 Schlüsseltreffer hat sich geändert.

Der konsistente Hash-Algorithmus wurde geändert, um 2 Schlüsseltreffer auf einem Server zu reduzieren.

Hier werden nur 12 Schlüssel getestet. Das simulierte Datenvolumen ist zu gering, was zu einer ungleichmäßigen Verteilung der Schlüssel führt. Die durch die Reduzierung der Server verursachte Änderung der Schlüsseltreffer hat jedoch nichts mit der Größe zu tun simulierte Daten, beziehen sich jedoch auf den Hash-Algorithmus. Diese Tests spiegeln die Vorteile des konsistenten Hash-Algorithmus wider. Aufgrund der Reduzierung der Server haben sich die modularen Hash-Ergebnisse einer großen Anzahl von Schlüsseln geändert ; Während der konsistente Hash-Algorithmus-Schlüssel auf dem Hash-Ring von Knoten festgelegt ist, ändert sich die Position des Servers auf dem Hash-Ring nicht. Dies wirkt sich nur auf den Treffer aus Der Schlüssel auf dem reduzierten Server wirkt sich nur auf einen Teil der Schlüssel des Servers an der nächsten Position im Hash-Ring aus

Das obige ist der detaillierte Inhalt vonPHP-Modulo-Hash und konsistenter Hash-Betrieb Memcached verteilter Cluster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jmsite.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen