Я хотел бы знать, как лучше всего избежать перекоса рабочей нагрузки при распределении данных между несколькими узлами.
Проблема:
У нас есть данные значения ключа.Мы разделяем эти данные по хешу ключа и таким образом распределяем его по нескольким узлам.Если хеш-функция дает вам одинаково распределенные хеш-коды, то мы обычно получим равное распределение запросов по нашим узлам. Исключение: Если имеется «горячая клавиша» и к ней обращаются многие запросы.
Когда это могло произойти?
Примерэто было бы, если у вас есть сохранить данные из социальной сети.У некоторых пользователей могут быть миллионы подписчиков, а у некоторых - нет.Это искажает нагрузку.
Мой подход будет следующим:
Если есть горячая клавиша, добавьте случайное целое число (в диапазоне, например, 1-100) к клавише,Теперь вы распределите нагрузку на большее количество узлов. Недостаток: Если вы хотите прочитать, вам также нужно будет проверить все возможные комбинации ключа и всех целых чисел в указанном диапазоне.Этот подход может распределить нагрузку более равномерно, но замедляет чтение.
Есть ли лучший подход? Идеально равномерное распределение нагрузки, но не замедление, - это очень много читает.