У меня вопрос о распределении memcached по узлам. У нас есть 20 узлов memcached по 200 ГБ на каждом. Наши приложения - это приложения PHP.
$memcache->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
Каков будет результат, если произойдет следующее:
Ключ "XXX", который находится на узле 2, просит установить
=> Я полагаю, что ключ будет записан на другом узле, возможно узле 5
От какого узла memcached будет получать ключ: от узла 5 или узла 2?
Узел выбирается на основе алгоритма хеширования, который решает, как распределять ключи между доступными хостами. Вы можете прочитать о двух типах распространения, предлагаемых клиентской библиотекой PHP, поискав Memcached::DISTRIBUTION_MODULA
и Memcached::DISTRIBUTION_CONSISTENT
алгоритмы распределения.
По мере добавления или удаления узлов это может привести к получению / сохранению для любого конкретного ключа, приземляющегося на том же или другом узле, но в конечном итоге это не имеет значения. Вы все равно будете заполнять ключ при промахе кеша в новом узле, и любое старое значение для того же ключа в других узлах просто не будет доступно, истечет и исчезнет.
С точки зрения хранения Memcache больше похож на матрас, чем на банк.