План
Что такое шардирование
Деление на части
Shard - осколок, фрагмент
Происхождение термина шард, 1997, Ultima Online
Шардирование в БД
Шардирование в RabbitMQ
Ключ шардирования
Признак по которому объект сопоставляется с шардом
Функция шардирования
f(key, shardsNumber) => shardIndex
Функции шардирования
Функции шардирования
Чистые функции
Функции с состоянием
Чистые функции шардирования
Остаток от деления или modular hash
shardIndex = key % shardsNumber
При смене количества шардов, меняются все значения.
Чистые функции шардирования
Consistent hash или стабильное хеширование
Чистые функции шардирования
Consistent hash или стабильное хеширование
Чистые функции шардирования
Consistent hash или стабильное хеширование
Чистые функции шардирования
Consistent hash или стабильное хеширование
Чистые функции шардирования
Consistent hash или стабильное хеширование
Чистые функции шардирования
Consistent hash или стабильное хеширование
Что будет, если добавить шрад?
Чистые функции шардирования
Consistent hash или стабильное хеширование
Что будет, если добавить шрад?
Значение функции шардирования меняется только для части ключей
Чистые функции шардирования
Consistent hash или стабильное хеширование
Расположение нод случайно, поэтому требует балансировки.
Чистые функции шардирования
Consistent hash или стабильное хеширование
Расположение нод случайно, поэтому требует балансировки
Равномерность достигается увеличением числа нод (алиасами)
Чистые функции шардирования
Rendezvous Hash�или Highest Random Weight
Чистые функции шардирования
Rendezvous Hash�или Highest Random Weight
HRW как алгоритм вычисления rendezvous points в мультикаст маршрутизации
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Минимальное перераспределение
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Минимальное перераспределение
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Минимальное перераспределение
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Минимальное перераспределение
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Минимальное перераспределение
Чистые функции шардирования
Rendezvous hash�или Highest Random Weight
Функции шардирования с состоянием
Таблицы маппинга hashKey => shard
Функции шардирования с состоянием
Hash slot в Redis:
Функции шардирования с состоянием
Какую проблему решает шардирование очередей
Ускорение разбора очереди…
...c сохранением локального порядка
Пример приложения в котором шардирование нужно и возможно
Сервис рассылки писем
subscribe a@example.com |
subscribe b@example.com |
email to a@example.com |
email to b@example.com |
unsubscribe b@example.com |
subscribe a@example.com |
email to a@example.com |
subscribe b@example.com |
email to b@example.com |
unsubscribe b@example.com |
Варианты реализации
Ручное шардирование через direct или topic exchange
Ручное шардирование через direct или topic exchange
Ручное шардирование через direct или topic exchange
Ручное шардирование через direct или topic exchange
дает представление о идеальном варианте:
Специальные механизмы RabbitMQ
RabbitMQ Sharding Plugin
RabbitMQ Sharding Plugin
RabbitMQ Sharding Plugin
RabbitMQ Sharding Plugin
Не подходит для целей шардирования с сохранением порядка
Consistent Hash Exchange
Consistent Hash Exchange
Consistent Hash Exchange
Consistent Hash Exchange
Почему этого недостаточно
Добавление шарда ведет к нарушению порядка
Решардинг - повторное распределение по шардам
В БД повторное распределение - очень дорогая операция
Перемещение минимизируют стабильным хешированием
В случае кролика нам не достаточно минимизации - локальный порядок должен сохраниться полностью
В кролике нет проблем с объемами
Добавление шарда
Добавление шарда
Добавление шарда
Добавление шарда
?
?
?
Топология, пригодная для решардинга
Топология, пригодная для решардинга
Топология, пригодная для решардинга
Топология, пригодная для решардинга
Механизм миграции
Предварительные условия
Топология в запущенном приложении
Деплой
Деплой
Деплой
Деплой
Деплой
Деплой
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Миграция
Вот теперь достаточно
Возможности топологии
Итоги