Кластер Memcached AWS не хранит ключ на том же узле

Я создал кластер memcached в инструменте Elasticache AWS.

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

Есть ли какой-либо параметр конфигурации кластера memcached, чтобы заставить его не менять ссылочный узел для ключа?

Теперь я использую параметры конфигурации по умолчанию файла AWS default.memcached1.4. /ParameterGroups.Memcached.html" rel="nofollow">http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/ParameterGroups.Memcached.html, и я не нахожу никакой информации, дающей мне советы по как решить эту проблему. (Pd. Когда я прямо указываю свою программу на конкретный узел, все работает нормально)


person chuseuiti    schedule 11.05.2016    source источник


Ответы (1)


Так и должно быть.

На следующей диаграмме показаны типичный кластер Memcached и типичный кластер Redis. Кластеры Memcached содержат от 1 до 20 узлов, по которым вы можете горизонтально разбивать свои данные. Редис

Из http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/Clusters.html

В документации по django говорится нечто подобное.

Одной из замечательных особенностей Memcached является возможность совместного использования кеша несколькими серверами. Это означает, что вы можете запускать демоны Memcached на нескольких машинах, и программа будет рассматривать группу машин как единый кеш без необходимости дублировать значения кеша на каждой машине.

Другими словами, вы не можете напрямую запрашивать данные с любого заданного узла в кластере. Вы должны позволить API кеша django выяснить, как получить данные.

С redis поведение противоположное. После записи в кластер вы можете запросить данные на любом узле кластера, потому что они будут реплицированы на них все. Где, как и в memcache, он сегментирован.

person e4c5    schedule 11.05.2016
comment
Но я ожидал, что memcached сохранит согласованность одного и того же ключа. узлы? Что касается Redis: тогда кластер Redis только реплицирует данные, а не масштабирует размер кеша для записи? - person chuseuiti; 12.05.2016
comment
Это правильно. Если у вас есть 10 кэшей Redis по 1 ГБ, сгруппированных вместе, общая емкость хранилища составляет 1 ГБ. ЕСЛИ у вас есть 10 кэшей memcached, сгруппированных вместе, ваше хранилище составляет 10 ГБ - с разными кэшами, содержащими разные ключи. Вы не должны обращаться напрямую к какому-либо одному кешу, но должны позволить API верхнего уровня решить за вас, к какому кешу перейти. - person e4c5; 12.05.2016