Sdílet prostřednictvím


Ladění konfigurací připojení pro sadu Azure Cosmos DB Java SDK v4

PLATÍ PRO: NoSQL

Důležité

Tipy k výkonu v tomto článku jsou určené jenom pro sadu Java SDK služby Azure Cosmos DB verze 4. Další informace najdete v průvodci odstraňováním potíží se sadou Azure Cosmos DB Java SDK verze 4, úložištěm Maven a sadou Java SDK služby Azure Cosmos DB verze 4. Pokud aktuálně používáte starší verzi než v4, přečtěte si průvodce migrací na sadu Java SDK služby Azure Cosmos DB verze 4 , kde najdete pomoc s upgradem na verzi 4.

Azure Cosmos DB je rychlá a flexibilní distribuovaná databáze, která se bezproblémově škáluje s garantovanou latencí a propustností. Nemusíte provádět významné změny architektury ani psát složitý kód pro škálování databáze pomocí služby Azure Cosmos DB. Vertikální navýšení a snížení kapacity je stejně snadné jako vytvoření jediného volání rozhraní API nebo volání metody sady SDK. Protože je ale služba Azure Cosmos DB přístupná prostřednictvím síťových volání, existují konfigurace připojení, které můžete vyladit, abyste dosáhli maximálního výkonu při použití sady Azure Cosmos DB Java SDK v4.

Konfigurace připojení

Poznámka:

V sadě Azure Cosmos DB Java SDK v4 je nejlepším řešením pro zlepšení výkonu databáze s většinou úloh přímý režim .

Další informace o různých možnostech připojení najdete v článku o režimech připojení.

Režim přímého připojení

Výchozí režim připojení sady Java SDK je přímý. Požadavky Azure Cosmos DB v přímém režimu se provádějí přes protokol TCP při použití sady Java SDK služby Azure Cosmos DB v4. Interní přímý režim používá speciální architekturu k dynamické správě síťových prostředků a zajištění nejlepšího výkonu. Architektura na straně klienta použitá v režimu Direct umožňuje předvídatelné využití sítě a multiplexovaný přístup k replikám služby Azure Cosmos DB. Další informace o architektuře najdete v architektuře přímého režimu připojení.

Režim připojení v tvůrci klienta můžete nakonfigurovat pomocí metody directMode(), jak je znázorněno níže. Chcete-li nakonfigurovat přímý režim s výchozím nastavením, volejte directMode() metodu bez argumentů. Pokud chcete přizpůsobit nastavení připojení přímého režimu, předejte rozhraní API directConnectionConfig directMode().

