Повышение устойчивости обработки запросов#

Вы можете настроить Trino для большей устойчивости к сбоям во время обработки запросов, включив отказоустойчивое выполнение (fault-tolerant execution). Это позволяет Trino обрабатывать более крупные запросы, такие как batch-операции, без сбоев выполнения при отказах worker-узлов.

При включённой настройке кластер Trino буферизует данные, используемые worker-узлами во время обработки запросов. Если выполнение на одном из worker-узлов завершается с ошибкой по любой причине — например, из-за сетевого сбоя или нехватки ресурсов — координатор переназначает обработку сбойного фрагмента работы другому worker-узлу. Это позволяет продолжить обработку запроса, используя буферизованные данные.

Архитектура#

Координатор использует настроенный сервис exchange manager, который буферизует данные во время выполнения запроса во внешнем хранилище, например в объектном хранилище S3. Worker-узлы отправляют данные в этот буфер по мере выполнения своих задач.

Лучшие практики и особенности#

Отказоустойчивый кластер лучше всего подходит для выполнения крупных batch-запросов. Пользователи могут столкнуться с задержками или похожим поведением, если выполнять большое количество коротких запросов в таком кластере. Поэтому рекомендуется использовать отдельный отказоустойчивый кластер для batch-операций, отдельно от кластера, предназначенного для обработки большого количества запросов.

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

Каталоги, использующие другие connectors, поддерживают только отказоустойчивое выполнение операций чтения. При включении fault-tolerant execution в кластере операции записи будут завершаться ошибкой для всех каталогов, которые не поддерживают отказоустойчивое выполнение таких операций.

Exchange manager может отправлять большой объём данных в хранилище exchange, что приводит к высокой нагрузке на I/O этого хранилища. Вы можете настроить несколько мест хранения для использования exchange manager, чтобы распределить нагрузку I/O между ними.

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

Следующие шаги описывают, как настроить кластер Trino для отказоустойчивого выполнения с использованием exchange на базе S3:

  1. Настройте S3-бакет для использования в качестве хранилища exchange. В этом примере используется AWS S3, однако другие варианты хранилищ также описаны в reference documentation. Вы можете использовать несколько S3-бакетов для хранения exchange-данных.

    Для каждого бакета в AWS соберите следующую информацию:

    • S3 URI бакета, например s3://exchange-spooling-bucket

    • Регион, в котором расположен бакет, например us-west-1

    • AWS access key и secret key для доступа к бакету

  2. Для развёртывания Trino в Kubernetes добавьте следующую конфигурацию exchange manager в разделы server.exchangeManager и additionalExchangeManagerProperties Helm chart, используя собранную информацию о S3-бакете:

    server:
      exchangeManager:
        name=filesystem
        base-directories=s3://exchange-spooling-bucket-1,s3://exchange-spooling-bucket-2
    
    additionalExchangeManagerProperties:
      exchange.s3.region=us-west-1
      exchange.s3.aws-access-key=example-access-key
      exchange.s3.aws-secret-key=example-secret-key
    

    В установках вне Kubernetes те же параметры должны быть определены в конфигурационном файле exchange-manager.properties на координаторе и на всех worker-узлах.

  3. Добавьте следующую конфигурацию для отказоустойчивого выполнения в раздел additionalConfigProperties: Helm chart:

    additionalConfigProperties:
      retry-policy=TASK
    

    В установках вне Kubernetes то же свойство должно быть задано в файле config.properties на координаторе и на всех worker-узлах.

  4. Повторно разверните ваш экземпляр Trino или, для установок вне Kubernetes, перезапустите кластер.

Теперь ваш кластер Trino настроен для отказоустойчивого выполнения запросов. Если ранее выполнение запроса могло завершиться с ошибкой из-за прерывания обработки, теперь fault-tolerant execution возобновляет обработку, обеспечивая успешное завершение запроса.

Следующие шаги#

Для получения дополнительной информации об отказоустойчивом выполнении, включая простые повторные попытки выполнения запросов без необходимости использования exchange manager, а также расширенные настройки, см. reference documentation.