Sdílet prostřednictvím


Vzory návrhu kanálu změn ve službě Azure Cosmos DB for NoSQL

Kanál změn služby Azure Cosmos DB umožňuje efektivně zpracovávat velké datové sady s velkými objemy zápisu. Poskytuje alternativu k dotazování celých datových sad za účelem identifikace změn. Tento článek vysvětluje běžné vzory návrhu kanálu změn, jejich kompromisy a omezení, které vám pomůžou vytvářet škálovatelná řešení.

Scénáře

Azure Cosmos DB je ideální pro aplikace ioT, her, maloobchodního prodeje a protokolování provozu. Běžným vzorem návrhu v těchto aplikacích je použití změn dat k aktivaci dalších akcí. Mezi tyto akce patří:

  • Aktivace oznámení nebo volání rozhraní API při vložení, aktualizaci nebo odstranění položky
  • Zpracování datových proudů v reálném čase pro IoT nebo analýzy provozních dat
  • Přesun dat, jako je synchronizace s mezipamětí, vyhledávací modul, datový sklad nebo studené úložiště.

Kanál změn ve službě Azure Cosmos DB umožňuje vytvářet efektivní a škálovatelná řešení pro tyto vzory, jak je znázorněno na následujícím obrázku:

Diagram znázorňující, jak kanál změn ve službě Azure Cosmos DB využívá scénáře analýzy v reálném čase a výpočetních scénářů řízených událostmi

Výpočty událostí a oznámení

Kanál změn služby Azure Cosmos DB zjednodušuje scénáře, které aktivují oznámení nebo volají rozhraní API na základě konkrétní události. Pomocí procesoru kanálu změn můžete automaticky dotazovat kontejner na změny a volat externí rozhraní API pro každý zápis, aktualizaci nebo odstranění.

Selektivně aktivují oznámení nebo volají rozhraní API na základě konkrétních kritérií. Pokud například čtete z kanálu změn pomocí Azure Functions, přidejte do funkce logiku, která odešle oznámení jenom v případě, že je splněna podmínka. I když se kód funkce Azure Functions spustí pro každou změnu, oznámení se odešle pouze v případě, že je splněna podmínka.

Zpracování streamů v reálném čase

Kanál změn ve službě Azure Cosmos DB umožňuje provádět zpracování datových proudů v reálném čase pro ioT nebo analýzu provozních dat v reálném čase. Můžete například přijímat a ukládat data událostí ze zařízení, senzorů, infrastruktury a aplikací a zpracovávat tyto události v reálném čase pomocí Sparku. Následující obrázek ukazuje, jak implementovat architekturu lambda pomocí kanálu změn služby Azure Cosmos DB:

Diagram znázorňující kanál lambda založený na službě Azure Cosmos DB pro příjem dat a dotazování

V mnoha případech implementace zpracování datových proudů nejprve obdrží velký objem příchozích dat do dočasné fronty zpráv, jako je Azure Event Hubs nebo Apache Kafka. Kanál změn je skvělou alternativou z důvodu schopnosti služby Azure Cosmos DB podporovat trvalou vysokou rychlost příjmu dat s garantovanou nízkou latencí čtení a zápisu.

Trvalost dat

Data zapsaná do služby Azure Cosmos DB se zobrazí v kanálu změn. V režimu nejnovější verze zůstanou data v kanálu změn až do odstranění. Fronty zpráv obvykle mají maximální dobu uchovávání. Azure Event Hubs například nabízí maximální uchovávání dat 90 dnů.

Schopnost dotazů

Kromě čtení z kanálu změn kontejneru Azure Cosmos DB spusťte dotazy SQL na data uložená ve službě Azure Cosmos DB. Kanál změn není duplikací dat, která už jsou v kontejneru, ale je to jen jiný mechanismus čtení dat. Proto pokud čtetete data z kanálu změn, data jsou vždy konzistentní s dotazy stejného kontejneru Azure Cosmos DB.

Vysoká dostupnost

Azure Cosmos DB poskytuje až 99,999% dostupnosti čtení a zápisu. Na rozdíl od mnoha front zpráv je možné data Azure Cosmos DB globálně distribuovat a nakonfigurovat s cílem doby obnovení (RTO) nula.

Po zpracování položek v kanálu změn vytvořte materializované zobrazení a zachovají agregované hodnoty zpět ve službě Azure Cosmos DB. Pomocí kanálu změn služby Azure Cosmos DB můžete například implementovat tabulky výsledků v reálném čase na základě skóre z dokončených her.

Pohyb dat

Čtení z kanálu změn pro přesun dat v reálném čase

Kanál změn například umožňuje efektivně provádět následující úlohy:

  • Aktualizujte mezipaměť, index vyhledávání nebo datový sklad s daty uloženými ve službě Azure Cosmos DB.

  • Proveďte migraci bez výpadků do jiného účtu služby Azure Cosmos DB nebo do jiného kontejneru Azure Cosmos DB, který má jiný klíč logického oddílu.

  • Implementujte vrstvení dat na úrovni aplikace a archivaci. Například uložte "horká data" ve službě Azure Cosmos DB a vytáhnou "studená data" do jiných systémů úložiště, jako je Azure Blob Storage.

