Osvědčené postupy pro sadu Azure Cosmos DB Java SDK

PLATÍ PRO: NoSQL

Tento článek vás provede osvědčenými postupy pro používání sady Java SDK služby Azure Cosmos DB. Následující postupy vám pomůžou zlepšit latenci, dostupnost a zvýšit celkový výkon.

Kontrolní seznam

Zkontrolováno Popis Podrobnosti nebo odkazy
Verze sady SDK Vždy používejte nejnovější verzi sady SDK služby Azure Cosmos DB, která je k dispozici pro optimální výkon.
Klient Singleton Pro zajištění lepšího výkonu použijte jednu instanciCosmosClient po celou dobu životnosti aplikace.
Oblasti Nezapomeňte aplikaci spustit ve stejné oblasti Azure jako účet služby Azure Cosmos DB, kdykoli je to možné, abyste snížili latenci. Povolte 2 až 4 oblasti a replikujte své účty do více oblastí, aby byla nejlepší dostupnost. U produkčních úloh povolte převzetí služeb při selhání spravované službou. V případě absence této konfigurace dojde ke ztrátě dostupnosti zápisu po celou dobu výpadku oblasti zápisu, protože ruční převzetí služeb při selhání nebude úspěšné kvůli nedostatku připojení k oblasti. Informace o tom, jak přidat více oblastí pomocí sady Java SDK , najdete tady.
Dostupnost a převzetí služeb při selhání Nastavte upřednostňované oblasti v sadě SDK v4. Během převzetí služeb při selhání se operace zápisu posílají do aktuální oblasti zápisu a všechna čtení se odesílají do první oblasti v seznamu upřednostňovaných oblastí. Další informace o místní mechanikě převzetí služeb při selhání najdete v průvodci odstraňováním potíží s dostupností.
Procesor Kvůli nedostatku prostředků na klientském počítači můžete narazit na problémy s připojením nebo dostupností. Monitorujte využití procesoru na uzlech, na kterých běží klient Služby Azure Cosmos DB, a pokud je využití velmi vysoké, vertikálně navyšte nebo navyšte kapacitu.
Hostování Pro nejběžnější případy produkčních úloh důrazně doporučujeme používat alespoň 4 jádra a 8GB virtuální počítače paměti, kdykoli je to možné.
režimy Připojení ivity Pro zajištění nejlepšího výkonu použijte přímý režim . Pokyny k tomuto postupu najdete v dokumentaci k sadě SDK V4.
Sítě Pokud ke spuštění aplikace používáte virtuální počítač, povolte na virtuálním počítači akcelerované síťové služby , aby pomohly s kritickými body kvůli vysokému provozu a snížila latenci nebo zpoždění procesoru. Můžete také zvážit použití vyššího koncového virtuálního počítače, ve kterém je maximální využití procesoru nižší než 70 %.
Dočasné vyčerpání portů Pro řídká nebo sporadická připojení doporučujeme nastavit idleEndpointTimeout vyšší hodnotu. Vlastnost idleEndpointTimeout pomáhá DirectConnectionConfig řídit čas nevyužitých připojení jsou uzavřena. Tím se sníží počet nevyužitých připojení. Ve výchozím nastavení jsou nečinná připojení ke koncovému bodu otevřená po dobu 1 hodiny. Pokud nejsou požadavky na konkrétní koncový bod pro dobu časového limitu nečinnosti koncového bodu, přímý klient zavře všechna připojení k danému koncovému bodu, aby ušetřil prostředky a vstupně-výstupní náklady.
Použití vhodného plánovače (vyhněte se krádeži vláken IO Netty smyčky událostí) Vyhněte se blokování volání: .block(). Celý zásobník volání je asynchronní, aby bylo možné využívat asynchronní vzory rozhraní API a používat odpovídající podprocesy a plánovače.
Koncové časové limity Pokud chcete získat kompletní časové limity, implementujte v sadě Java SDK zásady časového limitu od konce. Další podrobnosti o časových limitech ve službě Azure Cosmos DB najdete tady.
Logika opakování Přechodná chyba je chyba, která má základní příčinu, která se brzy vyřeší sama. Aplikace, které se připojují k databázi, by měly být vytvořené tak, aby očekávaly tyto přechodné chyby. Pokud je chcete zpracovat, implementujte do kódu logiku opakování místo toho, aby je uživatelé zpřístupňuje jako chyby aplikace. Sada SDK má integrovanou logiku pro zpracování těchto přechodných selhání u opakovaných požadavků, jako jsou operace čtení nebo dotazování. Sada SDK se nebude opakovat při zápisech za přechodné chyby, protože zápisy nejsou idempotentní. Sada SDK umožňuje uživatelům konfigurovat logiku opakování pro omezení. Podrobnosti o chybách, které se mají opakovat při návštěvě, najdete tady.
Ukládání do mezipaměti názvy databází nebo kolekcí Načtěte názvy databází a kontejnerů z konfigurace nebo je při spuštění ukážíte do mezipaměti. Volání jako CosmosAsyncDatabase#read() nebo CosmosAsyncContainer#read() budou mít za následek volání metadat do služby, která spotřebovávají limit ru rezervovaných systémem. createDatabaseIfNotExists() pro nastavení databáze by se měla používat pouze jednou. Celkově by se tyto operace měly provádět zřídka.
Paralelní dotazy Sada SDK služby Azure Cosmos DB podporuje paralelní spouštění dotazů, aby se zlepšila latence a propustnost dotazů. Doporučujeme nastavit maxDegreeOfParallelism vlastnost v rámci CosmosQueryRequestsOptions počtu oddílů, které máte. Pokud nevíte o počtu oddílů, nastavte hodnotu na -1 hodnotu, která vám poskytne nejlepší latenci. Nastavte maxBufferedItemCount také očekávaný počet vrácených výsledků, abyste omezili počet předem načtených výsledků.
Backoffy testování výkonu Při testování aplikace byste měli implementovat backoffy v RetryAfter intervalech. Dodržování zpětného běhu pomáhá zajistit, abyste strávili minimální dobu čekáním mezi opakováními.
Indexování Zásady indexování služby Azure Cosmos DB také umožňují určit, které cesty k dokumentu se mají zahrnout nebo vyloučit z indexování pomocí cest IndexingPolicy#getIncludedPaths() indexování a IndexingPolicy#getExcludedPaths(). Zajistěte, abyste vyloučili nepoužívané cesty z indexování pro rychlejší zápisy. Ukázku vytvoření indexů pomocí sady SDK najdete tady.
Velikost dokumentu Poplatek za požadavek zadané operace koreluje přímo s velikostí dokumentu. Doporučujeme zmenšit velikost dokumentů, protože operace s velkými dokumenty stojí více než operace s menšími dokumenty.
Velikost stránky Ve výchozím nastavení se výsledky dotazu vrátí v blocích po 100 položkách nebo 4 MB, podle toho, jaký limit se dosáhne prvního. Pokud dotaz vrátí více než 100 položek, zvětšete velikost stránky, abyste snížili požadovaný počet odezv. Při nárůstu velikosti stránky se zvýší spotřeba paměti.
Povolení metrik dotazů Další protokolování provádění back-endových dotazů získáte podle pokynů k zachycení metrik dotazů SQL pomocí sady Java SDK.
Protokolování sady SDK Protokolování sady SDK slouží k zachycení dalších diagnostických informací a řešení potíží s latencí. Protokolujte službu CosmosDiagnostics v sadě Java SDK, kde najdete podrobnější diagnostické informace o službě Azure Cosmos DB pro aktuální požadavek. Jako příklad použití zachyťte diagnostiku všech výjimek a dokončených operací, pokud CosmosDiagnostics#getDuration() je větší než určená prahová hodnota (tj. pokud máte smlouvu SLA o 10 sekundách, zaznamenejte diagnostiku při getDuration()> 10 sekundách). Doporučuje se používat tyto diagnostiky pouze během testování výkonnosti. Další informace najdete v diagnostice zachycení sady Java SDK.
Nepoužívejte žádné speciální znaky v identifikátorech. Některé znaky jsou omezené a nelze je použít v některých identifikátorech: /, \, ?, #. Obecné doporučení je nepoužívat žádné speciální znaky v identifikátorech, jako je název databáze, název kolekce, ID položky nebo klíč oddílu, aby nedocházelo k neočekávanému chování.

