Квотирование межкластерной сетевой полосы

Некоторые операции YTsaurus читают данные с других кластеров. Например, операция RemoteCopy копирует данные с одного кластера на другой. Операции MapReduce также могут читать входные таблицы с других кластеров через атрибут cluster в YPath. Такие операции называются операциями с удалённым чтением.

Для контроля нагрузки на сетевые каналы между кластерами в YTsaurus реализован механизм квотирования межкластерной сетевой полосы на основе распределённых тротлеров (cluster throttlers). Подробнее об устройстве и настройке механизма см. в разделе Настройка квотирования межкластерной сетевой полосы руководства администратора.

Что квотируется

Квотируется сетевая полоса между кластерами YTsaurus. Квотирование затрагивает:

  • Все операции RemoteCopy.
  • Операции MapReduce с удалённым чтением входных таблиц.

Влияние на операции пользователей

Ограничение межкластерной полосы может замедлить выполнение операций, которые читают данные с других кластеров. Квотирование действует на двух уровнях:

  1. На уровне джоба — джоб не может читать данные быстрее выделенного ему лимита.
  2. На уровне контроллер-агента — если лимит межкластерной полосы исчерпан, новые джобы операции не запускаются до появления свободной полосы.

Как понять, что операция упирается в сетевой лимит

Если джобы операции не удаётся запланировать из-за отсутствия свободной межкластерной полосы, у операции выставляется алерт Unavailable network bandwidth to clusters.

Алерт можно посмотреть:

  • В веб-интерфейсе на странице операции:
    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}'. Подробнее о настройке пулов см. в разделе Настройка пулов.

Конфигурация

Настройка квотирования межкластерной полосы осуществляется администратором кластера. Подробнее о настройке см. в разделе Настройка квотирования межкластерной сетевой полосы руководства администратора.

Предыдущая
Следующая