7

Supongamos que tengo una aplicación web ejecutándose en algunos servidores EC2 de carga equilibrada, almacenando y recuperando metadatos de SimpleDB con grandes cantidades de datos almacenados en S3 (debido a la limitación de 1 KB de SimpleDB). Como S3 tiene una latencia bastante alta y no quiero hacer un montón de solicitudes allí, querré una capa de almacenamiento en caché para la información ... ingrese ElastiCache.¿Cómo puede una aplicación en EC2 detectar automáticamente las instancias de ElastiCache?

Ok, aprovisiono un servidor ElastiCache con el punto final X, así que codigo X en mi aplicación en EC2 y funciona felizmente hasta que recibo unos cientos de miles de nuevos usuarios y de repente mi servidor de caché tiene poco poder para la demanda . Afortunadamente, puedo iniciar algunos nuevos servidores de caché más grandes ... pero luego me doy cuenta de que tengo los puntos finales X, Y y Z y mi aplicación solo sabe para probar X, así que todavía tengo un problema.

Así que en este momento estoy tratando de meter mi cabeza alrededor de las diversas piezas de este rompecabezas, y todavía no he llegado a la parte de codificación, pero ¿no será esto un problema? He leído la documentación de ElastiCache y menciona que se trata de un clúster de caché, pero cada servidor del clúster parece tener su propio punto final. ¿Hay alguna manera de que una aplicación que se ejecuta en EC2 conozca todos los servidores de caché que se están ejecutando, y más al punto que uno contiene los datos de una clave en particular? ¿Es posible pedirle al clúster como un todo que almacene o recupere una información?

+0

dudo que tiene una gran importancia a la respuesta de esta pregunta, pero para cualquiera que sea su pena mi EC2 la aplicación probablemente se hará en PHP. –

+0

Observé una solicitud de función en la misma línea en https://forums.aws.amazon.com/thread.jspa?threadID=74852, por lo que desafortunadamente parece que tener un archivo de configuración con los puntos finales de la caché es todo lo que puede hacer por ahora. –

Respuesta

0

Si su aplicación se implementa desde versioncontrol (espero que lo sea), simplemente edite el archivo de configuración y vuelva a implementar la aplicación. No veo un gran problema con este enfoque, pero tal vez me falta lo obvio.

Avísame.

+2

Tenía la esperanza de que hubiera un mecanismo elástico para presentar el clúster de caché a la aplicación como si se tratara de un único servidor. no tener que preocuparse de qué punto final golpear para una clave en particular, no tener que preocuparse por la configuración de la memoria caché al girar o cerrar un nodo de la memoria caché, etc. Parecería que tal cosa no existe todavía. –

+0

No es así. Generalmente, ElastiCache de AWS le proporciona nodos. Cómo se usan esos nodos (por ejemplo, ¿los usa todos como una tienda gigante, o duplica, etc.) depende de usted? Así es como funciona Memcache. Probablemente pueda incluir su descubrimiento en una llamada periódica a la API, pero no lo recomendaría. Re-implementamos para estos cambios. – Till

+0

No pondría magia extendida alrededor de esto. P.ej. simplemente agregar un nodo generalmente no es una buena idea o algo con lo que tu aplicación probablemente pueda lidiar. P.ej.cuando agregue otro nodo a nuestro clúster de ElasticCache, necesito volver a equilibrar el clúster de caché, por así decirlo. Por lo general, es más fácil agregarlo a la configuración, ajustar la configuración para ext/memcache (utilizamos PHP) y luego comenzar de cero vaciando la memoria caché y dejándola volver a llenarla. – Till

0

Amazonstica Elasticache Autodescubrimiento es absolutamente horrible. Es básicamente imposible de instalar, lo cual es una locura porque debería ser muy simple.

Escribí una función simple en PHP para generar una URL de nodo elasticache dada la cantidad de nodos que tiene en ejecución. Sí, tienes que actualizar tu código si cambias la cantidad de nodos (o quizás coloques este valor en un env var).

Al trazar las mismas claves a los mismos nodos:

function get_elasticache_node_url($key, $config_url, $num_nodes) { 
    $node = hexdec(substr(md5($key), 0, 15)) % $num_nodes + 1; 
    $nodestr = str_pad($node, 4, "0", STR_PAD_LEFT); 
    return str_replace('.cfg.','.'.$nodestr.'.',$config_url); 
} 

$num_nodes = 10; 
$config_url = 'cluster-name.xyzxyz.cfg.use1.cache.amazonaws.com'; 

echo get_elasticache_node_url("key1", $config_url, $num_nodes); 
echo get_elasticache_node_url("key2", $config_url, $num_nodes); 

Salida:

cluster-name.xyzxyz.0001.use1.cache.amazonaws.com 
cluster-name.xyzxyz.0004.use1.cache.amazonaws.com 
Cuestiones relacionadas