Přehled dobře architektuře Azure – Azure Cosmos DB for NoSQL

Tento článek popisuje osvědčené postupy pro Azure Cosmos DB for NoSQL. Tyto osvědčené postupy zajišťují nasazení řešení ve službě Azure Cosmos DB, která jsou efektivní, spolehlivá, zabezpečená, optimalizovaná pro náklady a zprovozněná. Tyto pokyny se zaměřují na pět pilířů efektivity architektury v architektuře:

Tato příručka pro kontrolu předpokládá, že máte funkční znalosti služby Azure Cosmos DB a jsou dobře obeznámeni s jeho funkcemi. Další informace najdete v tématu Azure Cosmos DB for NoSQL.

Požadavky

Pochopení pilířů Dobře navržená architektura může pomoct vytvořit vysoce kvalitní, stabilní a efektivní cloudovou architekturu. Doporučujeme začít kontrolou úloh pomocí posouzení posouzení architektury Azure Well-Architected Framework.

Další kontext najdete v různých referenčních architekturách, které odrážejí aspekty tohoto průvodce v jejich návrhu. Mezi tyto architektury patří:

Spolehlivost

Stejně jako u jakékoli cloudové služby může na straně služby i úlohy dojít k selháním. Není možné zabránit všem potenciálním selháním, ale je lepším cílem minimalizovat účinky, které může mít jedna neúspěšná komponenta na celou úlohu. Tato část obsahuje důležité informace a doporučení pro minimalizaci důsledků jednorázového selhání.

Kontrolní seznam návrhu

  • Zvažte, jak vybraný režim konzistence a režimu replikace ovlivňuje cíl bodu obnovení (RPO) v výpadku v celé oblasti.
  • Navrhněte nasazení databázového účtu tak, aby se v Azure rozprostírá nejméně ve dvou oblastech. Kromě toho distribuujte svůj účet napříč několika zónami dostupnosti, když se nabízí v rámci vaší oblasti Azure.
  • Vyhodnoťte strategie zápisu do více oblastí a jedné oblasti pro vaši úlohu. Pro zápis do jedné oblasti navrhněte úlohu tak, aby měla alespoň druhou oblast čtení pro převzetí služeb při selhání. Povolte automatické převzetí služeb při selhání pro scénáře zápisu do jedné oblasti a čtení ve více oblastech. U zápisu do více oblastí porovnejte kompromisy v složitosti a konzistenci proti výhodám zápisu do více oblastí. Zkontrolujte očekávání během regionálního výpadku účtů pro zápis do jedné oblasti a účtů pro zápis do více oblastí.
  • Povolte převzetí služeb při selhání spravované službou pro váš účet.
  • Navrhněte komplexní test vysoké dostupnosti pro vaši aplikaci.
  • Projděte si běžné procesy zálohování, včetně obnovení k určitému bodu v čase, obnovení z náhodných destruktivních operací, obnovení odstraněných prostředků a obnovení do jiné oblasti k určitému bodu v čase. Nakonfigurujte účet s průběžným zálohováním a zvolte odpovídající dobu uchovávání na základě vašich obchodních požadavků.
  • Prozkoumejte průvodce návrhem odolných aplikací, zkontrolujte výchozí zásady opakování sad SDK a naplánujte vlastní zpracování konkrétních přechodných chyb. Tyto příručky poskytují osvědčené postupy, které zajistí odolnost kódu aplikace vůči přechodným chybám.

Doporučení

