これらは一度に多くの質問がありますが、1 つずつ答えるために最善を尽くします。
1) PHP で Consistent Hashed Key を作成するコードは何ですか? どのライブラリをインストールする必要があり、本当に何をする必要があるのか? 良い記事はありますか?
あなたのコードに疑問を投げかけるように、このコードは PHP の Consistent Hashing には十分です。Memcached で Consistent Hashing を使用するには、LibMemcached クライアント ライブラリを使用する必要があります。コードの下に次の行を追加するだけです
$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
コンシステント ハッシュを使用する場合は、このオプションを有効にすることを強くお勧めします。将来のリリースではデフォルトで有効になる可能性があります。http://www.php.net/manual/en/memcached.constants.phpをよりよく理解するために、一連の定数とその定義については、これに従ってください
ただし、php.ini でグローバルに設定することにより、パフォーマンスを向上させることができます (まだテストしていません)。
memcache.hash_strategy = consistent;
http://blog.fedecarg.com/2008/12/24/memcached-consistent-hashing-mechanism/で提案されているように、各 memcached 呼び出しで個別に指定する必要はありません。デフォルト値は標準で、サーバーを追加または削除する場合には役に立たないモジュラス計算を使用します。
2) コンシステント ハッシュ キーを正常に保存したとします。コンシステント ハッシュ キーなどを使用している場合でも、いずれかのサーバーがダウンしているか、新しいサーバーを追加した場合、違いはありますか?
lsmoothが言ったように、サーバーが削除または追加されると常に影響がありますが、1台のサーバーを3台のサーバーに追加すると仮定すると、キーが約1/4 = 25%失われるため、多くのサーバーがキーを失う可能性が低くなります。 .
3) Memcached::addServer() の代わりに Memcached::addServers() を使用すると、http://ru.php.net/manual/en/memcached.addserver.php に記載されているように、Consistent Hashing の場合に違いが生じます。そうではなく、どういう意味ですか?
イスムースの言うとおりです。彼は正しい。addServers を使用することをお勧めします。setOption ですべてのオプションを設定した後、«addServers()» を呼び出す必要があることに注意してください。そうしないと、オプションはそれらのサーバーに適用されません。
4) コンシステント ハッシュには上記のコードを使用するだけで十分であり、サーバーを追加/削除してもキーに違いはありませんか?
質問 No 1 の回答で既に回答済みです。
5) ケタマ図書館とは?Memcached::DISTRIBUTION_CONSISTENT がより適切に機能する場合、なぜそれを使用するのでしょうか? http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
LibKetama は Consistent Hashing キー配布アルゴリズムのベースとなるライブラリです。したがって、Memcached で Consistent Hashing を使用することは、LibKetama を使用することを意味し、それがそれです。
6) なんらかの方法でキーをハッシュする必要がありますか、それとも単にキーを提供し、残りは Memcached に処理させる必要がありますか?
Yvan によると、「Memcached クライアントはキーを自動的にハッシュします。たとえば、A、B、C の 3 つのサーバーと、«K1» から «K9» までの 3 つのキーがあるとします。たとえば、クライアント ハッシュ アルゴリズムは次のように保存されます: K1/K2 /K3 は A に保存され、K4/K5/K6 は B に保存され、K7/K8/K9 は C に保存されます。サーバー B がダウンした場合、そのキー (K4/K5/K6) は残りの 2 台のサーバーに均等に保存されます ( A and C). たとえば、K4 は A に移動し、K5/K6 はサーバー C に移動します。
これは単なる例であり、実際のアルゴリズムではありません。関数 $memcached->getServerByKey( 'K4') を使用して、どのサーバーでどのキーが使用されているかを確認できます。次に、1 つのサーバーをダウンさせ、この失敗後に getServerByKey() が何を送信するかを確認します。