#memcached #amazon-elasticache #python-memcached
#memcached #amazon-elasticache #python-memcached
Вопрос:
Я столкнулся с проблемой, когда у меня есть клиент python-memcached, подключающийся к 3 узлам memcached в ElastiCache. У меня есть некоторые значения кэша, которые имеют бесконечный TTL, и они переопределяются при обновлении источника данных. Кэш также записывается в случае промахов кэша.
Проблема в том, что memcached иногда возвращает старые кэшированные значения. Мое лучшее предположение о том, что происходит, это:
- «foo» записывается в memcached A.
- memcached A временно недоступен в процессе # 1, поэтому он помечен как сбой.
- процесс # 1 использует memcached B, в котором отсутствует кэш, поэтому он записывает «bar» в memcached B и возвращает это значение.
- процесс # 2 может подключаться к memcached A и не знает, что процесс # 1 пометил его как плохой узел, поэтому он подключается и возвращает «foo».
- каждый раз, когда процесс может подключиться к memcached, возвращается «foo», но всякий раз, когда он временно помечен как мертвый, подключается memcached B и возвращается «bar».
Вот строка, в которой сбой приводит к выбору нового сервера:https://github.com/linsomniac/python-memcached/blob/release-1.57/memcache.py#L413
Я посмотрел на клиент хеширования для pymemcached, и я думаю, что он сделает то же самое: временно удалит узел memcached и попытается использовать другой.
Это имеет смысл, когда хост будет удален навсегда, но не имеет смысла для меня, когда хост может быть недоступен в течение нескольких секунд. Я что-то упускаю? Являются ли бесконечные TTL антишаблоном memcached?