Назад | Перейти на главную страницу

Как php узнает, в каком узле memcached искать данные?

Я новичок в мире кластеров Memcached

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

Бонус: как я могу легко добавить узел таким образом, чтобы избежать необходимости перестраивать все хэши.

Клиенты Memcache знают, какой узел проверять, хешируя значение ключа. По умолчанию он использует значение ключа crc32. В старом стиле вы бы сделали что-нибудь вроде

serverId = crc32(key) % servers.size

Это означало, что когда вы добавляли новый узел сервера, большинство вещей было переназначено на другой узел.

В качестве бонуса используйте новый стиль, в котором каждый узел покрывает линейный диапазон значений crc, определяемых случайно выбранным номером сервера, а не каждым N-м значением. Это называется согласованным хешированием.