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を理解している限り、読み込み要求を行っているサーバーは返されたキャッシュ値に影響しないはずです。誰かがこれについていくつかの光を当てることができますか?
にあります。これはレイテンシの問題だと思いますが、スリープ(xxxx)してからBから$ cache-> loadを実行しようとしましたか? –
残念ながら、これは当てはまりません。数時間後でさえ、Aからの値セットはBから読み取れません。 – michaelxor
ご使用のPHPのバージョンは?私はシリアライゼーションがここで演奏されているものだと思います。自動シリアル化を無効にして、何が起こるかを確認してください。不運な副作用は、文字列ではないすべてのものを手動でシリアル化する必要があることです。 –