Согласованное хеширование как способ масштабирования операций записи

#hash #redis #consistent-hashing

#хэш #redis #согласованное хэширование

Вопрос:

Я пытаюсь выяснить, на правильном ли я пути. Я создаю службу статистики / аналитики (в реальном времени) и использую redis для хранения некоторых наборов и хэшей.

Теперь давайте предположим, что у меня есть некоторый успех, и мне нужно масштабировать. Метод хэш-кольца выглядит неплохо, но у меня сложилось впечатление, что он подходит только для сценариев кэширования.

Что, если узел выходит из строя? Теоретически, его ключи теперь принадлежат другим узлам. На практике у них не будет данных. Оно потеряно, верно? То же самое с добавлением / удалением узлов.

Я упускаю какую-то фундаментальную вещь? Может ли это быть кластер бедняка?

Ответ №1:

Есть две причины использовать несколько узлов в кластере:

  • Сегментирование для ограничения объема данных, хранящихся на каждом узле
  • Дублирование для уменьшения нагрузки на чтение и позволяет удалять узел без потери данных.

Эти два метода принципиально отличаются, но вы можете реализовать оба — использовать согласованное хеширование для указания на набор узлов со стандартной настройкой master / slave, а не на один узел.

Если кластер является вашим основным хранилищем данных, а не кешем, вам потребуется другая стратегия перераспределения, которая включает копирование данных.

Моя реализация основана на том, что клиент выбирает одно из 64-тысячных сегментов для хэша и имеет таблицу, которая сопоставляет это сегмент с узлом. Изначально все сопоставляется узлу # 1.

Когда узел # 1 становится слишком большим, его подчиненный становится главным узлом # 2, а таблица обновляется, чтобы сопоставить половину ключей узла # 1 с узлом # 2. На этом этапе все операции чтения и записи будут работать с новым отображением, и вам просто нужно очистить ключи, которые теперь находятся не на том узле. В зависимости от требований к производительности вы можете проверить все ключи сразу или случайный выбор ключей, как это делает система истечения срока действия.

Комментарии:

1. Почти 10 лет спустя это все еще актуально. Всякий раз, когда в каком-либо хранилище данных упоминается согласованное хеширование, они должны простым языком объяснять, как перемещаются данные в случаях отключения / добавления узла.

2. Для репликации данных с согласованным хэшированием, должны ли мы использовать master slave или копировать данные в соседних узлах в кольце?