Сегодня в разговоре с одним знакомым всплыл следующий вопрос. В случае, если для дистрибуции ключей по нодам кластера используется типичная схема остатка от деления на количество серверов, какая доля ключей осуществляют миграцию, если один из серверов выводится из схемы? Интуитивным ответом является: "почти все" или "большинство". Тем не менее, если вы любите тренировать мозг, то вот вам небольшая задачка имеющая приложение в web-программировании.
Формально говоря: при заданном количестве серверов
Nи хеширующей функцииƒ(x)обладающей выходным множеством с мощностьюP(log(P)бит, для crc32P = 232, для md5P = 2128) какое количество ключей осуществит миграцию в случае, если серверов станетN-1, а для дистрибуции ключей используется значениеf(x) % N.
Ответом является формула описывающая зависимость количества мигрирующих ключей от изначального количества серверов и/или количества хранимых ключей.
Допущения: функция ƒ(x) имеет равномерное распределение на всем множестве входных значений, P несравнимо больше N.
Удачи!
Лучше использовать алгоритм ketama. Там меньше меняется.
ОтветитьУдалитьВопрос в том, насколько меньше.
ОтветитьУдалить