Перейти к содержимому

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 #распределенныесистемы