Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: 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 не нужно было часто открывать подключения. Однако это будет использовать сетевые ресурсы и иметь большее количество постоянно открытых подключений. Если задано значение ноль, проверка конечной точки бездействия будет отключена. |
максимальное количество соединений на конечную точку | "130" | "130" | Это представляет максимальный размер пула подключений для конечной точки или бэкенд-узла (представляющего реплику). Пакет SDK создает подключения к конечной точке или внутреннему узлу по запросу и на основе входящих одновременных запросов. По умолчанию пакет SDK создаст не более 130 подключений к конечной точке или внутреннему узлу. (ПРИМЕЧАНИЕ. Пакет SDK не создает эти 130 подключений заранее). |
МаксЗапросовНаСоединение | 30 | "30" | Это представляет максимальный размер максимального числа запросов, которые могут быть помещены в очередь в одном соединении для определенной конечной точки или внутреннего узла (представляющего реплику). Комплект разработки организует запросы для единственного подключения к конечной точке по требованию и на основе входящих параллельных запросов. По умолчанию, если необходимо, 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.
Параметр конфигурации | По умолчанию. | Рекомендовано | Сведения |
---|---|---|---|
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, Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса с использованием vCores или vCPUs.
- Если вам известна стандартная частота запросов для текущей рабочей нагрузки базы данных, ознакомьтесь со статьей о расчете единиц запросов с помощью планировщика ресурсов Azure Cosmos DB