Delen via


Verbindingsconfiguraties afstemmen voor Azure Cosmos DB Java SDK v4

VAN TOEPASSING OP: NoSQL

Belangrijk

De prestatietips in dit artikel zijn alleen bedoeld voor Azure Cosmos DB Java SDK v4. Bekijk de releaseopmerkingen voor De Java SDK v4 van Azure Cosmos DB, de Maven-opslagplaats en de probleemoplossingsgids voor Azure Cosmos DB Java SDK v4 voor meer informatie. Als u momenteel een oudere versie dan v4 gebruikt, raadpleegt u de gids Migreren naar Azure Cosmos DB Java SDK v4 voor hulp om te upgraden naar v4.

Azure Cosmos DB is een snelle en flexibele gedistribueerde database die naadloos wordt geschaald met gegarandeerde latentie en doorvoer. U hoeft geen belangrijke architectuurwijzigingen aan te brengen of complexe code te schrijven om uw database te schalen met Azure Cosmos DB. Omhoog en omlaag schalen is net zo eenvoudig als het maken van één API-aanroep of SDK-methode-aanroep. Omdat Azure Cosmos DB echter toegankelijk is via netwerkaanroepen, zijn er verbindingsconfiguraties die u kunt afstemmen om piekprestaties te bereiken wanneer u Azure Cosmos DB Java SDK v4 gebruikt.

Verbindingsconfiguratie

Notitie

In Azure Cosmos DB Java SDK v4 is de directe modus de beste keuze om de databaseprestaties met de meeste workloads te verbeteren.

Zie het artikel over connectiviteitsmodi voor meer informatie over verschillende connectiviteitsopties .

Directe verbindingsmodus

De standaardverbindingsmodus van Java SDK is direct. Azure Cosmos DB-aanvragen in de directe modus worden uitgevoerd via TCP wanneer u Azure Cosmos DB Java SDK v4 gebruikt. Intern de directe modus maakt gebruik van een speciale architectuur om netwerkbronnen dynamisch te beheren en de beste prestaties te krijgen. De architectuur aan de clientzijde die in de directe modus wordt gebruikt, maakt voorspelbaar netwerkgebruik en multiplexed toegang tot Azure Cosmos DB-replica's mogelijk. Zie de verbindingsarchitectuur voor de directe modus voor meer informatie over architectuur

U kunt de verbindingsmodus in de clientbouwer configureren met behulp van de directMode() -methode, zoals hieronder wordt weergegeven. Als u de directe modus met standaardinstellingen wilt configureren, roept directMode() u de methode aan zonder argumenten. Als u de verbindingsinstellingen voor de directe modus wilt aanpassen, geeft u DirectConnectionConfig door aan directMode() de API.

Java SDK V4 (Maven com.azure::azure-cosmos) Async API