Rozhraní Async API sady Java SDK V4 (Maven com::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();

Přizpůsobení režimu přímého připojení

Pokud je žádoucí jiné než výchozí chování režimu Direct Mode, vytvořte instanci DirectConnectionConfig a přizpůsobte její vlastnosti, předejte vlastní instanci vlastnosti metodě directMode() v tvůrci klientů Azure Cosmos DB.

Tato nastavení konfigurace řídí chování základní architektury přímého režimu, která je popsána výše.

Jako první krok použijte následující doporučená nastavení konfigurace níže. Tyto možnosti DirectConnectionConfig jsou pokročilá nastavení konfigurace, která můžou ovlivnit výkon sady SDK neočekávanými způsoby. Doporučujeme uživatelům vyhnout se jejich úpravám, pokud se nebudou cítit dobře pochopit kompromisy a je naprosto nezbytné. Pokud narazíte na problémy s tímto konkrétním tématem, obraťte se na tým Služby Azure Cosmos DB.

Možnost konfigurace Výchozí Doporučené Detaily
idleConnectionTimeout "PT0" (NULA) "PT0" (NULA) Představuje dobu časového limitu nečinnosti připojení pro jedno připojení k koncovému nebo back-endovému uzlu (představující repliku). Sada SDK ve výchozím nastavení automaticky nezavírá nečinná připojení k back-endovým uzlům.
idleEndpointTimeout "PT1H" "PT1H" Představuje dobu časového limitu nečinnosti připojení pro fond připojení pro koncový bod nebo back-endový uzel (představující repliku). Pokud na konkrétní koncový bod nebo back-endový uzel nejsou žádné příchozí požadavky, sada SDK ve výchozím nastavení zavře všechna připojení ve fondu připojení k uzlu koncového bodu nebo back-endu po 1 hodině, aby se ušetřily síťové prostředky a vstupně-výstupní náklady. U řídkých nebo sporadických přenosů doporučujeme tuto hodnotu nastavit na vyšší číslo, například 6 hodin, 12 hodin nebo dokonce 24 hodin, aby sada SDK nemusela často otevírat připojení. To však bude využívat síťové prostředky a bude mít v každém okamžiku otevřený vyšší počet připojení. Pokud je tato hodnota nastavená na NULU, kontrola nečinných koncových bodů se zakáže.
maxConnectionsPerEndpoint "130" "130" Představuje horní mez fondu připojení pro koncový bod nebo back-endový uzel (představující repliku). Sada SDK vytváří připojení ke koncovému nebo back-endovému uzlu na vyžádání a na základě příchozích souběžných požadavků. V případě potřeby sada SDK ve výchozím nastavení vytvoří maximálně 130 připojení ke koncovému nebo back-endovému uzlu. (POZNÁMKA: Sada SDK předem nevytvoří tato 130 připojení).
maxRequestsPerConnection "30" "30" Představuje horní mez maximálního počtu požadavků, které je možné zařadit do fronty na jedno připojení pro konkrétní koncový nebo back-endový uzel (představující repliku). Sada SDK zařadí požadavky na jedno připojení ke koncovému bodu nebo back-endovému uzlu na vyžádání a na základě příchozích souběžných požadavků. V případě potřeby sada SDK ve výchozím nastavení zařadí do fronty maximálně 30 požadavků na jedno připojení pro konkrétní koncový bod nebo back-endový uzel. (POZNÁMKA: Sada SDK nezařadí tyto 30 požadavků na jedno připojení předem.
connectTimeout "PT5S" "~PT1S" To představuje dobu trvání časového limitu vytvoření připojení pro jedno připojení s koncovým bodem nebo back-endovým uzlem. Sada SDK ve výchozím nastavení počká na vytvoření připojení maximálně 5 sekund, než vyvolá chybu. Připojení TCP používá vícestupňové handshake , což zvyšuje latenci doby zřízení připojení, proto se zákazníkům doporučuje nastavit tuto hodnotu podle šířky pásma sítě a nastavení prostředí. POZNÁMKA: Toto doporučení ~PT1S je určené pouze pro aplikace nasazené v společně umístěných oblastech jejich účtů Cosmos DB.
networkRequestTimeout "PT5S" "PT5S" Představuje dobu trvání časového limitu sítě pro jeden požadavek. Sada SDK po zápisu požadavku do síťového připojení počká maximálně na tuto dobu, než bude spotřebovávat odpověď služby. Sada SDK povoluje pouze hodnoty mezi 1 sekundou (min) a 10 sekundou (max). Nastavení příliš vysoké hodnoty může vést k menšímu počtu opakovaných pokusů a snížení pravděpodobnosti úspěchu opakovanými pokusy.

Režim připojení brány

Operace řídicí roviny, jako jsou databáze a kontejnerové operace CRUD , vždy využívají režim brány. I když uživatel nakonfiguroval přímý režim pro operace roviny dat, řídicí rovina a operace s meta daty používají výchozí nastavení režimu brány. To vyhovuje většině uživatelů. Uživatelé, kteří ale chtějí přímý režim pro operace roviny dat a také možnosti ladění parametrů režimu brány řídicí roviny, mohou použít následující přepsání DirectMode():

Rozhraní Async API sady Java SDK V4 (Maven com::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();

Přizpůsobení režimu připojení brány

Pokud není výchozí chování režimu brány žádoucí, vytvořte instanci GatewayConnectionConfig a přizpůsobte její vlastnosti, předejte přizpůsobenou instanci vlastnosti metodě přepsání directMode() nebo gatewayMode() v tvůrci klientů Azure Cosmos DB.

Jako první krok použijte následující doporučená nastavení konfigurace níže. Tyto možnosti GatewayConnectionConfig jsou pokročilá nastavení konfigurace, která můžou ovlivnit výkon sady SDK neočekávanými způsoby. Doporučujeme uživatelům vyhnout se jejich úpravám, pokud se nebudou cítit dobře pochopit kompromisy a je naprosto nezbytné. Pokud narazíte na problémy s tímto konkrétním tématem, obraťte se na tým Služby Azure Cosmos DB.

Možnost konfigurace Výchozí Doporučené Detaily
maxConnectionPoolSize "1000" "1000" Představuje horní mez velikosti fondu připojení pro základního klienta HTTP, což je maximální počet připojení, která sada SDK vytvoří pro požadavky směřující do režimu brány. Sada SDK tato připojení znovu použije při odesílání požadavků do brány.
idleConnectionTimeout "PT60S" "PT60S" Představuje dobu časového limitu nečinnosti připojení pro jedno připojení k bráně. Po této době se připojení automaticky zavře a odebere se z fondu připojení.

Další kroky

Další informace o tipech pro zvýšení výkonu sady Java SDK najdete v tématu Tipy pro zvýšení výkonu pro sadu Java SDK služby Azure Cosmos DB verze 4.

Další informace o návrhu aplikace pro škálování a vysoký výkon najdete v tématu Dělení a škálování ve službě Azure Cosmos DB.

Pokoušíte se naplánovat kapacitu migrace do služby Azure Cosmos DB? Informace o stávajícím databázovém clusteru můžete použít k plánování kapacity.