Úvod do zřízené propustnosti ve službě Azure Cosmos DB

PLATÍ PRO: NoSQL MongoDB Cassandra Gremlin Tabulka

Azure Cosmos DB umožňuje nastavit zřízenou propustnost pro databáze a kontejnery. Existují dva typy zřízené propustnosti, standardní (ruční) nebo automatické škálování. Tento článek obsahuje přehled toho, jak zřízená propustnost funguje.

Databáze Azure Cosmos DB je jednotka správy pro sadu kontejnerů. Databáze se skládá ze sady kontejnerů nezávislých na schématu. Kontejner Azure Cosmos DB je jednotka škálovatelnosti pro propustnost i úložiště. Kontejner je horizontálně rozdělený mezi sadu počítačů v rámci oblasti Azure a distribuuje se napříč všemi oblastmi Azure přidruženými k vašemu účtu služby Azure Cosmos DB.

Se službou Azure Cosmos DB můžete zřídit propustnost na dvou úrovních:

  • Kontejnery Azure Cosmos DB
  • Databáze Azure Cosmos DB

Nastavení propustnosti v kontejneru

Propustnost zřízená v kontejneru Azure Cosmos DB je pro tento kontejner vyhrazena výhradně. Kontejner obdrží zřízenou propustnost po celou dobu. Zřízená propustnost kontejneru je finančně zajištěná smlouvami SLA. Informace o konfiguraci standardní (ruční) propustnosti v kontejneru najdete v tématu Zřízení propustnosti v kontejneru Azure Cosmos DB. Informace o konfiguraci propustnosti automatického škálování v kontejneru najdete v tématu Zřízení propustnosti automatického škálování.

Nastavení zřízené propustnosti v kontejneru je nejčastěji používanou možností. Propustnost kontejneru můžete elasticky škálovat zřízením libovolné propustnosti pomocí jednotek žádostí (RU).

Propustnost zřízená pro kontejner se rovnoměrně distribuuje mezi jeho fyzické oddíly a za předpokladu, že dobrý klíč oddílu distribuuje logické oddíly rovnoměrně mezi fyzické oddíly, propustnost se také rovnoměrně distribuuje napříč všemi logickými oddíly kontejneru. Propustnost pro logické oddíly není možné selektivně zadat. Vzhledem k tomu, že jeden nebo více logických oddílů kontejneru hostuje fyzický oddíl, fyzické oddíly patří výhradně do kontejneru a podporují propustnost zřízenou v kontejneru.

Pokud úloha spuštěná v logickém oddílu spotřebovává více než propustnost přidělenou základnímu fyzickému oddílu, je možné, že vaše operace budou omezené rychlostí. To, co se označuje jako horký oddíl , nastane v případě, že jeden logický oddíl má nepřiměřeně více požadavků než jiné hodnoty klíče oddílu.

Pokud dojde k omezování rychlosti, můžete buď zvýšit zřízenou propustnost pro celý kontejner, nebo zkusit operace zopakovat. Měli byste také zajistit, abyste zvolili klíč oddílu, který rovnoměrně distribuuje úložiště a svazek požadavků. Další informace o dělení najdete v tématu Dělení a horizontální škálování ve službě Azure Cosmos DB.

Pokud chcete předvídatelný výkon kontejneru, doporučujeme nakonfigurovat propustnost v členitosti kontejneru.

Následující obrázek ukazuje, jak fyzický oddíl hostuje jeden nebo více logických oddílů kontejneru:

Physical partition that hosts one or more logical partitions of a container

Nastavení propustnosti databáze

Při zřizování propustnosti pro databázi Azure Cosmos DB se propustnost sdílí napříč všemi kontejnery (označované jako sdílené databázové kontejnery) v databázi. Výjimkou je, pokud některým kontejnerům v databázi nastavíte zřízenou propustnost. Sdílení zřízené propustnosti na úrovni databáze mezi kontejnery je podobné hostování databáze v clusteru počítačů. Vzhledem k tomu, že všechny kontejnery v databázi sdílejí prostředky dostupné na počítači, přirozeně nezískáte předvídatelný výkon u žádného konkrétního kontejneru. Informace o konfiguraci zřízené propustnosti pro databázi najdete v tématu Konfigurace zřízené propustnosti v databázi Azure Cosmos DB. Informace o konfiguraci propustnosti automatického škálování v databázi najdete v tématu Zřízení propustnosti automatického škálování.

Vzhledem k tomu, že všechny kontejnery v rámci databáze sdílejí zřízenou propustnost, azure Cosmos DB neposkytuje žádné záruky předvídatelné propustnosti pro konkrétní kontejner v této databázi. Část propustnosti, kterou může konkrétní kontejner přijímat, závisí na:

  • Počet kontejnerů.
  • Volba klíčů oddílů pro různé kontejnery.
  • Distribuce úlohy napříč různými logickými oddíly kontejnerů

