Всплески задержек репликации при перебалансировке шардов #5
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Проблема
ReshardingManager в raft_coordinator.go выполняет перераспределение шардов при изменении состава кластера. Репликация данных во время перешардирования использует тот же механизм, что и обычная репликация (NetworkReplicator), что приводит к ряду проблем, связанных с деградацией производительности.
Возникает амплификация записи, поскольку данные миграции конкурируют с операциями обычной рабочей нагрузки. Задержки на хвосте распределения (p95/p99) значительно возрастают в периоды миграции. Сетевые и дисковые ресурсы перегружаются, так как трафик миграции и производственный трафик используют одну и ту же инфраструктуру. В крупных кластерах с миллионами документов это может приводить к падению QPS до 40% и росту задержек с 50 мс до более чем 350 мс.
Архитектурная проблема
Как минимизировать влияние перебалансировки шардов на производственные операции в распределённой системе баз данных?
Пример сценария
Рассмотрим кластер из 3 узлов, в который добавляется 4-й узел. ReshardingManager инициирует перераспределение 1 миллиона документов. В процессе миграции наблюдаются следующие симптомы:
Основная причина — отсутствие приоритизации трафика: трафик миграции обрабатывается с тем же приоритетом, что и пользовательские запросы, что вызывает конкуренцию за ресурсы и влияет на все операции.
Предлагаемые направления исследований
Соответствующие файлы с исходным кодом
internal/cluster/raft_coordinator.go(ReshardingManager, строки 2100–2400)internal/cluster/network_replicator.go(NetworkReplicator, строки 100–300)internal/cluster/raft_coordinator.go(ReshardingMetrics)