Share via


Justera anslutningskonfigurationer för Azure Cosmos DB Java SDK v4

GÄLLER FÖR: NoSQL

Viktigt

Prestandatipsen i den här artikeln gäller endast för Azure Cosmos DB Java SDK v4. Mer information finns i viktig information om Azure Cosmos DB Java SDK v4, Maven-lagringsplatsen och Azure Cosmos DB Java SDK v4. Om du för närvarande använder en äldre version än v4 kan du läsa guiden Migrera till Azure Cosmos DB Java SDK v4 för hjälp med att uppgradera till v4.

Azure Cosmos DB är en snabb och flexibel distribuerad databas som skalas sömlöst med garanterad svarstid och dataflöde. Du behöver inte göra större arkitekturändringar eller skriva komplex kod för att skala databasen med Azure Cosmos DB. Det är lika enkelt att skala upp och ned som att göra ett enda API-anrop eller ett SDK-metodanrop. Men eftersom Azure Cosmos DB nås via nätverksanrop finns det anslutningskonfigurationer som du kan justera för att uppnå högsta prestanda när du använder Azure Cosmos DB Java SDK v4.

Anslutningskonfiguration

Anteckning

I Azure Cosmos DB Java SDK v4 är direktläge det bästa valet för att förbättra databasens prestanda med de flesta arbetsbelastningar.

Mer information om olika anslutningsalternativ finns i artikeln om anslutningslägen .

Direktanslutningsläge

Standardanslutningsläget för Java SDK är direkt. Azure Cosmos DB-begäranden i direktläge görs via TCP när du använder Azure Cosmos DB Java SDK v4. Internt direktläge använder en särskild arkitektur för att dynamiskt hantera nätverksresurser och få bästa möjliga prestanda. Arkitekturen på klientsidan som används i direktläge möjliggör förutsägbar nätverksanvändning och multiplexerad åtkomst till Azure Cosmos DB-repliker. Mer information om arkitektur finns i anslutningsarkitekturen för direktläge

Du kan konfigurera anslutningsläget i klientverktyget med hjälp av directMode() -metoden enligt nedan. Om du vill konfigurera direktläge med standardinställningar anropar directMode() du metoden utan argument. Om du vill anpassa anslutningsinställningar för direktläge skickar du DirectConnectionConfig till directMode() 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();

Anpassa direktanslutningsläge

Om ett icke-standardbeteende för direktläge önskas skapar du en DirectConnectionConfig-instans och anpassar dess egenskaper och skickar sedan den anpassade egenskapsinstansen till metoden directMode() i Azure Cosmos DB-klientverktyget.

De här konfigurationsinställningarna styr beteendet för den underliggande arkitekturen för direktläge som beskrivs ovan.

Använd följande rekommenderade konfigurationsinställningar nedan som ett första steg. Dessa DirectConnectionConfig-alternativ är avancerade konfigurationsinställningar som kan påverka SDK-prestanda på oväntade sätt. Vi rekommenderar att användarna undviker att ändra dem om de inte känner sig mycket bekväma med att förstå kompromisserna och det är absolut nödvändigt. Kontakta Azure Cosmos DB-teamet om du stöter på problem med det här specifika ämnet.

Konfigurationsalternativ Standardvärde Rekommenderas Information
idleConnectionTimeout "PT0" (NOLL) "PT0" (NOLL) Detta representerar tidsgränsen för inaktiv anslutning för en enskild anslutning till en slutpunkt/serverdelsnod (som representerar en replik). Som standard stänger SDK inte automatiskt inaktiva anslutningar till serverdelsnoderna.
idleEndpointTimeout "PT1H" "PT1H" Detta representerar tidsgränsen för inaktiv anslutning för anslutningspoolen för en slutpunkt/serverdelsnod (som representerar en replik). Om det inte finns några inkommande begäranden till en specifik slutpunkt/serverdelsnod stänger SDK som standard alla anslutningar i anslutningspoolen till den slutpunkten/serverdelsnoden efter 1 timme för att spara nätverksresurser och I/O-kostnader. För glesa eller sporadiska trafikmönster rekommenderar vi att du ställer in det här värdet på ett högre tal, till exempel 6 timmar, 12 timmar eller till och med 24 timmar, så att SDK inte behöver öppna anslutningarna ofta. Detta använder dock nätverksresurserna och har ett högre antal anslutningar som hålls öppna vid en viss tidpunkt. Om detta är inställt på NOLL inaktiveras kontrollen av inaktiv slutpunkt.
maxConnectionsPerEndpoint "130" "130" Detta representerar anslutningspoolens övre gränsstorlek för en slutpunkt/serverdelsnod (som representerar en replik). SDK skapar anslutningar till slutpunkts-/serverdelsnod på begäran och baseras på inkommande samtidiga begäranden. Om det behövs skapar SDK som standard högst 130 anslutningar till en slutpunkt/serverdelsnod. (OBS! SDK skapar inte dessa 130 anslutningar i förväg).
maxRequestsPerConnection "30" "30" Detta representerar den övre gränsstorleken för det maximala antalet begäranden som kan placeras i kö på en enda anslutning för en specifik slutpunkt/serverdelsnod (som representerar en replik). SDK köar begäranden till en enda anslutning till en slutpunkt/serverdelsnod på begäran och baserat på inkommande samtidiga begäranden. Om det behövs köar SDK som standard högst 30 begäranden till en enda anslutning för en specifik slutpunkt/serverdelsnod. (OBS! SDK:t köar inte dessa 30 begäranden till en enda anslutning i förväg).
connectTimeout "PT5S" "~PT1S" Detta representerar tidsgränsen för anslutningsetablering för en enskild anslutning som ska upprättas med en slutpunkt/serverdelsnod. Som standard väntar SDK i högst 5 sekunder för anslutningsetablering innan ett fel uppstår. TCP-anslutningsetableringen använder handskakning i flera steg , vilket ökar svarstiden för anslutningens etableringstid. Därför rekommenderar vi att kunderna anger det här värdet enligt nätverksbandbredden och miljöinställningarna. Obs! Den här rekommendationen ~PT1S gäller endast för program som distribueras i samlokaliserade regioner för sina Cosmos DB-konton.
networkRequestTimeout "PT5S" "PT5S" Detta representerar tidsgränsen för nätverket för en enskild begäran. SDK väntar maximalt under den här tiden på att använda ett tjänstsvar när begäran har skrivits till nätverksanslutningen. SDK tillåter endast värden mellan 1 sekund (min) och 10 sekunder (max). Om du anger ett värde för högt kan det resultera i färre återförsök och minska risken för lyckade försök.

Gatewayanslutningsläge

Kontrollplansåtgärder som databas- och container-CRUD använder alltid gatewayläge. Även om användaren har konfigurerat direktläge för dataplansåtgärder använder kontrollplans- och metadataåtgärder standardinställningarna för gatewayläge. Detta passar de flesta användare. Användare som vill ha direktläge för dataplansåtgärder samttunnbarhet för kontrollplanets gatewaylägesparametrar kan dock använda följande directMode()-åsidosättning :

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

Anpassa gatewayanslutningsläge

Om ett icke-standardbeteende för gatewayläge önskas skapar du en GatewayConnectionConfig-instans och anpassar dess egenskaper och skickar sedan den anpassade egenskapsinstansen till ovanstående åsidosättningsmetod för directMode() eller gatewayMode() i Azure Cosmos DB-klientverktyget.

Använd följande rekommenderade konfigurationsinställningar nedan som ett första steg. Dessa GatewayConnectionConfig-alternativ är avancerade konfigurationsinställningar som kan påverka SDK-prestanda på oväntade sätt. Vi rekommenderar att användarna undviker att ändra dem om de inte känner sig mycket bekväma med att förstå kompromisserna och det är absolut nödvändigt. Kontakta Azure Cosmos DB-teamet om du stöter på problem med det här specifika ämnet.

Konfigurationsalternativ Standardvärde Rekommenderas Information
maxConnectionPoolSize "1000" "1000" Detta representerar den övre gränsstorleken för anslutningspoolens storlek för den underliggande http-klienten, vilket är det maximala antalet anslutningar som SDK skapar för begäranden som går till Gateway-läge. SDK återanvänder dessa anslutningar när begäranden skickas till gatewayen.
idleConnectionTimeout "PT60S" "PT60S" Detta representerar tidsgränsen för inaktiv anslutning för en enda anslutning till gatewayen. Efter den här tiden stängs anslutningen automatiskt och tas bort från anslutningspoolen.

Nästa steg

Mer information om prestandatips för Java SDK finns i Prestandatips för Azure Cosmos DB Java SDK v4.

Mer information om hur du utformar ditt program för skalning och höga prestanda finns i Partitionering och skalning i Azure Cosmos DB.

Försöker du göra kapacitetsplanering för en migrering till Azure Cosmos DB? Du kan använda information om ditt befintliga databaskluster för kapacitetsplanering.