Osvědčené postupy při používání režimu brány

Požadavky služby Azure Cosmos DB se provádějí přes PROTOKOL HTTPS/REST při použití režimu brány. Podléhají výchozímu limitu připojení na název hostitele nebo IP adresu. Možná budete muset upravit max Připojení ionPoolSize na jinou hodnotu (od 100 do 1 000), aby klientská knihovna mohla používat více souběžných připojení ke službě Azure Cosmos DB. V sadě Java SDK v4 je výchozí hodnota GatewayConnectionConfig#maxConnectionPoolSize 1000. Pokud chcete hodnotu změnit, můžete ji nastavit GatewayConnectionConfig#maxConnectionPoolSize na jinou hodnotu.

Osvědčené postupy pro úlohy náročné na zápis

U úloh, které mají velké objemy datových částí, nastavte CosmosClientBuilder#contentResponseOnWriteEnabled() možnost požadavku na falsehodnotu . Služba už nebude do sady SDK vracet vytvořený nebo aktualizovaný prostředek. Za normálních okolností, protože aplikace má vytvořený objekt, nepotřebuje službu k vrácení. Hodnoty hlaviček jsou stále přístupné, například poplatky za požadavek. Zakázání odpovědi na obsah může přispět ke zlepšení výkonu, protože sada SDK už nemusí přidělovat paměť nebo serializovat tělo odpovědi. Snižuje také využití šířky pásma sítě, aby se dále pomohl výkon.

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.