Ресурсные группы в Managed Service for Trino
Ресурсные группы в Managed Service for Trino — это механизм управления нагрузкой, позволяющий:
- распределять запросы пользователей по группам;
- ограничивать потребление ресурсов кластера каждой группой;
- управлять очередями и параллелизмом внутри групп;
- задавать приоритет групп и использовать разные политики планирования запросов.
Подробнее о ресурсных группах в документации Trino
Конфигурация ресурсных групп в кластере Managed Service for Trino включает в себя:
-
Описание дерева групп — для каждой группы можно задать отдельные лимиты и параметры планирования.
-
Правила маршрутизации — определяют, как поступающие в кластер запросы распределяются по группам.
Подробнее об управлении ресурсными группами и правилами маршрутизации в Managed Service for Trino в инструкции.
Дерево групп и лимиты
Ресурсные группы организованы в виде иерархического дерева. На верхнем уровне находятся корневые группы. Если группа имеет дочерние группы, она называется родительской по отношению к ним. Группа, не имеющая дочерних групп, называется листовой.
Запросы могут принимать только листовые группы.
Для каждой группы можно задать собственные лимиты, при достижении которых новые запросы ставятся в очередь:
- лимит на объем доступной памяти;
- лимиты на процессорное время;
- лимиты на количество одновременно запущенных запросов.
Длину очереди каждой группы можно ограничить с помощью отдельного лимита. При его достижении новые запросы будут отклоняться с ошибкой.
Каждый запрос учитывается не только в группе, в которой он выполняется, но и во всех родительских. Лимиты применяются на каждом уровне дерева групп.
Имена групп
В Managed Service for Trino используются имена групп двух видов:
- Фиксированное имя, например
globalилиadmins. - Имя-шаблон, содержащее подстановки переменных, например
${USER}. При отправке запроса в такую группу создается ее экземпляр с динамически сформированным именем, если он еще не создан.
Подробнее о параметрах ресурсных групп в инструкции.
Правила маршрутизации
Правила маршрутизации — это условия, определяющие, в какую группу попадет тот или иной запрос в зависимости от его параметров.
Каждый поступивший в кластер запрос проверяется на соответствие правилам маршрутизации. Правила проверяются в порядке их объявления. Срабатывает первое правило, для которого запрос соответствует всем заданным параметрам. Запрос направляется в группу, указанную в правиле. Если запрос не соответствует ни одному правилу, он отклоняется с ошибкой.
Подробнее о параметрах правил маршрутизации в инструкции.
Планирование запросов
Между дочерними группами возникает конкуренция, если выполнены следующие условия:
- В очереди двух и более дочерних групп есть готовые к запуску запросы.
- Лимиты этих дочерних групп еще не достигнуты.
- Лимит родительской группы не позволяет запустить запросы всех дочерних групп одновременно.
Чтобы распределить права запуска запросов между дочерними группами, назначьте родительской группе одну из политик планирования:
-
fair— дочерние группы поочередно получают право запуска запросов. Получив право запуска, группа выбирает из очереди запрос, поступивший первым (FIFO). -
weighted_fair— для каждой дочерней группы рассчитываются:- Текущий уровень параллелизма — отношение числа ее запущенных запросов к общему числу запущенных запросов всех дочерних групп.
- Ожидаемый уровень параллелизма — отношение ее веса (
schedulingWeight) к сумме весов всех дочерних групп.
Право запуска получает группа с наибольшим отставанием от ожидаемого уровня. Получив право запуска, группа выбирает из очереди запрос, поступивший первым (FIFO).
-
weighted— каждая дочерняя группа получает право запуска запросов с вероятностью, пропорциональной ее весу (schedulingWeight). Получив право запуска, группа выбирает запрос из очереди. Вероятность выбора запроса пропорциональна его приоритету (свойство сессииquery_priority). -
query_priority— очереди дочерних групп рассматриваются как единая очередь, запросы из которой запускаются в порядке их приоритета (свойство сессииquery_priority). Для всех дочерних групп, кроме листовых, должна быть также выбрана политика планированияquery_priority.
Политика планирования, заданная для группы, действует только на ближайшие к ней дочерние группы. Если они не являются листовыми, для них можно задать собственные политики планирования, которые будут действовать уже для их дочерних групп. Так право запуска запроса каскадно передается по уровням дерева до листовой группы, которая запускает запрос.