Doporučení Výhoda
Distribuujte svůj účet služby Azure Cosmos DB mezi zóny dostupnosti (pokud je k dispozici). Zóny dostupnosti poskytují jedinečné napájení, sítě a chlazení, které izolují selhání hardwaru podmnožině replik. Azure Cosmos DB má více replik, které se nachází v jedné náhodné zóně dostupnosti, když se nepoužívá funkce zón dostupnosti. Pokud se používá funkce zóny dostupnosti, repliky se rozprostírá napříč několika zónami dostupnosti.
Nakonfigurujte účet služby Azure Cosmos DB tak, aby pokrývá alespoň dvě oblasti. Pokud dojde k výpadku izolované oblasti, zabráníte tomu, aby byl váš účet zcela nedostupný.
Povolte převzetí služeb při selhání spravované službou pro váš účet. Převzetí služeb při selhání spravované službou umožňuje službě Azure Cosmos DB změnit oblast zápisu účtu s více oblastmi, aby zachovala dostupnost. K této změně dochází bez zásahu uživatele. Seznamte se s kompromisy při převzetí služeb při selhání spravované službou a v případě potřeby naplánujte vynucené převzetí služeb při selhání. Další informace najdete v tématu vytváření vysoce dostupných aplikací.
Ověřte dostupnost ručním testováním převzetí služeb při selhání pomocí dočasného zakázaného převzetí služeb při selhání spravovaného službou. Dočasné zakázání převzetí služeb při selhání správy služeb vám umožní ověřit komplexní vysokou dostupnost aplikace pomocí ručního převzetí služeb při selhání, které se spustí pomocí skriptu nebo webu Azure Portal. Potom můžete znovu použít převzetí služeb při selhání spravované službou.

Definice zásad Azure

Zabezpečení

Zabezpečení je důležitou součástí jakékoli architektury, kterou je možné snadno přehlédnout pro usnadnění. Před vytvořením prvního prostředku nebo testování konceptu zlepšujte zabezpečení konečné úlohy tím, že zvažte různé osvědčené postupy zabezpečení předem. Tato část obsahuje důležité informace a doporučení ke snížení počtu ohrožení zabezpečení pro konečnou úlohu.

Kontrolní seznam návrhu

Doporučení

Doporučení Výhoda
Implementujte aspoň standardní hodnoty zabezpečení ochrany dat a správy identit. Projděte si standardní hodnoty zabezpečení, včetně správy identit a ochrany dat. Implementujte doporučení pro zabezpečení účtu služby Azure Cosmos DB.
Zakažte veřejné koncové body a používejte privátní koncové body, kdykoli je to možné. Vyhněte se nepotřebným nebo nepoužitým veřejným koncovým bodům dostupným pro útoky na surface area na váš účet.
Řízení přístupu na základě role slouží k omezení přístupu roviny řízení na konkrétní identity a skupiny a v rámci rozsahu dobře definovaných přiřazení. Pomocí řízení přístupu na základě role můžete zabránit neúmyslnému přístupu k vašemu účtu. Přiřaďte uživatelům nebo aplikacím, kteří přistupují ke službě Azure Cosmos DB, příslušné role a oprávnění.
Vytvořte koncové body a pravidla virtuální sítě pro omezení přístupu k účtu. Implementujte koncové body služby virtuální sítě a pravidla brány firewall, abyste omezili přístup k vašemu účtu služby Azure Cosmos DB. Skupiny zabezpečení sítě (NSG) slouží k řízení příchozího a odchozího provozu do a z prostředků Azure Cosmos DB. Omezení přístupu k důvěryhodným sítím a použití vhodných bezpečnostních opatření sítě pomáhá chránit vaše data před neoprávněným přístupem.
Dodržujte osvědčené postupy vývoje softwaru pro zabezpečený přístup k datům. Při vývoji aplikací, které pracují se službou Azure Cosmos DB, dodržujte postupy zabezpečeného kódování a proveďte bezpečné kontroly kódu. Chraňte se před běžnými ohroženími zabezpečení, jako jsou útoky prostřednictvím injektáže, skriptování mezi weby (XSS) nebo nezabezpečené přímé odkazy na objekty (IDOR). Implementujte ověřování vstupu, parametrizované dotazy a odpovídající zpracování chyb pro běžné stavové kódy HTTP, abyste zabránili rizikům zabezpečení.
Monitorování porušení zabezpečení v protokolech roviny řízení Monitorování pomáhá sledovat vzory přístupu a protokoly auditu a zajistit, aby vaše databáze zůstala zabezpečená a vyhovující příslušným předpisům ochrany dat. Monitorování metrik roviny dat může také pomoct identifikovat neznámé vzory, které by mohly odhalit narušení zabezpečení. Další informace najdete v kontrolním seznamu zabezpečení pro databáze Azure.
Povolení Microsoft Defenderu pro Azure Cosmos DB Microsoft Defender detekuje pokusy o zneužití databází ve vašem účtu Azure Cosmos DB for NoSQL. Defender detekuje potenciální injektáže SQL, podezřelé vzory přístupu a další potenciální zneužití.

