30

2つのキャッシュノードを持つAWS ElastiCacheクラスタを指すmemcachedバックエンドでZend Cacheを使用しています。当社のキャッシュ設定は次のようになります。Zend Cacheと複数のサーバー間でAWS ElastiCacheを使用するキャッシュの値が一貫していません

$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サーバーが導入されました。突然、1つのサーバーからキャッシュに書き込み、別のサーバーから読み取るときに問題が発生しています。両方のサーバは同じAWSアカウントで管理されており、いずれのサーバもキャッシュへの書き込みやキャッシュからの読み取りに問題はありません。両方に同じキャッシュ構成が使用されます。

Serverはハローの期待される結果を返すサーバAから$cache->load('message');$cache->save('hello', 'message');

以降の呼び出しを実行します。しかし

サーバーBは、我々はを取得し、$cache->load('message');を実行します。

ElastiCacheを理解している限り、読み込み要求を行っているサーバーは返されたキャッシュ値に影響しないはずです。誰かがこれについていくつかの光を当てることができますか?

+0

にあります。これはレイテンシの問題だと思いますが、スリープ(xxxx)してからBから$ cache-> loadを実行しようとしましたか? –

+0

残念ながら、これは当てはまりません。数時間後でさえ、Aからの値セットはBから読み取れません。 – michaelxor

+0

ご使用のPHPのバージョンは?私はシリアライゼーションがここで演奏されているものだと思います。自動シリアル化を無効にして、何が起こるかを確認してください。不運な副作用は、文字列ではないすべてのものを手動でシリアル化する必要があることです。 –

答えて

0

通常のハッシュアルゴリズムを使用すると、サーバーの数を変更すると多くのキーを引き起こす可能性があります別のサーバーに再マップされ、キャッシュミスの巨大なセットが発生します。

キャッシュクラスタに5つのElastiCacheノードがあるとすると、6番目のサーバーを追加すると、キーの40%以上が突然、通常とは異なるサーバーを指してしまうことがあります。このアクティビティは望ましくないことであり、キャッシュミスを引き起こし、最終的にバックエンドDBを要求に襲いかける可能性があります。この再マッピングを最小限に抑えるには、キャッシュクライアントで一貫したハッシングモデルを実行することをお勧めします。

一貫性のあるハッシングは、サーバーの追加または削除により、キーの安定した配布を可能にするモデルです。 Consistent Hashingでは、サーバーの追加または削除によってキーがマップされる場所が非常に少なくなるため、サーバーのリストにキーをマップする方法が記述されています。この方法を使用すると、11番目のサーバーを追加すると、キーの10%未満が再割り当てされます。この%は生産時に変化する可能性がありますが、通常のハッシュアルゴリズムと比較してそのような弾力的なシナリオでははるかに効率的です。一貫したハッシングを使用している間は、すべてのクライアント構成でmemcachedサーバーの順序とサーバー数を同じに保つこともお勧めします。 Javaアプリケーションはspymemcachedを介して "Ketamaライブラリ"を使用して、このアルゴリズムをシステムに統合することができます。一貫したハッシングの詳細については、http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients

関連する問題