Клиентский протокол#

Клиентский протокол Trino — это протокол на основе HTTP, который позволяет клиентам отправлять SQL-запросы и получать результаты.

Протокол представляет собой последовательность вызовов REST API к координатору кластера Trino. Общая схема выглядит так:

  1. Клиент отправляет текст SQL-запроса координатору кластера Trino.

  2. Координатор начинает обработку запроса.

  3. Координатор возвращает набор результатов и URI nextUri на координаторе.

  4. Клиент получает набор результатов и инициирует следующий запрос за дополнительными данными по URI nextUri.

  5. Координатор продолжает обработку запроса и возвращает следующие данные с новым URI.

  6. Клиент и координатор продолжают шаги 4 и 5, пока все данные набора результатов не будут возвращены клиенту или пока клиент не прекратит запрашивать дополнительные данные.

  7. Если клиент не получает набор результатов, координатор не запускает дальнейшую обработку, завершает запрос ошибкой и возвращает ошибку USER_CANCELED.

  8. Финальный ответ после завершения запроса — FINISHED.

Клиентский протокол поддерживает два режима. Для оптимальной пропускной способности клиентов настройте протокол спулинга.

Протокол спулинга#

Протокол спулинга использует расположение в объектном хранилище для хранения данных, которые затем получает клиент. Координатор и все рабочие узлы могут параллельно записывать данные набора результатов в хранилище. Координатор предоставляет кластеру только URL всех отдельных сегментов данных в объектном хранилище. Протокол спулинга также позволяет сжимать данные.

Данные в объектном хранилище автоматически удаляются после скачивания клиентом.

По сравнению с прямым протоколом протокол спулинга имеет следующие характеристики:

  • Обеспечивает более высокую пропускную способность передачи данных, особенно для запросов, возвращающих больше данных.

  • Позволяет быстрее завершать обработку запроса в кластере независимо от того, получил ли клиент все данные, поскольку данные читаются из объектного хранилища.

  • Требует объектного хранилища и конфигурации в кластере Trino.

  • Снижает нагрузку CPU и I/O на координатор.

  • Автоматически откатывается к прямому протоколу для запросов, которые не получают пользы от использования протокола спулинга.

  • Требует более новых клиентских драйверов или клиентских приложений, которые поддерживают протокол спулинга и активно запрашивают его использование.

  • Клиенты должны иметь доступ к объектному хранилищу.

  • Работает со старыми клиентскими драйверами и клиентскими приложениями, автоматически откатываясь к прямому протоколу, если протокол спулинга не поддерживается.

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

Для настройки поддержки протокола спулинга в кластере Trino необходимы следующие шаги:

  • Настройте использование протокола спулинга в Config properties с помощью Spooling protocol properties.

  • Выберите подходящее объектное хранилище, доступное вашему кластеру Trino и вашим клиентам.

  • Создайте расположение в объектном хранилище, которое не используется совместно ни с каким каталогом объектного хранилища и ни со спулингом других кластеров Trino.

  • Настройте объектное хранилище в etc/spooling-manager.properties с помощью Spooling file system properties.

Минимальная конфигурация в Config properties:

protocol.spooling.enabled=true
protocol.spooling.shared-secret-key=jxTKysfCBuMZtFqUf8UJDQ1w9ez8rynEJsJqgJf66u0=

Note

Свойство protocol.spooling.shared-secret-key требует 256-битный секретный ключ в кодировке base64.

Дополнительную необязательную конфигурацию см. в Spooling protocol properties.

Подходящие системы объектного хранилища для спулинга — S3 и совместимые системы, Azure Storage и Google Cloud Storage. Система объектного хранилища должна обеспечивать хорошее подключение для всех узлов кластера, а также для всех клиентов.

Включите нужную систему с помощью fs.s3.enabled, fs.azure.enabled или fs.gcs.enabled в etc/spooling-manager.properties и настройте дополнительные параметры с помощью соответствующих свойств из Spooling file system properties, S3 file system support, Azure Storage file system support и Google Cloud Storage file system support.

Свойство spooling-manager.name должно быть установлено в filesystem.

Ниже приведен минималистичный пример использования S3-совместимого объектного хранилища MinIO:

spooling-manager.name=filesystem
fs.s3.enabled=true
fs.location=s3://spooling
s3.endpoint=http://minio:9080/
s3.region=fake-value
s3.aws-access-key=minio-access-key
s3.aws-secret-key=minio-secret-key
s3.path-style-access=true

Дополнительные свойства конфигурации см. в Spooling file system properties.

Система предполагает, что объектное хранилище не ограничено по объему данных и объему передачи данных. Спулированные сегменты в объектном хранилище автоматически удаляются клиентами после чтения, а также координатором через заданные интервалы. Требования к размеру и передаче зависят от нагрузки запросов в вашем кластере.

Сегменты в объектном хранилище шифруются, сжимаются и могут использоваться только конкретным клиентом, который инициировал запрос.

Следующие клиентские драйверы и клиентские приложения поддерживают протокол спулинга:

Актуальные сведения см. в документации конкретных клиентских драйверов и клиентских приложений.

Прямой протокол#

Прямой протокол передает все данные от рабочих узлов координатору, а оттуда напрямую клиенту.

Прямой протокол, также известный как протокол v1, имеет следующие характеристики по сравнению с протоколом спулинга:

  • Обеспечивает более низкую производительность, особенно для запросов, возвращающих больше данных.

  • Приводит к более медленному завершению обработки запроса в кластере, поскольку данные предоставляются координатором и читаются клиентом последовательно.

  • Не требует объектного хранилища или конфигурации в кластере Trino.

  • Увеличивает нагрузку CPU и I/O на координатор.

  • Работает со старыми клиентскими драйверами и клиентскими приложениями без поддержки протокола спулинга.

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

Использование прямого протокола не требует настройки. Необязательные свойства конфигурации см. в Shared protocol properties.

Сведения для разработки и справочная информация#

Дополнительные технические сведения о клиентском протоколе, включая информацию, полезную для разработки клиентского драйвера, доступны в справочнике разработчика Trino client REST API.