Consistent Hashing на GO: с нуля до продакшена
Матвей Попов
0:00 / 0:00
Consistent Hashing на GO: с нуля до продакшена
1 017 просмотров · 13 часов назад
Матвей Попов
2,53 тыс. подписчиков
1 017 просмотров · 13 часов назад
Кольцо хэшей определяет, где должны лежать данные. Кто их туда перенесёт и что в это время будет происходить с запросами? Что на самом деле решает Consistent Hashing?
В этом видео разбираем шардирование на примере сервиса кошельков на Go. Пройдём от простого распределения по остатку до кольца хэшей и виртуальных нод. Запустим нагрузку, посмотрим на метрики в Grafana и реализуем перенос данных между нодами во время работы сервиса.
В этом видео:
— Почему hash(key) % N ломает распределение при изменении количества нод
— Как устроены кольцо хэшей, поиск владельца ключа и виртуальные ноды
— Зачем нужны роутеры и как они узнают о топологии кластера
— Как количество виртуальных нод влияет на распределение нагрузки и чего это стоит
— Почему горячие ключи остаются проблемой даже при равномерном распределении данных
— Как перенести данные под нагрузкой: подготовка роутеров, ожидание записей, миграция, commit и очистка старых копий
— За чем нужно следить помимо самого алгоритма: состояние кластера, версии топологии и корректность данных
Код, сценарии экспериментов и настройки нагрузки можно запустить у себя:
https://github.com/Ferum-bot/consiste...
━━━ Материалы по теме ━━━
Cassandra: выбор числа виртуальных нод и компромиссы
https://cassandra.apache.org/doc/3.11...
Cassandra 4.0: снижение num_tokens с 256 до 16
https://github.com/apache/cassandra/b...
Envoy: кольцо хэшей и настройка его размера
https://www.envoyproxy.io/docs/envoy/...
NGINX: балансировка с hash consistent
https://nginx.org/en/docs/http/ngx_ht...
Redis Cluster: фиксированные слоты и перенос данных между нодами
https://redis.io/docs/latest
00:00 Вступление
01:20 Теория: шардирование и Consistent Hashing
05:39 Разбор проекта и сервиса кошельков
12:03 Запуск стенда, Grafana и нагрузка
20:13 Шардирование и сервис маршрутизации
22:17 Топология кластера и распределение запросов
28:53 Добавление ноды: проблемы простого хеширования
31:46 Реализация кольца хэшей
36:45 Виртуальные ноды и распределение нагрузки
44:56 Горячие ключи и подготовка к миграции
47:30 Перенос данных под нагрузкой
━━━━━━━━━━━━
#golang #systemdesign #highload #consistenthashing #распределенныесистемы