Я не смог ответить на несколько вопросов о memcached, хотя я много искал в Интернете.
Спасибо
- Какой алгоритм хеширования используется модулем PHP memcached?
Есть разные в зависимости от ваших потребностей. Смотрите эту страницу для вариантов: http://php.net/manual/en/memcached.constants.php Вы можете использовать стандартную операцию по модулю для подсчета количества экземпляров в пуле (DISTRIBUTION_MODULA
) или согласованный алгоритм распределения ключей хеширования (DISTRIBUTION_CONSISTENT
). Есть также опции для алгоритма хеширования на самих ключах элементов, если это необходимо (HASH_
).
Если вы собираетесь часто сбрасывать экземпляры в пул и из него, вам следует обратить внимание на согласованный подход хэширования. На самом деле я никогда не использовал его, и, вероятно, следовало бы, так как это могло бы смягчить последствия отказов серверов, без ощутимого снижения производительности при прохождении этого пути … кажется, нет ничего сложного в ретроспективе. Думая, что расширение memcached должно изменить значение по умолчанию на это. Я читал, что при последовательном хешировании вы можете ожидать потерю 10-25% ваших ключей (или меньше при большем количестве серверов в пуле), где при подходе по умолчанию это может быть ближе к потере 100%.
Чтобы быть более конкретным, последовательный алгоритм основан на libketama. В этом файле readme содержится хорошая информация о том, почему он возник и как он работает.
- Каковы его настройки (то есть сколько раз он добавляет сервер на ринге?)
Я не уверен, что понимаю, что вы спрашиваете здесь. Сколько «галочек» добавлено в континуум с каждым новым сервером? Думаю, нам нужно больше взглянуть на библиотеку ketama — догадываясь, что она пытается найти баланс между производительностью и меньшим количеством промахов.
- Кэшируется ли массив хэш-памяти (континуальное кольцо) или он пересчитывается при каждом выполнении скрипта? Если это последнее, это вызовет проблемы с производительностью / тратой вычислительной мощности?
Не уверен на 100% честно. Хотя это может быть бесполезным вычислением, все еще кажется достаточно тривиальным — алгоритм md5 и некоторая арифметика. Все, что я могу сказать, это то, что Memcached очень быстр. Если вам нужна высокая доступность, постоянное распределенное хранилище, вы можете посмотреть что-то еще, например couchDB. Memcached очень хорош в том, что он делает … в памяти ключей / значений для «маленьких» значений.
Вам могут понравиться эти статьи:
Других решений пока нет …