Ответ 1
Хорошо, что у меня много вопросов, позвольте мне попытаться изо всех сил ответить один за другим.
1) Каким будет код для создания Consistent Hashed Key в PHP? Какие библиотеки мне нужно установить и что мне действительно нужно делать? Любая хорошая статья, чтобы пройти?
Хорошо, поскольку вы ставите свой код под вопросом, этого кода достаточно для последовательного хеширования в PHP. Вам просто нужно использовать библиотеку LibMemcached Client для использования Consistent Hashing с Memcached. Просто добавьте следующую строку под своим кодом.
$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
Настоятельно рекомендуется включить эту опцию, если вы хотите использовать согласованное хеширование, и оно может быть включено по умолчанию в будущих выпусках. Следуйте этому за кучей констант и их определению для лучшего понимания http://www.php.net/manual/en/memcached.constants.php
Хотя лучший aproach может быть для более высокой производительности, установив глобально в php.ini(я еще не тестировал.)
memcache.hash_strategy = consistent;
как предлагается в http://blog.fedecarg.com/2008/12/24/memcached-consistent-hashing-mechanism/, тогда вам не нужно указывать индивидуально в каждом вызове memcached. Значение по умолчанию - стандартное, и используется расчет модуля, который не будет полезен при добавлении или удалении серверов.
2) Предположим, что я успешно сохранил Consistent Hashed Key, теперь, если мой какой-либо сервер опущен или добавлен новый сервер, будет ли он иметь какое-либо значение, даже если я использую Consistent Hashed Key и т.д.
Хотя, как сказал lsmooth, всегда будет удаваться, когда серверы будут удалены или добавлены, но минимальные, так как предположим, что добавление 1 сервера на 3 сервера приведет к потере ключей на 1/4 = 25%, так как многие серверы будут меньше шансов потери ключей.
3) Будет использовать Memcached:: addServers() вместо Memcached:: addServer() внести изменения в случае Consistent Hashing, как указано в http://ru.php.net/manual/en/memcached.addserver.php если нет, то что означает?
Как сказал Иштут. Он прав. Он предпочитает использовать addServers. Обратите внимание, что "addServers()" необходимо вызвать после того, как все параметры заданы с помощью setOption, иначе параметры не будут применяться к этим серверам.
4) Используется ли вышеприведенный код для Consistent Hashing, а затем добавление/удаление серверов не будет иметь никакого значения для ключей?
Уже ответили на вопрос № 1.
5) Что такое библиотека Ketama? и почему его использовать, если Memcached:: DISTRIBUTION_CONSISTENT может работать лучше? http://www.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
LibKetama - это библиотека, на которой основан алгоритм распределения согласования Хейшинга. Таким образом, использование Consistent Hashing в Memcached означает использование LibKetama и что это такое.
6) Нужно ли мне каким-то образом хэшировать мои ключи или просто предоставить мой ключ и оставить обработчик Memcached остальным?
Сказал Yvan, что "клиент Memcached автоматически запустит ваши ключи. Скажем, у вас есть 3 сервера, A, B и C и 3 клавиши" K1 "на" K9 ". Например, алгоритм хеш-клиента будет храниться следующим образом: K1/K2/K3, хранящиеся на A, K4/K5/K6, хранящиеся на B, K7/K8/K9, сохраненные на C. Если ваш сервер B опускается, его клавиши (K4/K5/K6) будут храниться равномерно на 2 оставшихся серверов (A и C). Например, K4 перейдет к A, а K5/K6 перейдет на сервер C.
Это просто пример, а не настоящий алгоритм. Вы можете узнать, какой ключ находится на сервере с функцией $memcached- > getServerByKey ('K4'). Затем запустите один сервер и посмотрите, что получит после этого сбой getServerByKey() в http://www.dugwood.com/895442.html#dwCmtForm.