Definice zásad Azure

Optimalizace nákladů

Vlastnosti vaší úlohy a implementace vašeho řešení můžou ovlivnit konečné náklady na provoz v Azure. Při návrhu úlohy zvažte hlavní ovladače, jako je strategie dělení, úroveň konzistence, replikace a typ zápisu. Při určování velikosti úlohy zvažte povahu čtení a zápisu dat, velikost průměrných položek, normalizace a hodnoty TTL. Tato část obsahuje důležité informace a doporučení ke zjednodušení nákladů na vaše úlohy.

  • Navrhněte zásadu indexování, která bere v úvahu operace a dotazy, které v úloze běžně uděláte.
  • Určete klíč oddílu nebo sadu klíčů oddílů, které mají hodnotu s vysokou kardinalitou a nemění se. Použijte existující doprovodné materiály a osvědčené postupy , které vám pomůžou vybrat odpovídající klíč oddílu. Při určování klíče oddílu zvažte také zásady indexování.
  • Vyberte schéma přidělení propustnosti, které je vhodné pro vaši úlohu. Projděte si výhody standardní a automatického škálování propustnosti distribuované na úrovni databáze nebo kontejneru. Zvažte také bezserverové prostředí, pokud je to vhodné. Projděte si vzory provozu vaší úlohy v kontextu výběru schématu přidělování propustnosti.
  • Zvažte úrovně konzistence v souvislosti s vaší úlohou. Zvažte také, jestli by relace klientů měly změnit výchozí úroveň konzistence.
  • Vypočítejte očekávané celkové úložiště dat pro vaši úlohu. Velikost položek a indexů ovlivňují náklady na úložiště dat. Výpočet dopadu replikace a zálohování na náklady na úložiště
  • Vytvořte strategii pro automatické odebrání starších položek, které se už nepoužívají nebo nejsou potřeba. V případě potřeby tyto položky před odebráním exportujte do řešení úložiště s nižšími náklady.
  • Vyhodnoťte nejčastější dotazy, které minimalizují vyhledávání napříč oddíly. Tyto informace slouží k informování procesu výběru klíče oddílu nebo přizpůsobení zásad indexování.

Doporučení