Propustnost pro databázi doporučujeme nakonfigurovat, když chcete sdílet propustnost mezi více kontejnery, ale nechcete vyhradit propustnost žádnému konkrétnímu kontejneru.

Následující příklady ukazují, kde je vhodnější zřídit propustnost na úrovni databáze:

  • Sdílení zřízené propustnosti databáze napříč sadou kontejnerů je užitečné pro víceklientskou aplikaci. Každý uživatel může být reprezentován jedinečným kontejnerem Azure Cosmos DB.

  • Sdílení zřízené propustnosti databáze napříč sadou kontejnerů je užitečné při migraci databáze NoSQL, jako je MongoDB nebo Cassandra, hostované v clusteru virtuálních počítačů nebo z místních fyzických serverů do Azure Cosmos DB. Zřízenou propustnost nakonfigurovanou pro databázi Azure Cosmos DB si můžete představit jako logický ekvivalent, ale nákladově efektivnější a elastický přístup k výpočetní kapacitě vašeho clusteru MongoDB nebo Cassandra.

Všechny kontejnery vytvořené v databázi se zřízenou propustností musí být vytvořeny pomocí klíče oddílu. V libovolném časovém okamžiku se propustnost přidělená kontejneru v databázi distribuuje napříč všemi logickými oddíly tohoto kontejneru. Pokud máte kontejnery, které sdílejí zřízenou propustnost nakonfigurovanou pro databázi, nemůžete selektivně použít propustnost na konkrétní kontejner nebo logický oddíl.

Pokud úloha v logickém oddílu spotřebovává více než propustnost přidělenou konkrétnímu logickému oddílu, jsou operace omezené rychlostí. Pokud dojde k omezování rychlosti, můžete buď zvýšit propustnost celé databáze, nebo zkusit operaci zopakovat. Další informace o dělení najdete v tématu Logické oddíly.

Kontejnery v databázi se sdílenou propustností sdílí propustnost (RU/s) přidělenou dané databázi. Se standardní (ruční) zřízenou propustností můžete mít v databázi až 25 kontejnerů s minimálně 400 RU/s. Se zřízenou propustností automatického škálování můžete mít v databázi až 25 kontejnerů s minimálním automatickým škálováním 1 000 RU/s (škáluje se mezi 100 až 1 000 RU/s).

Poznámka:

V únoru 2020 jsme zavedli změnu, v důsledku které můžete mít v databázi se sdílenou propustností maximálně 25 kontejnerů, což umožňuje lepší sdílení propustnosti mezi kontejnery. Po prvních 25 kontejnerech můžete do databáze přidat další kontejnery pouze v případě, že jsou zřízené s vyhrazenou propustností, která je oddělená od sdílené propustnosti databáze.
Pokud váš účet Služby Azure Cosmos DB už obsahuje databázi se sdílenou propustností s >kontejnery =25, účet a všechny ostatní účty ve stejném předplatném Azure jsou z této změny vyloučené. Pokud máte zpětnou vazbu nebo dotazy, kontaktujte prosím podporu produktů.

Pokud vaše úlohy zahrnují odstranění a opětovné vytvoření všech kolekcí v databázi, doporučujeme před vytvořením kolekce odstranit prázdnou databázi a znovu vytvořit novou databázi. Následující obrázek ukazuje, jak fyzický oddíl může hostovat jeden nebo více logických oddílů, které patří do různých kontejnerů v databázi:

Physical partition that hosts one or more logical partitions that belong to different containers

Nastavení propustnosti pro databázi a kontejner

Tyto dva modely můžete kombinovat. Zřízení propustnosti pro databázi i kontejner je povolené. Následující příklad ukazuje, jak zřídit standardní (ruční) zřízenou propustnost pro databázi Azure Cosmos DB a kontejner:

  • Můžete vytvořit databázi Azure Cosmos DB s názvem Z se standardní (ruční) zřízenou propustností ru "K".

  • Dále v databázi vytvořte pět kontejnerů s názvem A, B, C, D a E . Při vytváření kontejneru B nezapomeňte pro tuto možnost kontejneru povolit zřízení vyhrazené propustnosti a explicitně nakonfigurovat jednotky RU zřízené propustnosti pro tento kontejner. Sdílenou a vyhrazenou propustnost můžete nakonfigurovat pouze při vytváření databáze a kontejneru.

    Setting the throughput at the container-level

  • Propustnost RU/s "K" se sdílí napříč čtyřmi kontejnery A, C, D a E. Přesné množství propustnosti dostupné pro A, C, D nebo E se liší. Pro propustnost jednotlivých kontejnerů neexistují žádné smlouvy SLA.

  • Kontejner s názvem B zaručuje, že bude mít propustnost P/s po celou dobu. Jsou podporovány smlouvami SLA.