/* 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();

Directe verbindingsmodus aanpassen

Als niet-standaardgedrag van de directe modus gewenst is, maakt u een DirectConnectionConfig-exemplaar en past u de eigenschappen ervan aan en geeft u het aangepaste eigenschapsexemplaren door aan de methode directMode() in de opbouwfunctie van de Azure Cosmos DB-client.

Deze configuratie-instellingen bepalen het gedrag van de onderliggende architectuur voor de directe modus die hierboven wordt besproken.

Als eerste stap gebruikt u de volgende aanbevolen configuratie-instellingen hieronder. Deze DirectConnectionConfig-opties zijn geavanceerde configuratie-instellingen die op onverwachte manieren van invloed kunnen zijn op de SDK-prestaties. We raden gebruikers aan deze instellingen niet te wijzigen, tenzij ze zich zeer vertrouwd voelen bij het begrijpen van de compromissen en het is absoluut noodzakelijk. Neem contact op met het Azure Cosmos DB-team als u problemen ondervindt met dit specifieke onderwerp.

Configuratieoptie Standaardinstelling Aanbevolen DETAILS
idleConnectionTimeout "PT0" (NUL) "PT0" (NUL) Dit vertegenwoordigt de time-outduur voor niet-actieve verbindingen voor één verbinding met een eindpunt-/back-endknooppunt (die een replica vertegenwoordigt). Standaard sluit SDK niet automatisch niet-actieve verbindingen met de back-endknooppunten.
idleEndpointTimeout "PT1H" "PT1H" Dit vertegenwoordigt de time-outduur voor niet-actieve verbindingen voor de verbindingsgroep voor een eindpunt-/back-endknooppunt (die een replica vertegenwoordigt). Als er na 1 uur geen binnenkomende aanvragen zijn voor een specifiek eindpunt-/back-endknooppunt, worden alle verbindingen in de verbindingsgroep met dat eindpunt-/back-endknooppunt na 1 uur gesloten om netwerkbronnen en I/O-kosten te besparen. Voor een sparse- of sporadisch verkeerspatroon raden we u aan deze waarde in te stellen op een hoger getal, zoals 6 uur, 12 uur of zelfs 24 uur, zodat de SDK de verbindingen niet regelmatig hoeft te openen. Dit maakt echter gebruik van de netwerkbronnen en heeft een hoger aantal verbindingen dat op elk gewenst moment open blijft. Als dit is ingesteld op NUL, wordt de controle van het niet-actieve eindpunt uitgeschakeld.
maxConnectionsPerEndpoint "130" "130" Dit vertegenwoordigt de bovengrens van de verbindingsgroep voor een eindpunt-/back-endknooppunt (die een replica vertegenwoordigt). SDK maakt verbindingen met eindpunt-/back-endknooppunt op aanvraag en op basis van binnenkomende gelijktijdige aanvragen. Indien nodig maakt SDK standaard maximaal 130 verbindingen met een eindpunt-/back-endknooppunt. (OPMERKING: de SDK maakt deze 130 verbindingen niet vooraf).
maxRequestsPerConnection "30" "30" Dit vertegenwoordigt de bovengrens van het maximum aantal aanvragen dat in de wachtrij kan worden geplaatst voor één verbinding voor een specifiek eindpunt/back-endknooppunt (dat een replica vertegenwoordigt). SDK wachtrijen aanvragen naar één verbinding met een eindpunt/back-endknooppunt op aanvraag en op basis van binnenkomende gelijktijdige aanvragen. Indien nodig plaatst SDK standaard maximaal 30 aanvragen in de wachtrij voor één verbinding voor een specifiek eindpunt/back-endknooppunt. (OPMERKING: de SDK zet deze 30 aanvragen niet in de wachtrij voor één verbinding vooraf).
connectTimeout "PT5S" "~PT1S" Dit vertegenwoordigt de time-outduur van de verbindingsinstelling voor één verbinding die tot stand is gebracht met een eindpunt-/back-endknooppunt. Standaard wacht de SDK maximaal 5 seconden voordat de verbinding tot stand is gebracht voordat er een fout wordt gegenereerd. Tcp-verbindingsinstelling maakt gebruik van handshake met meerdere stappen, waardoor de latentie van de verbindingsinstelling toeneemt. Daarom wordt klanten aangeraden deze waarde in te stellen op basis van hun netwerkbandbreedte en omgevingsinstellingen. OPMERKING: Deze aanbeveling van ~PT1S is alleen bedoeld voor toepassingen die zijn geïmplementeerd in regio's van hun Cosmos DB-accounts.
networkRequestTimeout "PT5S" "PT5S" Dit vertegenwoordigt de time-outduur van het netwerk voor één aanvraag. DE SDK wacht maximaal tot deze duur een serviceantwoord verbruikt nadat de aanvraag naar de netwerkverbinding is geschreven. SDK staat alleen waarden toe tussen 1 seconde (min) en 10 seconden (max). Het instellen van een te hoge waarde kan resulteren in minder nieuwe pogingen en het aantal pogingen verminderen door nieuwe pogingen.

Gatewayverbindingsmodus

Besturingsvlakbewerkingen zoals database en container CRUD maken altijd gebruik van de gatewaymodus. Zelfs wanneer de gebruiker de directe modus heeft geconfigureerd voor bewerkingen van het gegevensvlak, maken besturingsvlak- en metagegevensbewerkingen gebruik van de standaardinstellingen van de gatewaymodus. Dit past bij de meeste gebruikers. Gebruikers die de directe modus voor bewerkingen van het gegevensvlak en de parameters voor de gatewaymodus van het besturingsvlak willen gebruiken, kunnen echter de volgende directMode() overschrijving gebruiken:

Java SDK V4 (Maven com.azure::azure-cosmos) Async API


/* 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();

Gatewayverbindingsmodus aanpassen

Als niet-standaardgedrag van de gatewaymodus gewenst is, maakt u een GatewayConnectionConfig-exemplaar en past u de eigenschappen ervan aan en geeft u het aangepaste eigenschapsexemplaren door aan de bovenstaande directMode() methode of gatewayMode() in de opbouwfunctie van de Azure Cosmos DB-client.

Als eerste stap gebruikt u de volgende aanbevolen configuratie-instellingen hieronder. Deze GatewayConnectionConfig-opties zijn geavanceerde configuratie-instellingen die op onverwachte manieren van invloed kunnen zijn op de SDK-prestaties. We raden gebruikers aan ze te vermijden ze te wijzigen, tenzij ze zich zeer vertrouwd voelen bij het begrijpen van de compromissen en het is absoluut noodzakelijk. Neem contact op met het Azure Cosmos DB-team als u problemen ondervindt met dit specifieke onderwerp.

Configuratieoptie Standaardinstelling Aanbevolen DETAILS
maxConnectionPoolSize "1000" "1000" Dit vertegenwoordigt de bovengrens van de grootte van de verbindingsgroep voor de onderliggende HTTP-client. Dit is het maximum aantal verbindingen dat door de SDK wordt gemaakt voor aanvragen die naar de gatewaymodus gaan. SDK gebruikt deze verbindingen opnieuw bij het verzenden van aanvragen naar de gateway.
idleConnectionTimeout "PT60S" "PT60S" Dit vertegenwoordigt de time-outduur voor niet-actieve verbindingen voor één verbinding met de gateway. Na deze tijd wordt de verbinding automatisch gesloten en wordt deze verwijderd uit de verbindingsgroep.

Volgende stappen

Zie prestatietips voor Azure Cosmos DB Java SDK v4 voor meer informatie over prestatietips voor Java SDK.

Zie Partitioneren en schalen in Azure Cosmos DB voor meer informatie over het ontwerpen van uw toepassing voor schaalaanpassing en hoge prestaties.

Wilt u capaciteitsplanning uitvoeren voor een migratie naar Azure Cosmos DB? U kunt informatie over uw bestaande databasecluster gebruiken voor capaciteitsplanning.