Stiamo utilizzando Zend Cache con un backend memcached che punta a un cluster ElastiCache AWS con 2 nodi di cache. La nostra configurazione della cache si presenta così:Valori della cache incoerenti con Zend Cache con AWS ElastiCache su più server
$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);
Non abbiamo notato alcun problema con la cache in passato, quando si utilizza un unico server EC2 di scrivere e leggere dalla cache.
Tuttavia, abbiamo recentemente introdotto un secondo server EC2 e all'improvviso riscontriamo problemi durante la scrittura nella cache da un server e la lettura da un altro. Entrambi i server sono gestiti dallo stesso account AWS e nessuno dei due server ha problemi di scrittura o lettura dalla cache individualmente. La stessa configurazione della cache è utilizzata per entrambi.
Server Un esegue $cache->save('hello', 'message');
Le chiamate successive a $cache->load('message');
da Server A restituire il risultato atteso di ciao.
Tuttavia, quando Server B esegue $cache->load('message');
, otteniamo falsa.
Per quanto riguarda la mia comprensione di ElastiCache, il server che esegue la richiesta di lettura non dovrebbe incidere sul valore di cache restituito. Qualcuno può far luce su questo?
Suppongo che si tratti di un problema di latenza, hai provato a dormire (xxxx) e poi esegui il $ cache-> carica da B? –
Sfortunatamente, questo non è il caso. Anche ore dopo un valore impostato da A non è leggibile da B. – michaelxor
Quale versione di PHP stai usando? Penso che la serializzazione sia ciò che è in gioco qui. Prova a disabilitare la serializzazione automatica e guarda cosa succede. Lo sfortunato effetto collaterale è che devi serializzare tutto manualmente che non è una stringa. –