Sdílet prostřednictvím


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

PLATÍ PRO: NoSQL

Kanál změn služby Azure Cosmos DB umožňuje efektivní zpracování velkých datových sad, které mají velký objem zápisů. Kanál změn také nabízí alternativu k dotazování na celou datovou sadu, abyste zjistili, co se změnilo. Tento článek se zaměřuje na běžné vzory návrhu kanálu změn, kompromisy návrhu a omezení kanálu změn.

Azure Cosmos DB je vhodná pro aplikace ioT, hraní, maloobchod a provozní protokolování. Běžným vzorem návrhu v těchto aplikacích je použití změn dat k aktivaci dalších akcí. Mezi příklady těchto akcí 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 zpracování dat IoT nebo analýzy v reálném čase na provozních datech.
  • 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 každý z těchto vzorů, jak je znázorněno na následujícím obrázku:

Diagram znázorňující použití kanálu změn služby Azure Cosmos DB k výkonu scénářů 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 může zjednodušit scénáře, které vyžadují aktivaci oznámení nebo odeslání volání rozhraní API na základě určité události. Procesor kanálu změn můžete použít k automatickému dotazování kontejneru na změny a následnému volání externího rozhraní API při každém zápisu, aktualizaci nebo odstranění.

Můžete také selektivně aktivovat oznámení nebo odeslat volání rozhraní API na základě konkrétních kritérií. Pokud například čte z kanálu změn pomocí Azure Functions, můžete do funkce vložit logiku, která odešle oznámení jenom v případě, že je splněna podmínka. I když se kód funkce Azure pro každou změnu spustí, 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 služby Azure Cosmos DB lze použít ke zpracování datových proudů v reálném čase pro zpracování datových proudů IoT nebo zpracování analýz v reálném čase na provozních datech. Můžete například přijímat a ukládat data událostí ze zařízení, senzorů, infrastruktury a aplikací a pak tyto události zpracovávat v reálném čase pomocí Sparku. Následující obrázek ukazuje, jak můžete 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. Mezi výhody kanálu změn služby Azure Cosmos DB ve frontě zpráv patří:

Trvalost dat

Data zapsaná do služby Azure Cosmos DB se zobrazují v kanálu změn. Data se uchovávají v kanálu změn, dokud nebudou odstraněna, pokud je přečtete v režimu nejnovější verze. 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 dotazu

Kromě čtení z kanálu změn kontejneru Azure Cosmos DB můžete spouštět 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 nabízí až 99,999% dostupnost čtení a zápisu. Na rozdíl od mnoha front zpráv je možné data Azure Cosmos DB snadno distribuovat a nakonfigurovat s nulovým cílem doby obnovení (RTO).

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

Pohyb dat

Můžete také číst z kanálu změn pro přesun dat v reálném čase.

Kanál změn vám například pomůže 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. Můžete například ukládat "horká data" ve službě Azure Cosmos DB a oddálit "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 může zaručit 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 zahrnuje použití úložiště jen pro připojení k zaznamenání celé řady akcí na těchto datech. 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 žádný č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 uživatelů kanálu změn, kteří se přihlásí k odběru kanálu změn stejného kontejneru.

Azure Cosmos DB je skvělé centrální úložiště trvalých dat jen pro 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ů, které mají důležitá omezení, kterým byste měli rozumět. Při návrhu aplikace, která používá kanál změn v nejnovějším režimu verze nebo ve všech verzích a režimu 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 znovu přehrát jednotlivé aktualizace položky, můžete tyto aktualizace modelovat jako řadu zápisů nebo použít všechny verze a režim odstranění.

Odstranění

Nejnovější režim verze kanálu změn se neodstraní. Pokud odstraníte položku z kontejneru, odebere se také z kanálu změn. Nejběžnější metodou zpracování 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í. Pokud položka v 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 například maloobchodní aplikaci, která používá vzor návrhu event sourcingu. 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 si prověří obsah nákupního košíku a doručí se.

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 by se například rezervace košíku zpracovávala před odebráním položky A, pravděpodobně by položka A byla odeslána zákazníkovi, a ne položku, kterou zákazník chtěl, položka B. Aby bylo možné zaručit, že se tyto čtyři události zpracovávají v pořadí jejich výskytu, 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 je několik příkladů 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: