Поделиться через


Настройка конфигураций подключения для пакета SDK Java для Azure Cosmos DB версии 4

Это важно

Советы по повышению производительности в этой статье предназначены исключительно для пакета SDK для Java версии 4 в Azure Cosmos DB. Для получения дополнительной информации см. Release notes пакета Java SDK для Azure Cosmos DB версии 4, Maven Repository и руководство по устранению неполадок пакета Java SDK для Azure Cosmos DB версии 4. Если вы используете более раннюю версию версии 4, ознакомьтесь с руководством по переходу на пакет SDK Java для Azure Cosmos DB версии 4 , чтобы помочь при обновлении до версии 4.

Azure Cosmos DB — быстрая и гибкая распределенная база данных, которая легко масштабируется с гарантированной задержкой и пропускной способностью. Для масштабирования базы данных с помощью Azure Cosmos DB не нужно вносить в архитектуру существенные изменения или писать сложный код. Для увеличения или уменьшения масштаба достаточно вызвать один метод интерфейса API или пакета SDK. Тем не менее, так как доступ к Azure Cosmos DB осуществляется через сетевые вызовы, существуют конфигурации подключений, которые можно настроить для достижения пиковой производительности при использовании пакета SDK Java для Azure Cosmos DB версии 4.

Конфигурация подключения

Замечание

В пакете SDK Java для Azure Cosmos DB версии 4 режим Direct лучше всего подходит для повышения производительности базы данных с большинством рабочих нагрузок.

Дополнительные сведения о различных вариантах подключения см. в статье Режимы подключения.

Режим прямого подключения

Режим подключения пакета SDK для Java по умолчанию является прямым. Прямой режим запросов Azure Cosmos DB выполняется по протоколу TCP при использовании пакета SDK Java для Azure Cosmos DB версии 4. Внутренний режим Direct использует специальную архитектуру для динамического управления сетевыми ресурсами и получения оптимальной производительности. Архитектура на стороне клиента, которая используется в режиме Direct, обеспечивает прогнозируемое использование сети и мультиплексируемый доступ к репликам Azure Cosmos DB. Дополнительные сведения об архитектуре см. в архитектуре подключения к прямому режиму

Режим подключения можно настроить в построителе клиентов с помощью метода directMode(), как показано здесь. Чтобы настроить прямой режим с параметрами по умолчанию, вызов directMode() метода без аргументов. Чтобы настроить параметры подключения к прямому режиму, передайте DirectConnectionConfig в directMode() API.

Асинхронный API Java SDK версии 4 (Maven com.azure::azure-cosmos)


/* Direct mode, default settings */
CosmosAsyncClient clientDirectDefault = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .directMode()
        .buildAsyncClient();

/* Direct mode, custom settings */
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
directConnectionConfig.setMaxConnectionsPerEndpoint(130);
directConnectionConfig.setIdleConnectionTimeout(Duration.ZERO);

CosmosAsyncClient clientDirectCustom = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .directMode(directConnectionConfig)
        .buildAsyncClient();

/* Gateway mode, default settings */
CosmosAsyncClient clientGatewayDefault = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .gatewayMode()
        .buildAsyncClient();

/* Gateway mode, custom settings */
GatewayConnectionConfig gatewayConnectionConfig = GatewayConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, InetSocketAddress.createUnresolved("your.proxy.addr",80)));
gatewayConnectionConfig.setMaxConnectionPoolSize(1000);

CosmosAsyncClient clientGatewayCustom = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .gatewayMode(gatewayConnectionConfig)
        .buildAsyncClient();

/* No connection mode, defaults to Direct mode with default settings */
CosmosAsyncClient clientDefault = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .buildAsyncClient();

Настройка режима прямого подключения

Если требуется нестандартное поведение режима Direct, создайте экземпляр DirectConnectionConfig, настройте его свойства, а затем передайте настроенный экземпляр в метод directMode() в построителе клиента Azure Cosmos DB.

Эти параметры конфигурации управляют поведением базовой архитектуры режима Direct, рассмотренной ранее.

В качестве первого шага используйте следующие рекомендуемые параметры конфигурации. Эти параметры DirectConnectionConfig — это дополнительные параметры конфигурации, которые могут повлиять на производительность пакета SDK непредвиденными способами; Мы рекомендуем пользователям избегать их изменения, если они не чувствуют себя комфортно в понимании компромиссов и это необходимо. Обратитесь к группе Azure Cosmos DB , если у вас возникли проблемы с этой конкретной темой.