Pokud potřebujete denormalizovat data napříč oddíly a kontejnery, můžete číst z kanálu změn kontejneru jako zdroj pro tuto replikaci dat. Replikace dat v reálném čase pomocí kanálu změn zaručuje pouze konečnou konzistenci. Můžete sledovat, jak daleko procesor kanálu změn zaostává při zpracování změn v kontejneru Azure Cosmos DB.

Event Sourcing

Model event sourcing používá úložiště jen pro připojení k zaznamenání celé řady akcí s daty. Kanál změn ve službě Azure Cosmos DB je skvělou volbou jako centrální úložiště dat v architekturách zdrojů událostí, ve kterých se veškerý příjem dat modeluje jako zápisy (žádné aktualizace nebo odstranění). V tomto případě je každý zápis do služby Azure Cosmos DB událostí, takže v kanálu změn je úplný záznam minulých událostí. Typické použití událostí publikovaných centrálním úložištěm událostí je udržovat materializovaná zobrazení nebo integrovat s externími systémy. Vzhledem k tomu, že v nejnovějším režimu verzí kanálu změn neexistuje časový limit pro uchovávání, můžete všechny minulé události přehrát čtením od začátku kanálu změn kontejneru Azure Cosmos DB. Můžete mít dokonce více příjemců kanálu změn, kteří se připojí ke kanálu změn stejného kontejneru.

Azure Cosmos DB je vynikající trvalé úložiště dat jen pro centrální připojení v modelu Event Sourcing, protože má silné stránky v horizontální škálovatelnosti a vysoké dostupnosti. Procesor kanálu změn navíc nabízí záruku "alespoň jednou" , která zajišťuje, že nezmeškáte zpracování žádných událostí.

Aktuální omezení

Kanál změn má několik režimů, z nichž každá má důležitá omezení, která byste měli pochopit. Při návrhu aplikace, která používá kanál změn v režimu nejnovější verze nebo v režimu všech verzí a odstranění, je potřeba vzít v úvahu několik oblastí.

Přechodné aktualizace

V režimu nejnovější verze je do kanálu změn zahrnuta pouze nejnovější změna konkrétní položky. Při zpracování změn si přečtete nejnovější dostupnou verzi položky. Pokud existuje několik aktualizací stejné položky za krátkou dobu, je možné zmeškat zpracování průběžných aktualizací. Pokud chcete přehrát jednotlivé aktualizace položky, modelujte tyto aktualizace jako řadu zápisů nebo použijte všechny verze a režim odstranění.

Odstranění

Režim nejnovější verze kanálu změn nezachycuje odstranění. Když odstraníte položku z kontejneru, položka se odebere z kanálu změn. Nejběžnější metodou zpracování operací odstranění je přidání obnovitelné značky k odstraněným položkám. Můžete přidat volanou deleted vlastnost a nastavit ji v true době odstranění. Tato aktualizace dokumentu se zobrazí v kanálu změn. U této položky můžete nastavit hodnotu TTL (Time to Live), aby ji bylo možné později automaticky odstranit.

Uchovávání

Kanál změn v režimu nejnovější verze má neomezené uchovávání. Dokud položka ve vašem kontejneru existuje, je k dispozici v kanálu změn.

Garantované pořadí

Všechny režimy kanálu změn mají zaručené pořadí v rámci hodnoty klíče oddílu, ale ne napříč hodnotami klíče oddílu. Měli byste vybrat klíč oddílu, který vám poskytne záruku smysluplného pořadí.

Představte si maloobchodní aplikaci, která používá vzor návrhu modelu event sourcing. V této aplikaci jsou různé uživatelské akce jednotlivými "událostmi", které jsou modelovány jako zápisy do služby Azure Cosmos DB. Představte si, že v následující sekvenci došlo k některým ukázkovým událostem:

  1. Zákazník přidá položku A do nákupního košíku.
  2. Zákazník přidá položku B do nákupního košíku.
  3. Zákazník odebere položku A ze svého nákupního košíku.
  4. Zákazník dokončí nákup; obsah nákupního košíku je odeslán.

Pro každého zákazníka se udržuje materializované zobrazení aktuálního obsahu nákupního košíku. Tato aplikace musí zajistit, aby se tyto události zpracovávaly v pořadí, ve kterém k nim dochází. Pokud se například rezervace košíku zpracovala před odebráním položky A, je pravděpodobné, že položka A byla odeslána zákazníkovi místo položky B, kterou zákazník chtěl. Aby se zajistilo, že se tyto čtyři události zpracovávají v pořadí, měly by spadat do stejné hodnoty klíče oddílu. Pokud jako klíč oddílu vyberete username (každý zákazník má jedinečné uživatelské jméno), můžete zaručit, že se tyto události zobrazí v kanálu změn ve stejném pořadí, ve kterém jsou zapsány do služby Azure Cosmos DB.

Příklady

Tady jsou příklady kódu kanálu změn z reálného světa pro nejnovější režim verzí, který přesahuje rozsah poskytnutých ukázek: