効率的なロードバランシングのための ElastiCache クライアントの設定 (Memcached) - Amazon ElastiCache

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

効率的なロードバランシングのための ElastiCache クライアントの設定 (Memcached)

注記

このセクションは、独自設計型のマルチノード Memcached クラスターに適用されます。

複数の ElastiCache Memcached ノードを効果的に使用するには、キャッシュキーをノード全体に分散できる必要があります。ノード数 n 個のクラスターで負荷を分散する場合、簡単な方法は、オブジェクトのキーのハッシュを計算し、その結果を n - hash(key) mod n で除算して剰余を求めることです。結果の値(0~n–1)が、オブジェクトを配置するノードの数になります。

この手法は単純で、ノードの数(n)が一定である限り有効です。ただし、クラスターからノードを追加または削除する場合、移動する必要があるキーの数は (n - 1) / n (n は新しいノード数) です。したがって、この手法では多数のキーが移動され、特にノード数が大きくなると、初期のキャッシュミスが多数発生します。1 ノードから 2 ノードへのスケーリングでは、キーの (2-1)/2 (50 パーセント) が移動されます。9 ノードから 10 ノードへのスケーリングでは、キーの (10–1)/10 (90 パーセント) が移動されます。トラフィックのスパイクの理由からスケールアップする場合、多数のキャッシュミスが発生することは避けたいものです。多数のキャッシュミスは、トラフィックのスパイクにより既に過負荷になっているデータベースのヒットとなります。

このジレンマには、整合性のあるハッシュがソリューションとなります。整合性のあるハッシュではアルゴリズムを使用し、ノードがクラスターから追加または削除されるたびに、移動する必要のあるキーの数は約 1/n となります (n は新しいノード数)。1 ノードから 2 ノードへのスケーリングでは、キーの 1/2 (50 パーセント) が移動され、最悪のケースとなります。9 ノードから 10 ノードへのスケーリングでは、キーの 1/10 (10 パーセント) が移動されます。

ユーザーとして、複数ノードのクラスターに使用されるハッシュアルゴリズムを制御します。整合性のあるハッシュを使用するようにクライアントを設定することをお勧めします。さいわい、整合性のあるハッシュを実装する Memcached クライアントライブラリは数多くあり、ほとんどの一般的な言語で提供されています。使用中のライブラリのドキュメントを参照し、整合性のあるハッシュをサポートするかどうかと、その実装方法について確認してください。

Java、PHP、または で作業している場合はNET、Amazon ElastiCache クライアントライブラリのいずれかを使用することをお勧めします。

Java を使用した整合性のあるハッシュ

ElastiCache Memcached Java クライアントは、オープンソースの spymemcached Java クライアントに基づいており、一貫したハッシュ機能が組み込まれています。ライブラリには、一貫したハッシュを実装するKetamaConnectionFactory クラスが含まれています。デフォルトでは、整合性のあるハッシュは spymemcached では無効になっています。

詳細については、「」の KetamaConnectionFactory ドキュメントを参照してくださいKetamaConnectionFactory

Memcached PHP を使用した一貫したハッシュ

ElastiCache Memcached PHPクライアントは、組み込みの Memcached PHPライブラリを囲むラッパーです。デフォルトでは、一貫したハッシュは Memcached PHPライブラリによってオフになっています。

整合性のあるハッシュを有効にするには、以下のコードを使用します。

$m = new Memcached(); $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

また、先ほどのコードに加えて、php.ini ファイルで memcached.sess_consistent_hash を有効にすることをお勧めします。

詳細については、PHPhttp://php.net/manual/en/memcached.configuration.php の Memcached のランタイム設定ドキュメントを参照してください。特に、memcached.sess_consistent_hash パラメータについて参照してください。

Memcached NETでの を使用した一貫したハッシュ

ElastiCache Memcached 。NET クライアントは Enyim Memcached の周りのラッパーです。デフォルトでは、Enyim Memcached クライアントによって、整合性のあるハッシュが有効になります。

詳細については、https://github.com/enyim/EnyimMemcached「/wiki/MemcachedClient-Configuration#user-content-memcachedlocator」のmemcached/locatorドキュメントを参照してください。