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


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

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Внимание

Советы по повышению производительности в этой статье предназначены исключительно для пакета SDK для Java версии 4 в Azure Cosmos DB. Дополнительные сведения см. в заметках о выпуске для пакета SDK для Java версии 4 в Azure Cosmos DB, в репозитории Maven, а также в руководстве по устранению неполадок для пакета SDK для Java версии 4 в Azure Cosmos DB. Если сейчас вы используете более раннюю версию, чем версия 4, руководство Перевод приложения на использование пакета средств разработки 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. На внутреннем уровне режим прямого подключения использует специальную архитектуру для динамического управления сетевыми ресурсами и обеспечения оптимальной производительности. Клиентская архитектура, применяемая в режиме прямого подключения, обеспечивает предсказуемое использование сети и мультиплексированный доступ к репликам Azure Cosmos DB. Дополнительные сведения об архитектуре см. в архитектуре подключения к прямому режиму

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

Асинхронный API пакета SDK для Java версии 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();

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

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

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

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

Параметр конфигурации По умолчанию. Рекомендуемая конфигурация Сведения
idleConnectionTimeout "PT0" (НОЛЬ) "PT0" (НОЛЬ) Это представляет длительность времени ожидания простоя подключения для одного подключения к конечной точке или внутреннему узлу (представляющей реплику). По умолчанию пакет SDK не закрывает неактивные подключения к узлам серверной части.
idleEndpointTimeout "PT1H" "PT1H" Это представляет длительность времени ожидания простоя подключения для пула подключений для конечной точки или внутреннего узла (представляющего реплику). По умолчанию при отсутствии входящих запросов к определенному узлу конечной точки или серверной части пакет SDK закроет все подключения в пуле подключений к этой конечной точке или внутреннему узлу через 1 час, чтобы сэкономить сетевые ресурсы и затраты на ввод-вывод. Для разреженного или разреженного трафика рекомендуется задать это значение, например 6 часов, 12 часов или даже 24 часа, чтобы пакет SDK не должен часто открывать подключения. Однако это будет использовать сетевые ресурсы и будет иметь более высокое количество подключений, которые хранятся в любое время. Если задано значение ZERO, проверка конечной точки простоя будет отключена.
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.
networkRequestTimeout "PT5S" "PT5S" Это представляет длительность времени ожидания сети для одного запроса. Пакет SDK подождит, пока эта длительность будет использоваться ответом службы после записи запроса в сетевое подключение. Пакет SDK разрешает только значения от 1 секунды (мин) до 10 секунд (максимум). Установка слишком высокого значения может привести к уменьшению количества повторных попыток и уменьшению шансов на успех путем повторных попыток.

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

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

Асинхронный API пакета SDK для Java версии 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 и настройте его свойства, передайте настраиваемый экземпляр свойства в указанный выше метод переопределения или метод gatewayMode() в построитель клиентов Azure Cosmos DB.

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

Параметр конфигурации По умолчанию. Рекомендуемая конфигурация Сведения
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, Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.