Poznámka:

Kontejner se zřízenou propustností nelze převést na kontejner sdílené databáze. Naopak sdílený kontejner databáze nelze převést na vyhrazenou propustnost. Data budete muset přesunout do kontejneru s požadovaným nastavením propustnosti. (S tímto procesem pomáhají úlohy kopírování kontejnerů pro rozhraní API NoSQL, MongoDB a Cassandra.)

Aktualizace propustnosti v databázi nebo kontejneru

Po vytvoření kontejneru nebo databáze Azure Cosmos DB můžete zřízenou propustnost aktualizovat. Maximální zřízená propustnost, kterou můžete nakonfigurovat v databázi nebo kontejneru, není nijak omezena.

Aktuální zřízená propustnost

Zřízenou propustnost kontejneru nebo databáze můžete načíst na webu Azure Portal nebo pomocí sad SDK:

Odpověď těchto metod obsahuje také minimální zřízenou propustnost kontejneru nebo databáze:

Skutečné minimum RU/s se může lišit v závislosti na konfiguraci vašeho účtu. Další informace najdete v nejčastějších dotazech k automatickému škálování.

Změna zřízené propustnosti

Zřízenou propustnost kontejneru nebo databáze můžete škálovat prostřednictvím webu Azure Portal nebo pomocí sad SDK:

Pokud snižujete zřízenou propustnost, budete ji moct provést až na minimum.

Pokud zvyšujete zřízenou propustnost, ve většině případů je operace okamžitá. Existují však případy, kdy operace může trvat delší dobu, protože systémové úlohy zřizují požadované prostředky. V tomto případě se pokus o úpravu zřízené propustnosti, zatímco tato operace právě probíhá, vrátí odpověď HTTP 423 s chybovou zprávou s vysvětlením, že probíhá jiná operace škálování.

Další informace najdete v článku o osvědčených postupech škálování zřízené propustnosti (RU/s).

Poznámka:

Pokud plánujete velmi velkou úlohu příjmu dat, která bude vyžadovat velký nárůst zřízené propustnosti, mějte na paměti, že operace škálování nemá žádnou smlouvu SLA a jak je uvedeno v předchozím odstavci, může trvat dlouhou dobu, když je zvýšení velké. Možná budete chtít naplánovat škálování před zahájením úlohy a pomocí následujících metod zkontrolovat průběh.

Průběh škálování můžete zkontrolovat prostřednictvím kódu programu tak, že si přečtete aktuální zřízenou propustnost a použijete:

Metriky služby Azure Monitor můžete použít k zobrazení historie zřízené propustnosti (RU/s) a úložiště v prostředku.

Porovnání modelů

Tato tabulka ukazuje porovnání standardní (ruční) propustnosti u databáze a kontejneru.

Parametr Standardní (ruční) propustnost databáze Standardní (ruční) propustnost kontejneru Automatické škálování propustnosti v databázi Automatické škálování propustnosti v kontejneru
Vstupní bod (minimální počet RU/s) 400 RU/s. Může mít až 25 kontejnerů bez minimálního počtu RU/s na kontejner. 400 Automatické škálování mezi 100 až 1000 RU/s. Může mít až 25 kontejnerů bez minimálního počtu RU/s na kontejner. Automatické škálování mezi 100 až 1000 RU/s.
Minimální počet RU/s na kontejner -- 400 -- Automatické škálování mezi 100 až 1000 RU/s
Maximální počet RU Neomezené, v databázi. Neomezené, v kontejneru. Neomezené, v databázi. Neomezené, v kontejneru.
Ru přiřazené nebo dostupné konkrétnímu kontejneru Žádné záruky. Ru přiřazené k danému kontejneru závisí na vlastnostech. Vlastnosti můžou být volba klíčů oddílů kontejnerů, které sdílejí propustnost, distribuci úlohy a počet kontejnerů. Všechny RU nakonfigurované v kontejneru jsou vyhrazené výhradně pro kontejner. Žádné záruky. Ru přiřazené k danému kontejneru závisí na vlastnostech. Vlastnosti můžou být volba klíčů oddílů kontejnerů, které sdílejí propustnost, distribuci úlohy a počet kontejnerů. Všechny RU nakonfigurované v kontejneru jsou vyhrazené výhradně pro kontejner.
Maximální úložiště pro kontejner Neomezené. Bez omezení Bez omezení Bez omezení
Maximální propustnost na logický oddíl kontejneru 10 TISÍC RU/s 10 TISÍC RU/s 10 TISÍC RU/s 10 TISÍC RU/s
Maximální velikost úložiště (data + index) na logický oddíl kontejneru 20 GB 20 GB 20 GB 20 GB

Další kroky