31

2 つのキャッシュ ノードを持つ AWS ElastiCache クラスターを指す memcached バックエンドで Zend Cache を使用しています。キャッシュのセットアップは次のようになります。

$frontend = array(
    'lifetime' => (60*60*48),
    'automatic_serialization' => true,
    'cache_id_prefix' => $prefix
);
$backend = array(
    'servers' => array(
        array( 'host' => $node1 ),
        array( 'host' => $node2 )
    )
);
$cache = Zend_Cache::factory('Output', 'memecached', $frontend, $backend);

過去に、単一の EC2 サーバーを使用してキャッシュの書き込みと読み取りを行った場合、キャッシュに関する問題に気付いたことはありません。

しかし、最近 2 台目の EC2 サーバーを導入したところ、突然、あるサーバーからキャッシュに書き込み、別のサーバーから読み取るときに問題が発生するようになりました。両方のサーバーは同じ AWS アカウントによって管理されており、どちらのサーバーも個別にキャッシュへの書き込みまたはキャッシュからの読み取りに問題はありません。両方に同じキャッシュ構成が使用されます。

サーバー Aが実行する$cache->save('hello', 'message');

サーバー A$cache->load('message');からの後続の呼び出しは、期待されるhelloの結果を返します。

ただし、サーバー Bが実行される$cache->load('message');と、falseが返されます。

ElastiCache に関する私の理解では、読み取りリクエストを行うサーバーは、返されるキャッシュ値に影響を与えるべきではありません。誰でもこれに光を当てることができますか?

4

2 に答える 2

1

memcache に使用している hash_strategy を教えてください。過去にデフォルトの標準を使用して問題が発生しましたが、一貫性に変更してからはすべて問題ありません。

http://php.net/manual/en/memcache.ini.php#ini.memcache.hash-strategy

于 2013-01-02T11:09:20.013 に答える
0

通常のハッシュ アルゴリズムでは、サーバーの数を変更すると、多くのキーが別のサーバーに再マップされ、大量のキャッシュ ミスが発生する可能性があります。

キャッシュ クラスターに 5 つの ElastiCache ノードがあるとします。6 つ目のサーバーを追加すると、キーの 40% 以上が通常とは異なるサーバーを突然指すようになる可能性があります。このアクティビティは望ましくありません。キャッシュ ミスが発生し、最終的にバックエンド DB がリクエストで圧倒される可能性があります。この再マッピングを最小限に抑えるには、キャッシュ クライアントで一貫したハッシュ モデルに従うことをお勧めします。

Consistent Hashing は、サーバーの追加または削除を考慮して、より安定したキーの配布を可能にするモデルです。Consistent Hashing では、サーバーのリストにキーをマッピングする方法について説明しています。この場合、サーバーの追加または削除によって、キーがマップされる場所の変化が最小限に抑えられます。このアプローチを使用すると、11 番目のサーバーを追加しても、再割り当てされるキーは 10% 未満になります。この % は本番環境で異なる場合がありますが、通常のハッシュ アルゴリズムと比較して、このような柔軟なシナリオでははるかに効率的です。コンシステント ハッシュを使用しながら、すべてのクライアント構成で memcached サーバーの順序とサーバー数を同じに保つこともお勧めします。Java アプリケーションは、spymemcached を介して「Ketama ライブラリ」を使用して、このアルゴリズムをシステムに統合できます。コンシステント ハッシュの詳細については、次の URL を参照してください。http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients

于 2013-04-17T12:37:50.187 に答える