Взаимосвязь ресурсов в Yandex Managed Service for Trino
Trino — это высокопроизводительная распределенная массивно-параллельная система обработки запросов. Trino позволяет выполнять запросы к различным хранилищам данных и работать с данными в разных форматах при помощи стандартного SQL-синтаксиса.
В Trino реализовано разделение storage- и compute-слоев. Trino работает только с запросами и результатами их выполнения. Все операции с данными делегируются внешнему хранилищу данных, к которому направлен запрос, поэтому для выполнения запроса данные из хранилища не нужно загружать в Trino. Такой подход ускоряет обработку запросов и в сочетании с массивно-параллельной архитектурой облегчает масштабирование кластера Managed Service for Trino под различные задачи.
Архитектура кластера
Основная сущность, которой оперирует сервис Managed Service for Trino — кластер.
Кластер Trino состоит из координатора и воркеров.
Координатор
Координатор — это основной узел обработки данных. Он принимает запросы от пользователей, планирует выполнение запросов, управляет распределением заданий между воркерами и обрабатывает результаты выполнения заданий, полученные от воркеров.
На сервере координатора запущена служба обнаружения, которая отслеживает доступность воркеров. Если воркер становится недоступен, координатор не назначает на него новые задания.
В кластере Trino всегда только один координатор.
Воркеры
Воркеры — это рабочие узлы. Они обрабатывают запросы от координатора, выполняют операции с данными и возвращают полученные результаты координатору. При запуске воркер регистрирует себя в службе обнаружения, запущенной на сервере координатора. Таким образом воркер становится доступен для назначения заданий. Периодически воркер отправляет в службу обнаружения сигнал о доступности. Если служба обнаружения не получает такой сигнал в установленное время, на воркер не назначаются новые задания.
При создании кластера вы можете задать фиксированное количество воркеров от 1 до 64 или настроить автоматическое изменение количества воркеров в диапазоне от 0 до 64 в зависимости от нагрузки.
Каталог
Координатор и воркеры могут обращаться к источникам данных через каталоги.
Каталог — это набор параметров, которые описывают подключение к источнику данных. В кластере Managed Service for Trino можно создать один или несколько каталогов. При этом Trino поддерживает работу с данными из разных каталогов в одном запросе.
Каждый каталог описывает только один источник данных. Тип источника данных определяется выбранным коннектором.
Коннектор
Коннектор — это интерфейс для доступа к источнику данных определенного типа. Коннектор представляет данные из источника в виде абстрактной таблицы, к которой воркеры выполняют запросы. Эта таблица позволяет работать одинаково со всеми источниками данных, вне зависимости от их специфических требований.
В Managed Service for Trino доступны следующие коннекторы:
- ClickHouse
- Delta Lake
- Hive
- Iceberg
- Oracle
- PostgreSQL
- TPC-DS
- TPC-H
Выполнение запроса в кластере Trino
Пользователь взаимодействует с кластером Trino через клиент, например Trino CLI. Клиент передает запросы координатору и отображает результаты их выполнения.
Выполнение запроса в кластере Trino происходит по следующей схеме:
-
Координатор получает от клиента запрос в виде SQL-выражения.
-
Координатор планирует стадии выполнения запроса и преобразует его в серию связанных заданий, которые распределяются между воркерами.
-
Воркеры выполняют запросы к источникам данных, обрабатывают полученную информацию, обмениваются результатами выполнения промежуточных заданий, после чего результаты выполнения всех заданий отправляются в координатор.
-
Координатор собирает результаты заданий от воркеров, формирует финальный результат и передает его клиенту, который отображает результат выполнения запроса для пользователя.
Воркеры взаимодействуют друг с другом и с координатором через REST API. Помимо этого, воркеры могут обмениваться промежуточными данными через Exchange Manager, который выполняет роль хранилища временных данных. Таким образом, если воркер выйдет из строя, выполнявшийся на нем процесс может быть выполнен на другом воркере с использованием промежуточных данных из Exchange Manager.