ydb-platform/nbs

[NBS] Recording to the other replicas of mirror-3 volumes from the first one

Opened this issue · 1 comments

Сейчас запись во все реплики mirror-3 дисков производится из таблетки диска производится параллельно. Что приводи к необходимости утроения исходящего траффика. Можно сделать по-другому, когда клиент будет писать только в одну реплику, а из этой реплики запись будет отправляться в оставшиеся две реплики. И на каждый новый запрос нужно выбирать следующую реплику (как это делается для чтений). Тем самым нагрузка будет распределяться равномернее, не будет происходить перегрузки сети на хосте даже при больших лимитах. Минусом такого подхода будут выросшие задержки на запись. Ожидаем что они не должны вырасти сильно. Кроме того, для мелких запросов можно использовать текущий способ.
Задачу предполагается разбить на две части:

  1. Научить DiskAgent дуплицировать запись, пришедшую к нему, на другие агенты и отвечать успехом после того как все агенты ответят ОК. Сделать это для interconnect и RDMA транспортов.
  2. Научить NBS отправлять запись на в одну реплику, с указанием остальных агентов и девайсов, куда нужно реплицировать запись. Фичу сделать включаемой для облаков/фолдеров и точечно через UI для конкретного диска.

Задача полезна еще тем, что после того как DiskAgent научится писать напрямую в другой агент, это можно будет использовать для миграции pier-to-pier, когда таблетка диска не будет прогонять через себя данные, а будет только командовать DiskAgent'у какой блок куда записать.

Сейчас диски m3, которые могут выжрать всю сеть на хосте >1Tb.
Однако пока они сеть не используют на полную им не надо ничего менять т.к. это увеличит латенси.
А вот когда нагрузка на диск ~1Gb/s, то тут уже стоит переключаться на другую схему