Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
To, jak se klient připojuje ke službě Azure Cosmos DB, má významný dopad na výkon, zejména pro pozorovanou latenci na straně klienta. Azure Cosmos DB nabízí jednoduchý a otevřený programovací model RESTful přes HTTPS označovaný jako režim brány . Kromě toho nabízí efektivní protokol TCP, který je také RESTful ve svém komunikačním modelu a používá protokol TLS pro počáteční ověřování a šifrování provozu, označovaný jako přímý režim.
Dostupné režimy připojení
Mezi dva dostupné režimy připojení patří:
Režim Gateway
Režim brány se podporuje na všech platformách sady SDK. Pokud vaše aplikace běží v podnikové síti s přísnými omezeními brány firewall, je nejlepší volbou režim brány, protože používá standardní port HTTPS a jeden koncový bod DNS. Kompromis ve výkonu spočívá v tom, že režim brány zahrnuje další síťový hop při každém čtení dat nebo zápisu dat do služby Azure Cosmos DB. Režim připojení brány také doporučujeme, když spouštíte aplikace v prostředích s omezeným počtem připojení soketů.
Při použití sady SDK ve službě Azure Functions, zejména v plánu Consumption, mějte na paměti aktuální limity připojení.
Přímý režim
Přímý režim podporuje připojení prostřednictvím protokolu TCP, pomocí TLS pro počáteční autentizaci a šifrování provozu, a nabízí lepší výkon, protože existuje méně síťových skoků. Aplikace se připojuje přímo k backendovým replikám. Přímý režim je aktuálně podporován pouze na platformách .NET a Java SDK.
Tyto režimy připojení v zásadě ovlivňují trasu, kterou požadavky na rovinu dat (čtení a zápisy dokumentů) volí z vašeho klientského počítače k partiím v systému backendu Azure Cosmos DB. Přímý režim je upřednostňovanou možností pro nejlepší výkon; umožňuje klientovi otevírat připojení TCP přímo k oddílům v back-endu služby Azure Cosmos DB a odesílat požadavky přímobez zprostředkujícího. Naproti tomu v režimu brány jsou požadavky provedené klientem směrovány na tzv. Gateway server ve front-endu Azure Cosmos DB, který následně rozděluje tyto požadavky na příslušné oddíly v back-endu Azure Cosmos DB.
Rozsahy služebních portů
Pokud používáte přímý režim, musíte zajistit, aby váš klient mohl přistupovat k portům v rozsahu 1 0000 až 20000, protože Azure Cosmos DB používá dynamické porty TCP. K portům brány je to navíc. Při použití přímého režimu na privátních koncových bodech může Azure Cosmos DB používat úplný rozsah portů TCP od 0 do 65535. Pokud tyto porty nejsou v klientovi otevřené a pokusíte se použít protokol TCP, může se zobrazit chyba 503 Služba není k dispozici.
Následující tabulka obsahuje souhrn režimů připojení dostupných pro různá rozhraní API a porty služby používané pro každé rozhraní API:
| Režim připojení | Podporovaný protokol | Podporované sady SDK | Port rozhraní API nebo služby |
|---|---|---|---|
| Gateway | HTTPS | Všechny sady SDK | SQL (443), MongoDB (10255), tabulka (443), Cassandra (10350), graf (443) |
| Přímo | TCP (šifrované přes TLS) | Sada .NET SDK Java SDK | Při použití veřejných koncových bodů nebo koncových bodů služby: porty v rozsahu od 10000 do 20000 Při použití privátních koncových bodů: porty v rozsahu od 0 do 65535 |
Architektura připojení s přímým režimem
Jak je podrobně popsáno v úvodu, klienti přímého režimu se připojují přímo k back-endovým uzlům prostřednictvím protokolu TCP. Každý backendový uzel představuje repliku v sadě replik, která patří do fyzického oddílu.
Směrování
Když sada SDK služby Azure Cosmos DB v přímém režimu provádí operaci, musí vyřešit, ke které back-endové replice se má připojit. Prvním krokem je znalost fyzického oddílu, na který má operace přejít, a za tímto účelem sada SDK získá informace o kontejneru, které zahrnují definici klíče oddílu z uzlu brány. Potřebuje také informace o směrování, které obsahují adresy TCP replik. Informace o směrování jsou k dispozici také z uzlů brány a obě jsou považovány za metadata řídicí roviny. Jakmile sada SDK získá informace o směrování, může pokračovat otevřením připojení TCP k replikám patřícím do cílového fyzického oddílu a spustit operace.
Každá sada replik obsahuje jednu primární repliku a tři sekundární soubory. Operace zápisu se vždy směrují na uzly primární repliky, zatímco operace čtení se dají obsluhovat z primárních nebo sekundárních uzlů.
Vzhledem k tomu, že se informace o kontejneru a směrování často nemění, jsou uloženy místně v mezipaměti sad SDK, aby následné operace mohly tyto informace využívat. Už vytvořená připojení TCP se také znovu používají napříč operacemi. Pokud nejsou prostřednictvím možností sad SDK nakonfigurovaná jinak, připojení se během životnosti instance sady SDK trvale udržují.
Stejně jako u jakékoli distribuované architektury můžou počítače, které uchovávají repliky, procházet upgrady nebo údržbou. Služba zajišťuje, aby sada replik zachovala konzistenci, ale všechny přesuny replik by způsobily, že se stávající adresy TCP změní. V těchto případech musí sady SDK aktualizovat informace o směrování a znovu se připojit k novým adresám prostřednictvím nových požadavků brány. Tyto události by neměly mít vliv na celkovou smlouvu SLA P99.
Objem připojení
Každý fyzický oddíl má sadu replik se čtyřmi replikami, aby poskytovaly nejlepší možný výkon, sady SDK nakonec otevírají připojení ke všem replikám pro úlohy, které kombinují operace zápisu a čtení. Souběžné operace jsou vyrovnávány mezi existujícími připojeními, aby se využila propustnost, kterou poskytuje každá replika.
Existují dva faktory, které určují počet připojení TCP, která sada SDK otevře:
Počet fyzických oddílů
V stabilním stavu má sada SDK jedno připojení na repliku na fyzický oddíl. Čím větší je počet fyzických oddílů v kontejneru, tím větší bude i počet otevřených spojení. Vzhledem k tomu, že se operace směrují napříč různými oddíly, navazují se připojení na vyžádání. Průměrný počet připojení by byl počet fyzických oddílů vynásobený čtyřmi.
Objem souběžných požadavků
Každé navázané připojení může obsluhovat konfigurovatelný počet souběžných operací. Pokud objem souběžných operací tuto prahovou hodnotu překročí, mohou je nová připojení obsluhovat a je možné, že pro fyzickou partition počet otevřených připojení překročí počet odpovídající stabilnímu stavu. Toto chování se očekává u úloh, které můžou mít špičky v objemu operací. Pro sadu .NET SDK je tato konfigurace nastavena maxRequestsPerTcpConnection a pro sadu Java SDK můžete přizpůsobit pomocí třídy DirectConnectionConfig.
Ve výchozím nastavení jsou připojení trvale udržována, aby těží z výkonu budoucích operací (otevření připojení má výpočetní režii). Můžou se zde vyskytovat situace, kdy možná budete chtít zavřít připojení, která se po nějakou dobu nevyužívají, abyste pochopili, že to může mít vliv na budoucí operace mírně. Pro sadu .NET SDK je tato konfigurace nastavená pomocí IdleTcpConnectionTimeout a pro sadu Java SDK můžete přizpůsobit pomocí třídy DirectConnectionConfig. Nedoporučujeme nastavit tyto konfigurace na nízké hodnoty, protože může způsobit časté zavření připojení a ovlivnit celkový výkon.
Podrobnosti implementace specifické pro konkrétní jazyk
Podrobnosti o implementaci týkající se jazyka najdete tady:
Další kroky
Pro konkrétní optimalizace výkonu platformy SDK:
- Tipy pro zvýšení výkonu sady .NET SDK V2
- Tipy pro zvýšení výkonu sady .NET SDK V3
- Tipy pro zvýšení výkonu sady Java V4 SDK
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.
- Pokud znáte počet virtuálních jader a serverů v existujícím databázovém clusteru, přečtěte si o odhadu jednotek žádostí pomocí virtuálních jader nebo virtuálních procesorů.
- Pokud znáte typické sazby požadavků pro aktuální úlohu databáze, přečtěte si o odhadu jednotek žádostí pomocí plánovače kapacity služby Azure Cosmos DB.