Здравствуйте.
Столкнулись с проблемой некорректного отображения ключиков на
несколько мемкашед-серверов при включённом балансере memcached_hash (
http://openhack.ru/nginx-patched/wiki/MemcachedHash ). Проблема в том,
что перловые модули Cache::Memcached и Cache::Memcached::Fast, которые
записывают ключики в мемкашед, при расчёте сервера используют ключ без
нэйспейса.
А почему они так делают? Мне кажется, что тут скорее поведение этих
библиотек менее валидное, чем поведение nginx.
Поправьте меня, если я не прав, но неймспейсы - это исключительно
софтовое решение, а выбор сервера должен быть сделан на основе ключа
сохранения, вне зависимости из каких частей он состоит.
А в конфиге nginx-а можно было задать только ключик.
Поэтому нейспейс писался прямо в ключик:
set $memcached_key "my-namespace$uri$is_args$args";
И это прекрасно работало, когда не было балансера (ибо nginx обходил
все мемкашед-сервера в поисках ключа).
Но чтобы корректно вычислить мемкашед-сервер нужен только ключик без
неймспейса. По этой причине мы добавили переменную
$memcached_namespace:
set $memcached_namespace "my-namespace";
set $memcached_key "$uri$is_args$args";
С ней всё будет работать как и прежде, но перед отправкой запроса к
мемкашеду, к ключу будет препендиться неймспейс, а мемкашед-сервер
будет вычисляться только от ключа.
Подробнее тут: http://openhack.ru/nginx-patched/wiki/MemcachedHash