Если у вас есть веб-сайт, вам нужно использовать Redis для хранения изображений, имя изображения является ключом, а адрес изображения — значением.На данный момент у вас есть 4 сервера Redis для хранения этих изображений.
пользователь для доступаflowers.png
картинки, но не знаюflowers.png
В каком из 4-х наборов находится адрес?Обходить однозначно ненаучно.Здесь нужен алгоритм распределенного хеширования(Distributed Hash).
Преобразуйте имя изображения в хеш-значение, а затем найдите сервер Redis, взяв значение по модулю.
redis 服务器号 = hash(文件名) % 服务器台数
По расчету можно сразу перейти кReadis 1
номер сервера найденflowers.png
Адрес изображения.
если в это времяReadis 1
Сервер дает сбой, и метод получения по модулю значения Hash в настоящее время недействителен.Hash(flowers.png)%3
Он точно не равен 1. В это время все хранящиеся данные можно только пересчитать и выделить, а затем передатьHash(flowers.png)%3
Найдите соответствующий сервер.
Если вы добавите серверReadis 4
, который также пересчитывает все сохраненные данные.
Из этого можно сделать вывод, что изменение количества услуг приведет к: 1) Неверному методу расчета сервера позиционирования. 2) Все сохраненные данные необходимо пересчитать для распределения.
Используйте алгоритм консенсуса Hash для решения этой проблемы.
Алгоритм согласованности хэшей (Consistent Hasing)
Вместо нумерации сервера создайте угол (0~2π) из информации о сервере и расположите сервер на круге. Поскольку серверов меньше, несколько узлов можно виртуализировать вне сервера, чтобы сделать распределение по кругу более равномерным.RedisA
Практически из пяти узловRedisA1
,RedisA2
,RedisA3
,RedisA4
,RedisA5
оба представляютRedisA
Как показано вышеflowers.png
Рассчитайте положение маленькой черной точки, тогда вы сможете найти ее по часовой стрелке.RedisA4
.
еслиRedisA
Рулевой механизм теперьflowers.png
перейдет к следующему узлуRedisC2
, такflowers.png
Метод расчета позицииRedisA
Первый узел связан по часовой стрелке, остальные узлы остаются без изменений.
Если вы добавитеRedisE
Шерстяная ткань? а такжеRedisA
Рулевой механизм аналогичный,flowers.png
Положение узла остается неизменным, указывая на ближайший к нему узел по часовой стрелке, то есть вновь добавленный узел будет пересчитывать распределение только с первым связанным с ним узлом по часовой стрелке, а остальные узлы остаются неизменными.