Как MemCacheStore действительно работает с несколькими серверами?

#ruby-on-rails #ruby-on-rails-3 #caching #memcached #session-state

#ruby-on-rails #ruby-on-rails-3 #кэширование #memcached #состояние сеанса

Вопрос:

Я нигде не могу найти документацию о поведении ActiveSupport::Cache ::MemCacheStore, и я надеюсь, что кто-нибудь здесь сможет пролить некоторый свет. В rdoc говорится:

«Кластеризация и балансировка нагрузки. Можно указать несколько серверов memcached, и MemCacheStore распределит нагрузку между всеми доступными серверами. Если сервер выходит из строя, MemCacheStore будет игнорировать это, пока он не восстановится.«

ОК. Мне нужна последняя функция, чтобы при сбое сервера memcache весь стек не выходил из строя. Но мне нужно понять функцию балансировки нагрузки. Я предполагаю, что это не просто циклические запросы, поскольку, похоже, это привело бы к ненужным промахам в кэше. Кроме того, я использую memcache для сеансов, поэтому я бы не хотел, чтобы у кого-то, вошедшего в систему, внезапно не было сеанса, потому что клиент memcache «балансирует нагрузку» на этот запрос к серверу, у которого нет этого сеанса…

Кто-нибудь может помочь мне понять, как работает функция «балансировки нагрузки»?

Ответ №1:

Насколько я понимаю, он использует механизм хеширования, чтобы определить, на какой сервер memcache отправлять запросы. Механизм хеширования использует ключ, если хранится пара ключ-значение, поэтому, когда значение запрашивается ключом, тот же метод хеширования укажет rails правильный сервер memcache для извлечения данных.

Это означает, что если сервер memcache умрет, вы потеряете часть данных, которые кэшируются на нем (т. Е. в конфигурации с 3 серверами, если 1 сервер умрет, вы потеряете 33% своего кэша)

РЕДАКТИРОВАТЬ: См. http://www.ruby-forum.com/topic/100104 для гораздо лучшего объяснения этого, чем я только что дал.

Комментарии:

1. Отличное описание, имеет смысл. Спасибо за описание и ссылку.