メニュー
Amazon ElastiCache
ユーザーガイド (API Version 2015-02-02)

効率的な負荷分散のための ElastiCache クライアントの設定

注記

このセクションは、複数ノードの 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 のドキュメント (http://dustin.sallings.org/java-memcached-client/apidocs/net/spy/memcached/KetamaConnectionFactory.html) を参照してください。

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

ElastiCache Memcached PHP クライアントは、組み込みの Memcached PHP ライブラリのラッパーです。デフォルトでは、整合性のあるハッシュは Memcached PHP ライブラリによって無効になっています。

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

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

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

詳細については、Memcached PHP の実行時設定に関するドキュメント (http://php.net/manual/en/memcached.configuration.php) を参照してください。特に、memcached.sess_consistent_hash パラメータについて参照してください。

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

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

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