PHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスター

藏色散人
リリース: 2023-04-06 12:48:01
転載
2797 人が閲覧しました

1. 4 つの 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. モジュラー ハッシュ アルゴリズム

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);
}
ログイン後にコピー

上記のコードを実行してログを確認します

#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.
ログイン後にコピー

キーの配布を表示

PHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスター

##PHP コードの 11214//$memcached->addServer( をコメントアウトします。 192.168.75.132', '11214');

php コードを再度実行します
キーの分布を表示します

PHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスター

2 つのキーの分布を比較します:

key_2 と key_10 のヒットは変更されておらず、常に 11211 です。他の 10 個のキーのヒットは、サーバーの削減により変更されました

3. 一貫したハッシュ アルゴリズム

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);
}
ログイン後にコピー
上記のコードを実行してログを確認します

#キーの配布を表示します

PHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスター

PHP コードの 11214//$ をコメント アウトします。 memcached->addServer('192.168.75.132', '11214');

PHP コードを再度実行します
キーの分布を表示します

PHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスター#2 つのキーの分布を比較します。

11211 元のキー ヒットは変更されておらず、key_4 が追加されました

11212 元のキー ヒットは変更されていません

11213 元のキー ヒット 変更は発生せず、key_12 が追加されました

サーバー ヒットの減少により変更されたキーが 2 つあります

4. 比較

モジュロ ハッシュ アルゴリズム 1 つのサーバーでのキー ヒット数を 10 回に減らすことが変更されました。

一貫性のあるハッシュ アルゴリズムが変更され、1 つのサーバーでの 2 つのキー ヒットが減少しました。

ここでは 12 個のキーのみがテストされています。シミュレートされたデータ量が小さすぎるため、キーの分布が不均一になります。ただし、サーバーの削減によるキー ヒットの変化は、サーバーのサイズとは関係ありません。シミュレートされたデータですが、ハッシュ アルゴリズムに関連しています。これらのテストは、一貫したハッシュ アルゴリズムの利点を反映しています。サーバーの削減により、多数のキーのモジュラー ハッシュ結果が変化し、サーバーのヒットも変化しました。 ; 一貫性のあるハッシュ アルゴリズムのキーは 2^32-1 の値に固定されていますが、ノードのハッシュ リングでは、サーバーがキーを減らしても、ハッシュ リング上のサーバーのキーの位置は変わりません。ヒットにのみ影響します。縮小されたサーバー上のキーの。サーバーを追加すると、ハッシュ リングの次の位置にあるサーバーのキーの一部にのみ影響します。

以上がPHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jmsite.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート