Estamos utilizando Zend Cache con un servidor de memcached apuntando a un clúster AWS ElastiCache con 2 nodos de caché. Nuestra configuración de caché es el siguiente:Valores de caché inconsistentes utilizando Zend Cache con AWS ElastiCache en varios servidores
$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);
No hemos notado ningún problema con la memoria caché en el pasado cuando se utiliza un único servidor EC2 para escribir y leer desde la memoria caché.
Sin embargo, recientemente hemos introducido un segundo servidor EC2 y de repente estamos viendo problemas al escribir en la memoria caché de un servidor y leer de otro. Ambos servidores son administrados por la misma cuenta de AWS, y ninguno de los servidores tiene problemas para escribir o leer el caché de forma individual. La misma configuración de caché se usa para ambos.
servidor A ejecuta $cache->save('hello', 'message');
llamadas subsiguientes a $cache->load('message');
desde el servidor A devolver el resultado esperado de hola.
Sin embargo, cuando el servidor B ejecuta $cache->load('message');
, obtenemos falsa.
En lo que respecta a mi comprensión de ElastiCache, el servidor que realiza la solicitud de lectura no debe tener relación con el valor de caché devuelto. ¿Alguien puede arrojar algo de luz sobre esto?
Supongo que se trata de un problema de latencia, ¿ha intentado dormir (xxxx) y luego realizar la carga de $ cache- desde B? –
Lamentablemente, este no es el caso. Incluso horas después, un valor establecido desde A no es legible desde B. – michaelxor
¿Qué versión de PHP estás usando? Creo que la serialización es lo que está en juego aquí. Pruebe a deshabilitar la serialización automática y vea qué sucede. El efecto secundario desafortunado es que tienes que serializar todo manualmente que no sea una cadena. –