Как приложение на EC2 может автоматически обнаруживать экземпляры ElastiCache? - PullRequest
7 голосов
/ 16 сентября 2011

Скажем, у меня есть веб-приложение, работающее на некотором количестве серверов EC2 с балансировкой нагрузки, хранящее и извлекающее метаданные из SimpleDB с большими порциями данных, хранящихся на S3 (из-за ограничения SimpleDB в 1 КБ). Так как S3 имеет довольно большую задержку, и я не хочу делать кучу запросов, мне нужен слой кэширования для информации ... введите ElastiCache.

Хорошо, поэтому я предоставляю сервер ElastiCache с конечной точкой X, чтобы я жестко запрограммировал X в свое приложение на EC2, и оно успешно работает, пока я не получу несколько сотен тысяч новых пользователей, и внезапно мой сервер кэширования не в восторге от потребности. К счастью, я могу просто запустить несколько новых более крупных серверов кеша ... но потом я понимаю, что у меня есть конечные точки X, Y и Z, и мое приложение знает только попытку X, поэтому у меня все еще есть проблема.

Так что сейчас я просто пытаюсь обернуть голову вокруг различных частей этой головоломки, и я еще не дошел до части кодирования, но не будет ли это проблемой? Я прочитал документацию по ElastiCache, и там упоминается, что это кластер кеша, но каждый сервер в кластере, похоже, имеет свою конечную точку. Есть ли способ для приложения, работающего на EC2, узнать обо всех запущенных серверах кеша, и более того, какой из них содержит данные для определенного ключа? Можно ли попросить кластер в целом сохранить или получить информацию?

Ответы [ 3 ]

3 голосов
/ 30 ноября 2012

Сегодня Aws объявила об открытии кэша.Ваша проблема решена.http://aws.typepad.com/aws/2012/11/amazon-elasticache-now-with-auto-discovery.html.

0 голосов
/ 02 апреля 2014

Автоматическое обнаружение Elasticache от Amazon абсолютно ужасно.Это в принципе невозможно установить, что является сумасшествием, потому что это должно быть очень просто.

Я написал простую функцию в PHP для генерации URL-адреса узла эластичного кэша, учитывая количество запущенных вами узлов.Да, вы должны обновить свой код, если вы измените количество узлов (или, возможно, поместите это значение в переменную env).

Он сопоставляет одни и те же ключи с одинаковыми узлами:

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 );

Вывод:

cluster-name.xyzxyz.0001.use1.cache.amazonaws.com
cluster-name.xyzxyz.0004.use1.cache.amazonaws.com
0 голосов
/ 30 октября 2011

Если ваше приложение развернуто из versioncontrol (я надеюсь, что это так), вы просто отредактируете файл конфигурации и повторно развернете приложение. Я не вижу большой проблемы с этим подходом, но, возможно, я упускаю очевидное.

Дайте мне знать.

...