Квотирование межкластерной сетевой полосы
Некоторые операции YTsaurus читают данные с других кластеров. Например, операция RemoteCopy копирует данные с одного кластера на другой. Операции MapReduce также могут читать входные таблицы с других кластеров через атрибут cluster в YPath. Такие операции называются операциями с удалённым чтением.
Для контроля нагрузки на сетевые каналы между кластерами в YTsaurus реализован механизм квотирования межкластерной сетевой полосы на основе распределённых тротлеров (cluster throttlers). Подробнее об устройстве и настройке механизма см. в разделе Настройка квотирования межкластерной сетевой полосы руководства администратора.
Что квотируется
Квотируется сетевая полоса между кластерами YTsaurus. Квотирование затрагивает:
- Все операции RemoteCopy.
- Операции MapReduce с удалённым чтением входных таблиц.
Влияние на операции пользователей
Ограничение межкластерной полосы может замедлить выполнение операций, которые читают данные с других кластеров. Квотирование действует на двух уровнях:
- На уровне джоба — джоб не может читать данные быстрее выделенного ему лимита.
- На уровне контроллер-агента — если лимит межкластерной полосы исчерпан, новые джобы операции не запускаются до появления свободной полосы.
Как понять, что операция упирается в сетевой лимит
Если джобы операции не удаётся запланировать из-за отсутствия свободной межкластерной полосы, у операции выставляется алерт Unavailable network bandwidth to clusters.
Алерт можно посмотреть:
- В веб-интерфейсе на странице операции:

- Через CLI с помощью команды
get-operation:
yt get-operation <operation-id> --attribute alerts
Пример вывода, если операция упирается в сетевой лимит:
{
"alerts": [
{
"type": "unavailable_network_bandwidth_to_clusters",
"message": "Not enough network bandwidth to clusters"
}
]
}
Как посмотреть утилизацию межкластерного сетевого канала
Чтобы посмотреть утилизацию сетевого канала для трафика, поступающего на кластер local с кластера remote, выполните следующую команду на кластере local:
yt --proxy local list \
"//sys/discovery_servers/<discovery-server>/orchid/discovery_server/remote_cluster_throttlers_group/@members" \
--attribute local_throttlers --format json | jq '[.[] | ."$attributes"."local_throttlers"."bandwidth_remote"."rate"] | add'
Влияние на планирование
Межкластерная сетевая полоса не относится к ресурсам планировщика в контексте fair share. Однако квотирование влияет на запуск джобов: если лимит межкластерной полосы исчерпан, контроллер операции сообщает планировщику, что ему не нужны ресурсы. Это предотвращает запуск новых джобов до появления свободной полосы. Уже запущенные джобы продолжают работать с ограничением на использование межкластерной полосы.
Рекомендации по использованию
Если нужно читать с другого кластера большой объём данных (десятки терабайт и более), рекомендуется ограничить количество одновременно выполняющихся джобов операции. Это поможет избежать чрезмерной нагрузки на межкластерный сетевой канал.
Выбор значения user_slots
Если исходить из скорости чтения около 50 МБ/с на один джоб, можно начать с ограничения user_slots в 300-500 джобов. Это обеспечит скорость передачи около 15-25 ГБ/с, чего обычно достаточно для большинства сценариев.
Конкретное значение зависит от:
- Доступной межкластерной полосы пропускания
- Объёма передаваемых данных
- Требуемого времени выполнения операции
- Нагрузки на сетевой канал от других операций
Способы ограничения количества джобов
Ограничить количество джобов можно двумя способами:
- Установить ограничение
user_slotsна операцию через спецификацию операции. Параметрuser_slotsконтролирует число джобов на узле кластера — каждый джоб всегда занимает ровно одинuser_slot. Например, можно указать в спецификацииresource_limits={user_slots=200}— в этом случае у операции будет запущено не более 200 джобов одновременно в каждом дереве. Подробнее о настройке ресурсов операций см. в разделе Конфигурация вычислительных ресурсов операции. - Использовать пул с ограничением на
user_slots. Для пула можно задать ограничение на ресурсы через атрибутresource_limits, который включает в том числеuser_slots. Например, можно установить ограничение для пула командойyt set //sys/pools/.../<your_pool>/@resource_limits '{user_slots=2000}'. Подробнее о настройке пулов см. в разделе Настройка пулов.
Конфигурация
Настройка квотирования межкластерной полосы осуществляется администратором кластера. Подробнее о настройке см. в разделе Настройка квотирования межкластерной сетевой полосы руководства администратора.