Doporučení Výhoda
Monitorujte využití ru/s a vzory. Pomocí metrik můžete monitorovat spotřebu RU od začátku vašeho řešení. K vyhledání antipatternů v kódu aplikace použijte dotazy a další techniky pro výzkum dat.
Přizpůsobte si zásady indexování tak, aby se mapují na vaši úlohu. Výchozí indexování zásad indexuje všechny cesty v položce a tato zásada může mít významný dopad na spotřebu RU a náklady. Použijte zásadu indexování navrženou jenom na základě cest, které potřebujete indexovat pro běžné dotazy. U úloh náročných na zápis zakažte automatické indexování sloupců, které se v dotazech nepoužívají.
Vyberte klíče oddílů, které jsou ideální pro vaši úlohu. Klíč oddílu by měl rovnoměrně distribuovat spotřebu propustnosti a úložiště dat napříč logickými oddíly. Výběr by měl také minimalizovat počet nevázaných dotazů napříč oddíly. Vyhněte se horkým oddílům, které přijímají nepřiměřený objem provozu, protože nevyvážené oddíly můžou zvýšit náklady na propustnost a přechodné chyby. Pomocí nejběžnějších vyhledávacích dotazů můžete určit potenciální klíč oddílu, který pravděpodobně spouští pouze dotazy s jedním oddílem nebo ohraničenými dotazy napříč oddíly.
Pokud je to vhodné pro vaši úlohu, používejte bezserverovou nebo zřízenou propustnost, ruční zřizování nebo automatické škálování na úrovni databáze nebo kontejneru. Porovnejte typy zřízené propustnosti a vyberte odpovídající možnost pro vaši úlohu. Obecně platí, že menší a vývojové/testovací úlohy můžou být přínosné z propustnosti bez serveru nebo ruční sdílené propustnosti na úrovni databáze. Větší důležité úlohy můžou těžit ze zřízené propustnosti přiřazené na úrovni kontejneru.
Nakonfigurujte výchozí úroveň konzistence pro vaši aplikaci. V případě potřeby downgrade výchozí úroveň konzistence v relacích klienta. Nemusí být vždy nutné změnit standardní výchozí úroveň konzistence nebo ji přepsat v klientských relacích. Vezměte v úvahu vyšší náklady spojené se čtením na silnějších úrovních konzistence.
Pro úlohy vývoje a testování použijte emulátor služby Azure Cosmos DB. Emulátor služby Azure Cosmos DB je možnost pro vývoj/testování a kontinuální integraci, která může ušetřit náklady na tyto běžné úlohy pro vývojový tým. Emulátor je také k dispozici jako image kontejneru Dockeru.
Použití transakčních dávkových operací Navrhněte oddíly tak, aby využívaly transakční dávkové operace v rámci klíče logického oddílu pro vložení. Dávkové operace v sadě SDK na straně klienta slouží k vkládání, aktualizaci nebo odstraňování více dokumentů v rámci jednoho požadavku na transakci. Tento krok může snížit počet jednotlivých požadavků a nakonec může vést k lepší efektivitě propustnosti.
Pomocí projekce můžete snížit náklady na propustnost velkých sad výsledků dotazů. Vytváření dotazů pouze na projektování minimálního počtu polí požadovaných ze sady výsledků Pokud jsou výpočty polí nezbytné, vyhodnoťte náklady na propustnost provádění těchto výpočtů na straně serveru a na straně klienta.
Nepoužívejte nevázané dotazy napříč oddíly. Vyhodnoťte a vytvořte dotazy, abyste zajistili, že prohledávají v rámci jednoho logického oddílu, kdykoli je to možné. Pomocí filtrů dotazů můžete určit, které logické oddíly cílí dotazu. Pokud dotaz musí prohledávat logické oddíly, vázaný dotaz pouze na podmnožinu logických oddílů místo úplné kontroly.
Implementujte hodnotu TTL (time-to-live) pro odebrání nepoužívaných položek. Pomocí hodnoty TTL můžete automaticky odstranit data, která už nepotřebujete. Správa nákladů na úložiště odebráním zastaralých nebo zastaralých dat V případě potřeby exportujte data s vypršenou platností do řešení úložiště s nižšími náklady.
Zvažte analytické úložiště pro náročné agregace. Analytické úložiště Azure Cosmos DB automaticky synchronizuje vaše data do samostatného úložiště sloupců, aby se optimalizovaly pro velké agregace, vytváření sestav a analytické dotazy.

Definice zásad Azure

Provozní dokonalost

Po nasazení musí být úlohy monitorovány, aby se zajistilo, že fungují podle očekávání. Monitorování úloh navíc může pomoct uvolnit nové efektivity, které nejsou okamžitě zřejmé během fáze plánování. V katastrofických scénářích jsou diagnostická data klíčem k odhalení toho, proč mohlo dojít k incidentu s vysokou závažností. Tato část obsahuje důležité informace a doporučení k monitorování událostí a charakteristik vašich úloh.

Kontrolní seznam návrhu

  • Vytvořte strategii monitorování protokolů a metrik pro rozlišení různých úloh, označení výjimečných scénářů, sledování vzorů v výjimkách/chybách a sledování výkonu hostitelského počítače.
  • Navrhujte velké úlohy tak, aby používaly hromadné operace, kdykoli je to možné.
  • Definujte několik upozornění pro monitorování omezování, analýzu přidělení propustnosti a sledování velikosti dat.
  • Navrhněte strategii monitorování pro dostupnost vašeho řešení napříč oblastmi.
  • Vytvořte a vynucujte osvědčené postupy pro automatizaci nasazení účtu a prostředků Azure Cosmos DB for NoSQL.
  • Plánování očekávaných prahových hodnot metrik na základě návrhu oddílů a indexů Ujistěte se, že máte plán monitorovat tyto metriky, abyste zjistili, jak blízko jsou plánované prahové hodnoty.

Doporučení

