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, aby bylo možné zjistit, 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.

Služba Azure Cosmos DB je vhodná pro aplikace IoT, her, maloobchodního prodeje a provozního protokolování. Běžným vzorem návrhu v těchto aplikacích je použití změn dat k aktivaci dalších akcí. Příklady těchto akcí:

  • 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í IoT nebo analýzy v reálném čase na provozních datech.
  • Přesun dat, jako je synchronizace s mezipamětí, vyhledávacím webem, datovým skladem nebo studeným úložištěm.

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 využití analýz v reálném čase a výpočetních scénářů řízených událostmi

Event computing a oznámení

Kanál změn služby Azure Cosmos DB může zjednodušit scénáře, které potřebují aktivovat oznámení nebo odeslat 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 pokaždé, když dojde k 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 čtete z kanálu změn pomocí Azure Functions, můžete do funkce vložit logiku a odeslat oznámení jenom v případě, že je splněna podmínka. I když by se kód funkce Azure spustil pro každou změnu, oznámení by se odeslalo pouze v případě, že je splněna podmínka.

Zpracování datových proudů 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 IoT nebo ke 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 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 díky schopnosti služby Azure Cosmos DB podporovat trvale vysokou rychlost příjmu dat se zaručenou nízkou latencí čtení a zápisu. Mezi výhody kanálu změn služby Azure Cosmos DB oproti frontě zpráv patří:

Trvalost dat

Data zapsaná do služby Azure Cosmos DB se zobrazí v kanálu změn. Data se uchovávají v kanálu změn, dokud nebudou odstraněna, pokud čtete v režimu nejnovější verze. Fronty zpráv mají obvykle maximální dobu uchovávání. Například Azure Event Hubs nabízí maximální uchovávání dat 90 dnů.

Schopnost dotazu

Kromě čtení z kanálu změn kontejneru služby 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ž v kontejneru jsou, ale je to jen jiný mechanismus čtení dat. Pokud tedy načtete data z kanálu změn, budou data 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 služby Azure Cosmos DB snadno globálně 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 například azure Cosmos DB používáte k sestavení hry, můžete pomocí kanálu změn implementovat tabulky výsledků v reálném čase na základě skóre z dokončených her.

Přesuny 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 pomocí dat uložených ve službě Azure Cosmos DB.

  • Proveďte migrace s nulovými výpadky 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í a archivaci dat na úrovni aplikace. Můžete například ukládat "horká data" ve službě Azure Cosmos DB a stárnout "studená data" do jiných úložných systémů, 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 záznamu celé řady akcí s daty. Kanál změn azure Cosmos DB je skvělou volbou jako centrální úložiště dat v architekturách event sourcingu, ve kterých se veškerý příjem dat modeluje jako zápis (bez aktualizací 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 k udržování materializovaných zobrazení nebo k integraci s externími systémy. Vzhledem k tomu, že v režimu nejnovější verze kanálu změn neexistuje žádný časový limit pro uchovávání, můžete přehrát všechny minulé události čtením od začátku kanálu změn kontejneru služby Azure Cosmos DB. Můžete dokonce mít více příjemců 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í ve vzoru event sourcingu, protože má silné stránky v horizontální škálovatelnosti a vysoké dostupnosti. Kromě toho procesor kanálu změn nabízí " alespoň jednou" záruku, 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ým byste měli rozumět. Při návrhu aplikace, která používá kanál změn v režimu nejnovější verze nebo v režimu odstranění všech verzí, je potřeba zvážit několik oblastí.

Průběžné aktualizace

V režimu nejnovější verze je v kanálu změn zahrnuta pouze nejnovější změna pro konkrétní položku. 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é vynechat zpracování průběžných aktualizací. Pokud chcete přehrát předchozí 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í

Režim nejnovější verze kanálu změn nezachycuje odstranění. 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 na položky, které se odstraňují. Můžete přidat vlastnost s názvem deleted a nastavit ji na true v 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 ve vašem kontejneru existuje položka, je k dispozici v kanálu změn.

Garantovaná objednávka

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é akce uživatelů každá "události", které se modelují jako zápisy do služby Azure Cosmos DB. Představte si, že v následujícím pořadí došlo k nějakým ukázkovým událostem:

  1. Zákazník si do nákupního košíku přidá položku A.
  2. Zákazník si do nákupního košíku přidá položku B.
  3. Zákazník odebere položku A z nákupního košíku.
  4. Zákazník se odhlásí a obsah nákupního košíku se expeduje.

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í, v jakém k nim došlo. Pokud by například mělo být pokladna košíku zpracována před odebráním položky A, je pravděpodobné, že položka A by byla odeslána zákazníkovi, a ne položku, kterou zákazník chtěl místo položky B. Aby se zajistilo, že se tyto čtyři události zpracovávají v pořadí, v jakém se vyskytly, 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í, v jakém se zapisují 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 režim nejnovější verze, které přesahují rozsah uvedených ukázek:

Další kroky