Параметр конфигурации По умолчанию Recommended Сведения
idleConnectionTimeout PT0 (НОЛЬ) "PT0" (НОЛЬ) Это представляет время простоя простого подключения к конечной точке или бекенд-узлу (реплика). По умолчанию пакет SDK не закрывает неактивные подключения к узлам серверной части.
idleEndpointTimeout "PT1H" "PT1H" Это представляет длительность тайм-аута подключения в режиме ожидания для пула подключений для конечной точки/внутреннего узла (представляющего реплику). По умолчанию при отсутствии входящих запросов к определенной конечной точке/бэкенд узлу SDK закроет все подключения в пуле подключений к этой конечной точке/бэкенд узлу спустя 1 час, чтобы сэкономить сетевые ресурсы и затраты на ввод-вывод. Для разреженного или временного трафика рекомендуется задать это значение на более высокое число, например 6 часов, 12 часов или даже 24 часа, чтобы SDK не приходилось часто открывать подключения. Однако это требует сетевых ресурсов и будет иметь более высокое количество подключений, которые остаются открытыми в каждый момент времени. Если это значение равно НУЛю, проверка конечной точки простоя отключена.
maxConnectionsPerEndpoint "130" "130" Это представляет верхний размер пула подключений для конечной точки или внутреннего узла (представляющего реплику). Пакет SDK создает подключения к конечной точке или внутреннему узлу по запросу и на основе входящих одновременных запросов. По умолчанию пакет SDK создает не более 130 подключений к конечной точке или внутреннему узлу. (ПРИМЕЧАНИЕ. Пакет SDK не создает эти 130 подключений заранее).
Параметр maxRequestsPerConnection (максимальное количество запросов на соединение) "30" 30 Это представляет максимальный размер максимального числа запросов, которые могут быть помещены в очередь в одном соединении для определенной конечной точки или внутреннего узла (представляющего реплику). SDK агрегирует запросы к одному подключению на конечной точке или внутреннему узлу по мере необходимости и на основе входящих одновременных запросов. По умолчанию, если это необходимо, SDK ставит в очередь не более 30 запросов на одно подключение для конкретной конечной точки или внутреннего узла. (ПРИМЕЧАНИЕ. Пакет SDK не выстраивает в очередь эти 30 запросов для одного подключения сразу же.)
connectTimeout "PT5S" "~PT1S" Это представляет длительность времени ожидания установки подключения для единого подключения , установленного с конечным или внутренним узлом. По умолчанию пакет SDK ожидает не более 5 секунд до создания подключения, прежде чем вызывать ошибку. При создании TCP-подключения используется многофакторное подтверждение , которое увеличивает задержку времени создания подключения, поэтому клиентам рекомендуется задать это значение в соответствии с параметрами пропускной способности сети и среды. ПРИМЕЧАНИЕ. Эта рекомендация ~PT1S предназначена только для приложений, развернутых в совместно размещенных регионах учетных записей Cosmos DB.
тайм-аут запроса сети "PT5S" "PT5S" Это представляет длительность времени ожидания сети для одного запроса. SDK будет ждать максимальное время для получения ответа от службы после того, как запрос будет отправлен в сетевое подключение. Пакет SDK разрешает только значения от 1 секунды (мин) до 10 секунд (максимум). Установка слишком высокого значения может привести к уменьшению количества повторных попыток и уменьшению шансов на успех путем повторных попыток.

Режим подключения шлюза

Операции уровня управления, такие как база данных и контейнер CRUD , всегда используют режим шлюза. Даже если пользователь настроил режим Direct для операций с плоскостью данных, операции с плоскостью управления и метаданными используют настройки режима Шлюз по умолчанию. Это подходит большинству пользователей. Однако пользователи, которые хотят использовать прямой режим для операций плоскости данных и настраиваемость параметров режима шлюза уровня управления, могут использовать следующее переопределение: directMode()

Асинхронный API Java SDK версии 4 (Maven com.azure::azure-cosmos)


/* Independent customization of Direct mode data plane and Gateway mode control plane */
DirectConnectionConfig directConnectionConfig = DirectConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
directConnectionConfig.setMaxConnectionsPerEndpoint(130);
directConnectionConfig.setIdleConnectionTimeout(Duration.ZERO);

GatewayConnectionConfig gatewayConnectionConfig = GatewayConnectionConfig.getDefaultConfig();

// Example config, do not use these settings as defaults
gatewayConnectionConfig.setProxy(new ProxyOptions(ProxyOptions.Type.HTTP, InetSocketAddress.createUnresolved("your.proxy.addr",80)));
gatewayConnectionConfig.setMaxConnectionPoolSize(1000);

CosmosAsyncClient clientDirectCustom = new CosmosClientBuilder()
        .endpoint(HOSTNAME)
        .key(MASTERKEY)
        .consistencyLevel(CONSISTENCY)
        .directMode(directConnectionConfig,gatewayConnectionConfig)
        .buildAsyncClient();

Настройка режима подключения шлюза

Если требуется не установленное по умолчанию поведение режима шлюза, создайте экземпляр GatewayConnectionConfig, настройте его свойства, затем передайте настроенный экземпляр в метод directMode() или gatewayMode() в контексте построителя клиента Azure Cosmos DB.

В качестве первого шага используйте следующие рекомендуемые параметры конфигурации. Эти параметры GatewayConnectionConfig — это дополнительные параметры конфигурации, которые могут повлиять на производительность пакета SDK непредвиденными способами; Мы рекомендуем пользователям избегать их изменения, если они не чувствуют себя комфортно в понимании компромиссов и это необходимо. Обратитесь к группе Azure Cosmos DB , если у вас возникли проблемы с этой конкретной темой.

Параметр конфигурации По умолчанию Recommended Сведения
maxConnectionPoolSize "1000" "1000" Это представляет верхний размер пула подключений для базового http-клиента, что является максимальным числом подключений, создаваемых пакетом SDK для запросов, поступающих в режим шлюза. Пакет SDK повторно использует эти подключения при отправке запросов в шлюз.
idleConnectionTimeout "PT60S" "PT60S" Это представляет длительность времени ожидания простоя подключения для одного подключения к шлюзу. После этого подключение будет автоматически закрыто и будет удалено из пула подключений.

Дальнейшие шаги

Дополнительные сведения см. в статье Советы по обеспечению производительности для пакета SDK Azure Cosmos DB для Java версии 4.

Дополнительные сведения о создании приложения с высокой масштабируемостью и производительностью см. в статье Partitioning and scaling in Azure Cosmos DB (Секционирование и масштабирование в Azure Cosmos DB).

Пытаетесь составить план мощностей для миграции в Azure Cosmos DB? Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.