Получить доступ

Какую задачу решает consistent hashing по сравнению с обычным hash(key) % N?

MiddleМасштабирование
Ещё спрашивают так:
  • Почему hash % N плох при добавлении сервера?
Коротко

При hash % N смена N переносит почти все ключи; на кольце consistent hashing переезжает только ~1/N — ключи с дуги нового или ушедшего узла.

  • Для кэша % N = массовый промах и удар по базе; для хранилища — перенос почти всех данных
  • Ключ принадлежит первому узлу по часовой стрелке
  • Виртуальные узлы выравнивают нагрузку и раздают ключи упавшего узла всем

А ещё Альтернативы: фиксированные слоты (Redis Cluster), rendezvous и jump hash

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Попробуйте сами

Consistent hashing и виртуальные узлы

Подробно

При взятии остатка изменение числа узлов меняет знаменатель, и почти все ключи меняют владельца — для кэша это означает массовый промах и удар по базе, для хранилища — переливку почти всех данных. На кольце ключ принадлежит ближайшему по часовой стрелке узлу, поэтому уход или приход узла затрагивает лишь его соседний участок. Важное дополнение, которое отличает полный ответ: базовая схема распределяет нагрузку неравномерно, потому что случайные позиции узлов делят кольцо неодинаково, — поэтому каждый физический узел размещают на кольце многократно в виде виртуальных узлов, что и выравнивает распределение и заодно сглаживает перераспределение при отказе.

Что хотят услышать

  • Почему % N перетасовывает ключи и оценка доли переезда.
  • Устройство кольца и правило «первый по часовой».
  • Неравномерность без виртуальных узлов и их роль.

Частые ошибки

  • Забывать про виртуальные узлы и считать распределение равномерным само по себе.
  • Применять взятие остатка в распределённом кэше с меняющимся числом узлов.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓При добавлении или удалении узла переезжает лишь малая доля ключей, а не почти все — узлы и ключи размещаются на кольце
  • ✗Оно гарантирует идеально равномерное распределение без дополнительных приёмов
  • ✗Оно ускоряет вычисление самой хеш-функции
  • ✗Оно позволяет обойтись без репликации данных

Что спросят дальше

  • Зачем нужны виртуальные узлы?
  • Что произойдёт с кэшем при перезапуске узла без consistent hashing?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем