Dela 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 felsökningsguiden för Java SDK v4 i 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

Kommentar

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

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

Direktanslutningsläge

Java SDK:s standardanslutningsläge ä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 metoden directMode() 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 du vill använda ett icke-standardbeteende för direktläge skapar du en DirectConnectionConfig-instans och anpassar dess egenskaper och skickar sedan den anpassade egenskapsinstansen till directMode() -metoden i Azure Cosmos DB-klientverktyget.

Dessa konfigurationsinställningar 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 Rekommenderat Details
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 slutpunkts-/serverdelsnod stänger SDK 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 anger det här värdet till ett högre tal som 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 den inaktiva slutpunktskontrollen.
maxConnectionsPerEndpoint "130" "130" Detta representerar anslutningspoolens övre gränsstorlek för en slutpunkt/serverdelsnod (representerar en replik). SDK skapar anslutningar till slutpunkts-/serverdelsnoden på begäran och baseras på inkommande samtidiga begäranden. Om det behövs skapar SDK som standard högst 130 anslutningar till en slutpunkts-/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 slutpunkts-/serverdelsnod på begäran och baseras 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 köar inte dessa 30 begäranden till en enda anslutning i förväg).
connectTimeout "PT5S" "~PT1S" Detta representerar tidsgränsen för anslutningens etablering 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-anslutningsetablering 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 deras inställningar för nätverksbandbredd och miljö. Obs! Den här rekommendationen ~PT1S gäller endast för program som distribueras i samlokaliserade regioner i 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 för 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 leda till 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 när 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 samt tunabilitet för gatewaylägesparametrar för kontrollplanet 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 beteendet för gatewayläge inte är standard skapar du en GatewayConnectionConfig-instans och anpassar dess egenskaper och skickar sedan den anpassade egenskapsinstansen till ovanstående directMode() åsidosättningsmetod eller gatewayMode() -metod 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 Rekommenderat Details
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 enskild 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 planera kapacitet för en migrering till Azure Cosmos DB? Du kan använda information om ditt befintliga databaskluster för kapacitetsplanering.