Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
As dicas de desempenho neste artigo são apenas para o SDK Java v4 do Azure Cosmos DB. Veja as notas de versão do SDK Java do Azure Cosmos DB v4, o repositório Maven e o guia de solução de problemas do SDK Java do Azure Cosmos DB v4 para obter mais informações. Se você estiver usando uma versão mais antiga do que a v4, consulte o guia Migrar para o SDK Java do Azure Cosmos DB v4 para obter ajuda com a atualização para a v4.
O Azure Cosmos DB é um banco de dados distribuído rápido e flexível que pode ser dimensionado perfeitamente com latência e taxa de transferência garantidas. Você não precisa fazer grandes alterações na arquitetura ou escrever código complexo para dimensionar seu banco de dados com o Azure Cosmos DB. Escalar para cima e para baixo é tão fácil quanto fazer uma única chamada de API ou chamada de método SDK. No entanto, como o Azure Cosmos DB é acedido através de chamadas de rede, existem configurações de ligação que pode ajustar para alcançar o desempenho máximo ao usar o Azure Cosmos DB Java SDK v4.
Configuração da conexão
Observação
No Azure Cosmos DB Java SDK v4, o modo Direto é a melhor escolha para melhorar o desempenho da base de dados com a maioria das cargas de trabalho.
Para saber mais sobre as diferentes opções de conectividade, consulte o artigo Modos de conectividade.
Modo de ligação direta
O modo de ligação predefinido do SDK Java é direto. Os pedidos do Azure Cosmos DB em modo direto são feitos via TCP ao utilizar o Azure Cosmos DB Java SDK v4. O modo Internally Direct utiliza uma arquitetura especial para gerir dinamicamente os recursos da rede e obter o melhor desempenho. A arquitetura do lado do cliente empregue no modo Direto permite a utilização previsível da rede e o acesso multiplexado às réplicas do Azure Cosmos DB. Para saber mais sobre arquitetura, consulte a arquitetura de ligação em modo direto
Pode configurar o modo de ligação no construtor de clientes usando o método directMode(), como mostrado aqui. Para configurar o modo direto com definições padrão, chame directMode() o método sem argumentos. Para personalizar as definições de ligação em modo direto, passe DirectConnectionConfig para directMode() API.
Java SDK V4 (Maven com.azure::azure-cosmos) API assíncrona
/* 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();
Personalização do modo de ligação direta
Se se desejar comportamento de modo Direto não predefinido, crie uma instância DirectConnectionConfig e personalize as suas propriedades, depois passe a instância personalizada para o método directMode() no construtor de clientes do Azure Cosmos DB.
Estas definições controlam o comportamento da arquitetura subjacente do modo Direto discutida anteriormente.
Como primeiro passo, utilize as seguintes definições de configuração recomendadas aqui. Estas opções DirectConnectionConfig são definições avançadas de configuração, que podem afetar o desempenho do SDK de formas inesperadas; Recomendamos que os utilizadores evitem modificá-los, a menos que se sintam confortáveis em compreender as desvantagens e que seja necessário. Contacte a equipa do Azure Cosmos DB se tiver problemas sobre este tema em particular.
| Opção de configuração | Predefinido | Recomendado | Detalhes |
|---|---|---|---|
| idleConnectionTimeout | "PT0" (ZERO) | "PT0" (ZERO) | Isto representa o tempo limite de ligação inativa para uma única ligação a um nó de terminal/backend (representando uma réplica). Por defeito, o SDK não fecha automaticamente as ligações inativas aos nós do backend. |
| idleEndpointTimeout | "PT1H" | "PT1H" | Isto representa a duração do tempo limite da conexão inativa para o pool de conexão de um nó de ponto final/backend (representando uma réplica). Por predefinição, se não houver pedidos de entrada para um determinado ponto final/nó de backend, o SDK fechará todas as ligações no agrupamento de conexões para esse ponto final/nó de backend após 1 hora para poupar recursos de rede e custos de I/O. Para padrões de tráfego esparsos ou esporádicos, recomendamos definir este valor para um valor mais alto, como 6 horas, 12 horas ou até 24 horas, para que o SDK não tenha de abrir as ligações frequentemente. No entanto, isto utiliza os recursos da rede e terá um número maior de ligações abertas em qualquer momento. Se isto estiver definido para ZERO, a verificação do endpoint inativo fica desativada. |
| maxConnectionsPerEndpoint | "130" | "130" | Isto representa o limite máximo do tamanho do pool de conexão para um endpoint/backend (representando uma réplica). O SDK cria ligações ao ponto terminal/backend a pedido e com base em pedidos concorrentes recebidos. Por padrão, caso seja necessário, o SDK cria no máximo 130 ligações a um ponto terminal/nó backend. (NOTA: O SDK não cria estas 130 ligações antecipadamente). |
| máximoPedidosPorConexão | 30 | "30" | Isto representa o limite superior do número máximo de pedidos que podem ser enfileirados numa única ligação para um ponto final/nó backend específico (representando uma réplica). O SDK enfileira os pedidos numa única ligação a um endpoint ou nó backend, com base em pedidos concorrentes recebidos e conforme a necessidade. Por predefinição, se necessário, o SDK enfileira no máximo 30 pedidos numa única ligação para um endpoint/nó backend específico. (NOTA: O SDK não coloca estes 30 pedidos em fila numa única ligação inicialmente). |
| connectTimeout | "PT5S" | "~PT1S" | Isto representa a duração do tempo limite para o estabelecimento de uma única conexão com um ponto final/nó de backend. Por defeito, o SDK espera no máximo 5 segundos para o estabelecimento da ligação antes de lançar um erro. O estabelecimento de ligação TCP utiliza handshake em múltiplos passos , que aumenta a latência do tempo de estabelecimento da ligação; por isso, recomenda-se que os clientes definam este valor de acordo com a largura de banda da rede e as definições do ambiente. NOTA: Esta recomendação do ~PT1S é apenas para aplicações implementadas em regiões co-localizadas das suas contas Cosmos DB. |
| networkRequestTimeout | "PT5S" | "PT5S" | Isto representa a duração do timeout da rede para um único pedido. O SDK espera no máximo este tempo para consumir uma resposta de serviço após o pedido ter sido escrito para a ligação de rede. O SDK só permite valores entre 1 segundo (min) e 10 segundos (máximo). Definir um valor demasiado alto pode resultar em menos tentativas e reduzir as hipóteses de sucesso por tentativas. |
Modo de Conexão de Gateway
Operações no plano de controlo, tais como operações CRUD em bases de dados e contentores, sempre utilizam o modo Gateway. Mesmo quando o utilizador configurou o modo Direto para operações no plano de dados, as operações de plano de controlo e metadados utilizam as definições padrão do modo Gateway. Isto serve para a maioria dos utilizadores. No entanto, utilizadores que queiram modo Direto para operações no plano de dados e afinabilidade dos parâmetros do modo Gateway do plano de controlo podem usar o seguinte override directMode():
Java SDK V4 (Maven com.azure::azure-cosmos) API assíncrona
/* 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();
Personalização do modo de ligação do gateway
Se desejar um comportamento não predefinido para o modo Gateway, crie uma instância de GatewayConnectionConfig e personalize as suas propriedades. Em seguida, passe a instância personalizada para o método de substituição directMode() ou para o método gatewayMode() no construtor de clientes do Azure Cosmos DB.
Como primeiro passo, utilize as seguintes definições de configuração recomendadas aqui. Estas opções GatewayConnectionConfig são definições avançadas de configuração, que podem afetar o desempenho do SDK de formas inesperadas; Recomendamos que os utilizadores evitem modificá-los, a menos que se sintam confortáveis em compreender as desvantagens e que seja necessário. Contacte a equipa do Azure Cosmos DB se tiver problemas sobre este tema em particular.
| Opção de configuração | Predefinido | Recomendado | Detalhes |
|---|---|---|---|
| tamanhoMáximoDoPoolDeConexões (maxConnectionPoolSize) | "1000" | "1000" | Isto representa o limite superior do tamanho do pool de ligações para o cliente http subjacente, que é o número máximo de ligações que o SDK cria para pedidos que vão para o modo Gateway. O SDK reutiliza estas ligações ao enviar pedidos para o Gateway. |
| idleConnectionTimeout | "PT60S" | "PT60S" | Isto representa a duração do tempo limite de ociosidade para uma única ligação ao Gateway. Após este período, a ligação será automaticamente encerrada e removida do pool de ligações. |
Próximos passos
Para saber mais sobre dicas de desempenho para Java SDK, consulte Dicas de desempenho para o Azure Cosmos DB Java SDK v4.
Para saber mais sobre como projetar seu aplicativo para dimensionamento e alto desempenho, consulte Particionamento e dimensionamento no Azure Cosmos DB.
Tentando fazer o planejamento de capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre seu cluster de banco de dados existente para planejamento de capacidade.
- Se tudo o que você sabe é o número de vCores e servidores em seu cluster de banco de dados existente, leia sobre como estimar unidades de solicitação usando vCores ou vCPUs
- Se você souber as taxas de solicitação típicas para sua carga de trabalho de banco de dados atual, leia sobre como estimar unidades de solicitação usando o planejador de capacidade do Azure Cosmos DB