tg-me.com/system_design_world/297
Last Update:
🔘 Consistent Hashing
Интервьюер: "Зачем?"
Кандидат: "Позволяет меньше перераспределять данные. И точка."
Интервьюер: "Садитесь, зачёт"
» Пример »
У нас их 99. В один инстанц БД влезает 33 🤷
Нам нужно сформировать запрос с user_id = 5. Получить информацию об этом пользователе. На какой сервер идти?
Делаем 3 сервера(горизонтальное масштабирование впритык). Записываем на листочке какой сервер какой диапазон значений обслуживает:
Сервер 1: 1 -> 33
Сервер 2: 34 -> 66
Сервер 3: 67 -> 99
Теперь когда придёт запрос с user_id посмотрю на листок и пошлю на Сервер 1.
Которая перенаправляет запросы на целевые сервера😊
В соответствие с этой табличкой, которую мне дал программист.
Что далее?
С различным распределением ключей. И что consistent hashing - это ещё и представление таблички в форме круга. Где каждый сервер обслуживает значения начиная от него и далее против часовой стрелки пока не упрёмся в точку с другим сервером.
В этом смысле:
Сам сервер 1 имеет свою точку - 33. И обслуживает значения от 1 до 33
Сервер 2 - точка 66. Обслуживает от 34 до 66.
Сервер 3 - точка 99. Обслуживает от 67 до 99.
+Есть переход с 99 -> 1.
Когда сервер 2 выходит из строя я - чудо перенаправляющая программа - вычеркиваю его из этого круга. И понимаю, что конфигурация стала:
Сервер 1: 1 -> 33
Сервер 3: 34 -> 99
А где-то под капотом ещё одна чудо программа. Которая перелила данные(с бэкапа, к примеру) с сервера 2 на сервер 3 :)
В чём нюанс? 😏