Doporučení Výhoda
Ujistěte se, že vývojáři aplikací používají nejnovější verzi sady SDK pro vývojáře. Každá sada Azure Cosmos DB for NoSQL SDK má minimální doporučenou verzi. Další informace naleznete v tématu .NET SDK a Java SDK.
Vytvořte v klientské aplikaci identifikátory pro rozlišení úloh. Zvažte příznaky, jako je přípona uživatelského agenta, a určete, k jaké úloze by měly být přidružené jednotlivé položky protokolu nebo metriky.
Zachyťte doplňkovou diagnostiku pomocí sady SDK pro vývojáře. Pomocí technik injektáže diagnostiky pro každou sadu SDK přidejte dodatečné informace o úloze spolu s výchozími metrikami a protokoly. Další informace naleznete v tématu .NET SDK a Java SDK.
Vytvořte upozornění přidružená k prostředkům hostitelského počítače. Připojení problémy s dostupností a dostupností můžou nastat kvůli problémům s hostitelským počítačem na straně klienta. Monitorujte prostředky, jako je procesor, paměť a úložiště na hostitelských počítačích, pomocí klientských aplikací pomocí sad SDK Služby Azure Cosmos DB for NoSQL.
Pro velké operace používejte hromadné funkce klientských sad SDK. Scénáře, které vyžadují vysoký stupeň propustnosti, využívají hromadnou funkci sady SDK. Hromadná funkce automaticky spravuje a dávková operace za účelem maximalizace propustnosti.
Vytvořte upozornění pro omezování propustnosti. Pomocí upozornění můžete sledovat omezování propustnosti nad rámec očekávaných prahových hodnot. V průběhu času si projděte a upravte upozornění, jakmile se dozvíte více o úlohách ve vztahu ke službě Azure Cosmos DB. Normalizovaná metrika spotřeby RU je metrika, která měří procento využití zřízené propustnosti v databázi nebo kontejneru. Pokud je tato metrika konzistentně na 100 %, požadavky pravděpodobně vrátí přechodnou chybu.
Sledujte výkon dotazů pomocí metrik. Pomocí metrik můžete sledovat výkon nejčastějších dotazů v průběhu času. Vyhodnoťte, jestli se nenašly efektivity, a to aktualizací zásad indexování nebo změnou dotazů. Pokud je výkon dotazů nízký, vyřešte potíže s výkonem a použijte osvědčené postupy pro dotazy. Další informace najdete v tipech k výkonu dotazů.
Pomocí šablon můžete automaticky nasazovat prostředky účtu. Zvažte šablony Azure Resource Manageru, Bicep nebo Terraformu pro automatizaci nasazení účtu a dalších prostředků. Ujistěte se, že váš tým používá stejné šablony k nasazení do jiných neprodukčních prostředí.
Sledujte klíčové metriky a identifikujte běžné problémy ve vaší úloze. Pomocí konkrétních metrik můžete najít běžné problémy v úloze, včetně, ale nikoli pouze; Využití RU, využití RU podle oddílu, omezování a objemy požadavků podle typu. Další informace najdete v referenčních informacích k monitorování dat.

Definice zásad Azure

Efektivita výkonu

  • Definujte standardní hodnoty výkonu pro vaši aplikaci. Změřte, kolik souběžných uživatelů a transakcí může být potřeba zpracovat. Zvažte charakteristiky úloh, jako jsou průměrný tok uživatelů, běžné operace a špičky využití.
  • Probídejte nejčastější a nejsložitější dotazy. Identifikujte dotazy, které používají více vyhledávání, spojení nebo agregace. Zvažte tyto dotazy v jakýchkoli aspektech návrhu pro klíč oddílu nebo zásady indexování.
  • U nejběžnějších dotazů určete počet očekávaných výsledků na stránce. Toto číslo vám pomůže formalizovat počet položek v vyrovnávací paměti pro předem načtené výsledky.
  • Probídejte cílové uživatele. Určete, které oblasti Azure jsou k nim nejblíže.
  • Identifikujte dotazy, které používají jedno nebo více polí řazení. Identifikujte také operace, které mají vliv na více polí. Zahrnout tato pole explicitně do návrhu zásad indexování.
  • Navrhujte položky tak, aby jejich odpovídající dokumenty JSON byly co nejmenší. Pokud je to potřeba, zvažte rozdělení dat mezi více položek.
  • Identifikujte dotazy na podřízená pole a určete, jestli jsou kandidáty pro efektivnější poddotazy.
  • Určete, jestli vaše úloha vyžaduje analytické úložiště. Zvažte analytické úložiště a služby, jako je Azure Synapse Link , pro extrémně složité dotazy.
Doporučení Výhoda
Nakonfigurujte propustnost na základě standardních hodnot výkonu. Pomocí nástrojů, jako je kalkulačka kapacity, můžete určit požadovanou propustnost pro směrný plán výkonu. Pomocí funkcí, jako je automatické škálování , můžete škálovat skutečnou propustnost tak, aby lépe odpovídala skutečné úloze. Potom sledujte skutečnou spotřebu propustnosti a proveďte úpravy.
V případě potřeby použijte techniky optimalizace na straně klienta a serveru. Využijte výhod integrované integrované mezipaměti. Nakonfigurujte sadu SDK tak, aby spravovala, kolik položek je předem načteno (v vyrovnávací paměti) a vráceno pro každou stránku.
Nasaďte Službu Azure Cosmos DB for NoSQL do oblastí nejblíže koncovým uživatelům. Snižte latenci nasazením služby Azure Cosmos DB for NoSQL do oblastí, které jsou co nejblíže koncovým uživatelům. Využijte replikaci pro čtení, abyste zajistili výkon čtení bez ohledu na to, jak konfigurujete zápis (jednu nebo více oblastí). Nakonfigurujte sadu SDK (.NET/Java) tak, aby upřednostňovala oblasti blíže vašemu koncovému uživateli.
Nakonfigurujte sadu SDK pro přímý režim. Přímý režim je upřednostňovanou možností pro nejlepší výkon. Tento režim umožňuje klientovi otevírat připojení TCP přímo k oddílům ve službě a odesílat požadavky přímo bez zprostředkující brány. Tento režim nabízí lepší výkon, protože existuje méně segmentů směrování sítě.
Zakažte indexování pro hromadné operace. Pokud existuje mnoho operací vložení,nahrazení/upsert, zakažte indexování, aby se zlepšila rychlost operace při použití hromadné podpory odpovídající sady SDK. Indexování lze okamžitě znovu použít později.
Vytvořte složené indexy pro pole, která se používají v složitých operacích. Složené indexy můžou zvýšit efektivitu operací na více polích o řády. V mnoha případech používejte složené indexy pro ORDER BY příkazy s více poli.
Optimalizujte hostitelské klientské počítače pro sady SDK. Ve většině případů používejte alespoň 4 jádra a 8 GB paměti na 64bitových hostitelských počítačích pomocí sad SDK (.NET/Java). Povolte také akcelerované síťové služby na hostitelských počítačích.
Pro třídu ve většině sad SDK použijte jednoúčelový vzor CosmosClient . Jako jednoúčelovou třídu použijte klientskou třídu ve většině sad SDK. Klientská třída spravuje svůj vlastní životní cyklus a je navržená tak, aby nebyla uvolněna. Neustálé vytváření a odstraňování instancí může vést ke snížení výkonu.
Ponechte velikost položek menší než 100 kB . Větší položky mají větší propustnost pro běžné operace čtení a zápisu. Dotazy na větší položky, které projektují všechna pole, můžou mít také významné náklady na propustnost.
Pomocí poddotazů můžete strategicky optimalizovat dotazy, které spojují velké datové sady. Dotazy, které spojují podřízená pole, můžou zvýšit složitost, pokud je zapojeno více polí a není filtrováno. Například dotaz, který spojuje více než dvě pole s nejméně 10 položkami, se může rozšířit na 1 000+ řazených kolekcí členů. Optimalizujte výrazy s vlastním spojením pomocí poddotazů a vyfiltrujte pole před spojením polí v rámci položky. U dotazů napříč oddíly optimalizujte dotaz tak, aby zahrnoval filtr klíče oddílu, aby optimalizoval směrování dotazu na nejmenší možný počet oddílů.
Pro nejsložitější dotazy používejte analytické úlohy. Pokud spouštíte časté agregace nebo spojování dotazů nad velkými kontejnery, zvažte povolení analytického úložiště a provádění dotazů ve službě Azure Synapse Analytics.

Definice zásad Azure

Další zdroje informací

Zvažte další prostředky související se službou Azure Cosmos DB for NoSQL.

Doprovodné materiály ke službě Azure Architecture Center

Pokyny k architektuře Cloud Adoption Framework

Další kroky