Systém cloudových médií Gridwich

Azure Blob Storage
Azure Event Grid
Azure Functions
Azure Logic Apps

Kanály Gridwich ingestují, zpracovávají, ukládají a doručují mediální prostředky pomocí dvou nových metod– Azure Event Grid Sandwich a Terraform Sandwich.

Architektura

Architektura Gridwich obsahuje dva sendviče , které řeší požadavky asynchronního zpracování událostí a infrastruktury jako kódu:

  • Sendvič Event Gridu abstrahuje vzdálené a dlouhotrvající procesy, jako je kódování médií z externího systému pracovních postupů saga, tím, že je chytá mezi dvěma obslužnými rutinami Event Gridu. Tento sendvič umožňuje externímu systému odeslat událost požadavku, monitorovat plánované události a čekat na případnou úspěšnou nebo neúspěšnou odpověď, která může přijít minuty nebo hodiny později.

    Diagram showing the Event Grid handler sandwich.

    Stáhněte si soubor aplikace Visio s touto architekturou.

  • Terraform Sandwich je model Terraformu s více fázemi aktualizovaný tak, aby podporoval infrastrukturu jako kód. Oddělení infrastruktury a verzí softwaru znamená, že aplikace Azure Functions musí být vydána a spuštěna, aby Terraform mohl nasadit odběr Event Gridu. K vyřešení tohoto požadavku existují dvě úlohy Terraformu v kanálu CI/CD:

    Diagram showing the Terraform sandwich jobs.

    • Terraform 1 vytvoří všechny prostředky s výjimkou předplatných Azure Event Gridu.
    • Terraform 2 vytvoří odběry Event Gridu po spuštění a zprovoznění softwaru.

    Terraform tak dokáže zcela spravovat a nasazovat infrastrukturu řešení, i když před nasazením artefaktů softwaru není možné vytvořit všechny prostředky Azure.

Workflow

Proces žádosti a odpovědi Gridwich pokrývá následující požadavky:

  • Vytvoření
  • Přeprava
  • Recepce
  • Odesílání do komponent Gridwich
  • Potvrzení a akce
  • Odpovědi

Následující kroky popisují proces žádosti a odpovědi mezi externím systémem a Gridwichem. V Gridwichu je externí systém orchestrace pracovních postupů MAM a saga. Přesné formáty událostí zpráv operací Gridwich naleznete v tématu Formáty zpráv Gridwich.

Diagram showing the Gridwich request-response process.

  1. Externí systém vytvoří požadavek a odešle ho zprostředkovateli požadavků.

  2. Zprostředkovatel požadavků zodpovídá za odesílání požadavků do naslouchacích procesů požadavků Gridwich v tradičním modelu odběru publikace. V tomto řešení je zprostředkovatel žádostí Azure Event Grid. Všechny požadavky se zapouzdřují pomocí schématu událostí Event Gridu.

  3. Aplikace Gridwich Azure Functions využívá události z Event Gridu. Kvůli lepší propustnosti gridwich definuje koncový bod HTTP jako model nabízených oznámení, který Event Grid inicializuje, a ne model dotazování vazby event Gridu, který poskytuje Služba Azure Functions.

  4. Aplikace Azure Functions čte vlastnosti události a odesílá události do částí kódu Gridwich, které zpracovávají tento typ a verzi události.

  5. Jakákoli obslužná rutina, která bude pracovat s aktuálním požadavkem, používá společnou třídu EventGridHandlerBase k okamžitému odeslání zprávy potvrzení, když obdrží požadavek. Obslužná rutina pak odešle práci do odvozené třídy.

    Pracovní postupy požadavků Gridwich můžou být synchronní nebo asynchronní povahy. U požadavků, které se snadno provádějí a rychle dokončí, provede synchronní obslužná rutina práci a vrátí událost Úspěch nebo Selhání téměř okamžitě po odeslání potvrzení.

    Pro požadavky, které jsou dlouhotrvající, asynchronní obslužná rutina vyhodnocuje požadavek, ověřuje argumenty a inicializuje dlouhotrvající operaci. Obslužná rutina pak vrátí naplánovanou odpověď, která potvrdí, že požadovala pracovní aktivitu. Při dokončení pracovní aktivity je obslužná rutina požadavku zodpovědná za poskytnutí události úspěšné nebo neúspěšné dokončení pro práci.

    Služba publikování událostí komunikuje se zprostředkovatelem požadavků Event Gridu zprávy o potvrzení, selhání, plánovaném nebo úspěchu.

  6. Vydavatel události ve funkci Azure odešle událost odpovědi do tématu Event Gridu, které funguje jako spolehlivý zprostředkovatel zpráv. Externí systém se přihlásí k odběru tématu a zprávy spotřebovává. Platforma Event Grid poskytuje normální logiku opakování pro publikování do externího systému.

Pořadí zpráv

I když potvrzení předchází úspěšné i naplánované odpovědi, Gridwich nezaručuje, že naplánovaná odpověď vždy předchází odpovídající odpovědi na úspěch. Platná sekvence odpovědí může být potvrzena naplánovaným >> úspěchem nebo potvrzeným plánovaným úspěchem >>.

Neúspěšné žádosti

Selhání požadavků můžou být způsobená chybnými požadavky, chybějícími předběžnými podmínkami, selháními zpracování, výjimkami zabezpečení nebo neošetřenými výjimkami. Téměř všechny chyby mají stejný formulář zprávy a obsahují hodnotu kontextu původní operace. Běžná třída EventGridHandlerBase obvykle odesílá odpovědi na selhání do Event Gridu prostřednictvím rozhraní vydavatele událostí funkce Azure Functions. Aplikační Přehledy také protokoluje selhání prostřednictvím strukturovaného protokolování.

Kontext operace

Externí systém může generovat tisíce požadavků za den, hodinu nebo sekundu. Každá událost požadavku na Gridwich musí obsahovat vlastnost objektu JSON s názvem operationContext.

Pokud požadavek obsahuje kontext operace, například {"id"="Op1001"}, každá odpověď Gridwich musí obsahovat odpovídající neprůhlený kontext operace, bez ohledu na to, jestli je požadavek krátký nebo dlouhotrvající. Tento kontext operace trvá po celou dobu životnosti i velmi dlouho běžících požadavků.

Požadavek na odpověď je určený pro "odpovídající" místo "stejného" objektu JSON. Funkce Gridwich, jako je ztlumení kontextu, využívají skutečnost, že externí systém zpracovává vrácený objekt JSON shora dolů.

Externí systém má konkrétně:

  • Žádná závislost na řazení vlastností, takže Gridwich může odeslat objekt se stejnými vlastnostmi, případně v jiném pořadí. Například {"a":1,"b":2} vs. {"b":2,"a":1}.

  • Žádný problém s přítomností dalších vlastností, takže Gridwich, přijatý {"b":2,"a":1}, by mohl platný vrátit {"a":1,"b":2,"~somethingExtra":"yes"}. Chcete-li minimalizovat možnost kolizí, Gridwich předpony názvů přidaných vlastností vlnovkou (~), například ~muted.

  • Žádné závislosti formátování JSON. Například neexistují žádné předpoklady o tom, kde prázdné znaky odsazení mohou spadat do řetězcové reprezentace JSON. Gridwich velká písmena na tuto nedostatek formátování závislost tím, že komprimuje nepotřebné prázdné znaky v řetězcových reprezentacích objektů JSON. Viz JSONHelpers.SerializeOperationContext.

Saga účastníci a kontext operace

V systému orchestrace ság Gridwich přispívá každý účastník ságy do systému jednu nebo více pracovních aktivit. Každý účastník saga pracuje nezávisle na ostatních účastníků a více než jeden účastník ságy může jednat na jednu žádost.

Každý z účastníků ságy musí zachovat kontext operace, ale může ho implementovat jinak. Příklad:

  • Krátkoběžné synchronní operace zachovávají kontext operace.
  • Azure Storage poskytuje neprůraznou řetězcovou vlastnost, která se volá ClientRequestId pro většinu operací.
  • Některé služby mají Job.CorrelationData vlastnost.
  • Jiná cloudová rozhraní API nabízejí podobné koncepty jako neprůžný kontext operací, který se může vrátit při signalizaci průběhu, dokončení nebo selhání.

Další informace o ságách a ságách účastníků naleznete v tématu Orchestrace Saga.

Synchronní a asynchronní obslužné rutiny

Každá obslužná rutina události v systému používá společnou třídu EventGridHandlerBase k poskytování obecných služeb, jako je potvrzení požadavku, zpracování selhání a publikování událostí odpovědi. Služba publikování událostí komunikuje se zprostředkovatelem požadavků Event Gridu zprávy o potvrzení, selhání, plánovaném nebo úspěchu.

Každá obslužná rutina, která plánuje pracovat s aktuálním požadavkem, musí při přijetí požadavku poskytnout potvrzení. Základní třída okamžitě odešle zprávu potvrzení a pak odešle práci do odvozené třídy.

Diagram showing the Acknowledgment message flow.

Synchronní zpracování událostí

U požadavků, které se dají snadno provést a rychle dokončit, obslužná rutina pracuje synchronně a vrací událost Success s kontextem operace téměř okamžitě po odeslání potvrzení.

Diagram showing a synchronous request-response message flow..

Například ChangeBlobTierHandler je jednoduchý synchronní tok. Obslužná rutina získá objekt pro přenos dat požadavku (DTO), volání a čeká na jednu službu, která provede práci, a vrátí odpověď na úspěch nebo selhání.

Diagram showing the ChangeBlobTierHandler synchronous flow example.

Asynchronní zpracování událostí

Některé požadavky jsou dlouhotrvající. Například kódování mediálních souborů může trvat hodiny. V těchto případech obslužná rutina asynchronního požadavku vyhodnocuje požadavek, ověřuje argumenty a iniciuje dlouhotrvající operaci. Obslužná rutina pak vrátí naplánovanou odpověď, která potvrdí, že požadovala pracovní aktivitu.

Diagram showing an asynchronous request-response message flow.

Při dokončení pracovní aktivity je obslužná rutina požadavku zodpovědná za poskytnutí události úspěšné nebo neúspěšné dokončení pro práci. Zatímco je bezstavová, obslužná rutina musí načíst původní kontext operace a umístit ji do datové části dokončené zprávy události.

Například BlobCopyHandler ukazuje jednoduchý asynchronní tok. Obslužná rutina získá DTO požadavku, volání a čeká na jednu službu, která zahájí práci, a publikuje naplánovanou nebo neúspěšnou odpověď.

Diagram showing the BlobCopyHandler asynchronous flow example with event scheduled.

K dokončení dlouhotrvajícího toku požadavku využívá Objekt blobCreatedHandler událost Microsoft.Storage.BlobCreatedplatformy , extrahuje původní kontext operace a publikuje odpověď na dokončení úspěšného nebo neúspěšného dokončení.

Diagram showing the BlobCopyHandler asynchronous flow example with event successful.

Dlouhodobě běžící funkce

Když Gridwich nasadí novou aplikaci Functions, může vypustit aktuální dlouhotrvající procesy. Pokud tyto procesy náhle skončí, neexistuje žádný stav a žádná zpráva zpět volajícímu. Gridwich musí nasadit nové aplikace Functions při řádném zpracování přechodu pro dlouhotrvající funkce a nesmí chybět žádné zprávy.

Řešení musí:

  • Nechovejte stav spuštěných instancí aplikace Gridwich.
  • Procesy nezabíjejí jenom proto, že se nasazuje něco nového nebo že nová zpráva požaduje stejnou aktivitu.
  • Nevyvolá žádné další úlohy Azure, jako jsou Durable Functions, Functions Apps, Logic Apps nebo Azure Container Instances.

Gridwich využívá nasazení slotu Azure Functions a tokeny zrušení ke splnění těchto požadavků pro spolehlivé dlouhotrvající funkce.

Následující diagram znázorňuje, jak většina úloh Gridwich funguje. Zelený rámeček představuje úlohu, kterou Gridwich předá externí službě. Gridwich pak reaguje na stav řízený událostmi. Červené pole zobrazuje funkci, která běží dlouho na Gridwich sama.

Diagram showing short-running and long-running functions.

Modul runtime služby Functions přidá token zrušení při vypnutí aplikace. Gridwich rozpozná token a vrátí kódy chyb pro všechny požadavky a aktuálně spuštěné procesy.

Nasazení slotu nasadí nové verze softwaru. Produkční slot má spuštěnou aplikaci a přípravný slot má novou verzi. Azure provede řadu kroků nasazení a pak prohodí instance slotu. Původní instance se restartuje jako poslední krok procesu.

Gridwich po opětovném namapování názvů hostitelů počká 30 sekund, takže pro funkce aktivované protokolem HTTP gridwich zaručuje alespoň 30 sekund před restartováním původního produkčního slotu. Ostatní triggery můžou být řízeny nastavením aplikace, která nemají mechanismus čekání na aktualizace nastavení aplikace. Tyto funkce riskují přerušení, pokud se spuštění spustí přímo před restartováním starého produkčního slotu.

Další informace najdete v tématu Co se stane během prohození slotů pro Azure Functions a sloty nasazení Azure Functions.

Komponenty

Řešení pro zpracování médií Gridwich používá Azure Event Grid, Azure Functions, Azure Blob Storage, Azure Logic Apps a Azure Key Vault. Procesy orchestrace CI/CD a saga používají Azure Repos, Azure Pipelines a Terraform.

  • Azure Event Grid spravuje směrování událostí Gridwich se dvěma sendvičovými úlohami Event Gridu, které umožňují asynchronní zpracování událostí médií. Event Grid je vysoce spolehlivý koncový bod doručení požadavků. Platforma Azure poskytuje potřebnou dostupnost a stabilitu koncového bodu doručení požadavků.

    Gridwich zapouzdřuje události v rámci objektu vlastnosti schématuEvent.Data Event Gridu, což je neprůhledné pro zprostředkovatele Event Gridu a transportní vrstvu. Gridwich také používá eventType pole objektů dataVersion ke směrování událostí. Aby bylo možné zprostředkovatele požadavků Event Gridu nahradit jinými zprostředkovateli událostí odběru publikace, gridwich závisí na nejmenších možných polích událostí a nepoužívá topic tato pole.subject

  • Azure Functions umožňuje spouštět kód aktivovaný událostmi, aniž byste museli explicitně zřizovat nebo spravovat infrastrukturu. Gridwich je aplikace Azure Functions, která hostuje spouštění různých funkcí.

  • Azure Blob Storage poskytuje škálovatelné a nákladově efektivní cloudové úložiště a přístup k nestrukturovaným datům, jako jsou mediální prostředky. Gridwich používá objekty blob bloku služby Azure Storage i kontejnery.

  • Azure Key Vault chrání kryptografické klíče, hesla a další tajné kódy, které azure a aplikace a služby třetích stran používají.

  • Azure DevOps je sada vývojářských a provozních služeb, včetně úložišť kódu založených na Gitu a automatizovaných kanálů sestavení a verzí, které se integrují s Azure. Gridwich používá Azure Repos k ukládání a aktualizaci projektů kódu a Azure Pipelines pro CI/CD a další pracovní postupy.

  • Terraform je opensourcový nástroj, který ke zřizování a správě infrastruktur a služeb používá infrastrukturu jako kód.

Alternativy

  • Durable Functions, které mají integrované úložiště stavů pro dlouhotrvající operace, můžou také poskytovat neprůrůžný kontext operace. Durable Functions může vytvořit řadu úloh v rámci operace a uložit kontext operace jako vstup nebo výstup operace. Gridwich může ve skutečnosti používat Durable Functions pro všechny pracovní aktivity, ale tento přístup by zvýšil složitost kódu.

  • Můžete dosáhnout lepšího oddělení od infrastruktury Event Gridu refaktoringem EventGridHandlerBase na RequestHandlerBasea odebráním jakéhokoli propojení s objekty nebo typy Event Gridu. Tato refaktorovaná třída by se zabývala pouze základními objekty DTO, a ne v typech objektů specifických pro přenos. Podobně by se IEventGridDispatcher mohl stát IResponseDispatcher konkrétní EventGridDispatcher implementací.

  • Knihovna Gridwich.SagaParticipants.Storage.AzureStorage obsahuje také služby úložiště, které používají jiní účastníci saga. Když budete mít rozhraní v základním projektu, zabráníte problémům s inverzí řízení (IoC), ale rozhraní můžete extrahovat do samostatné knihovny brány infrastruktury základního úložiště.

  • Aplikace Funkcí Gridwich používá injektáž závislostí k registraci jednoho nebo více obslužných rutin požadavků pro konkrétní typy událostí a datové verze. Aplikace vloží EventGridDispatcher do kolekce obslužných rutin událostí Event Gridu a dispečer dotazuje obslužné rutiny, které určí, které z nich budou událost zpracovávat.

    Případně můžete použít mechanismus odběru a filtrování událostí, který poskytuje platforma Event Grid. Tento mechanismus představuje model nasazení 1:1, kde jedna funkce Azure hostuje pouze jednu obslužnou rutinu události. I když Gridwich používá model 1:N, jeho čistá architektura znamená, že refaktoring řešení pro 1:1 by nebyl obtížné.

  • Alternativní mikroslužbu místo monolitické architektury Gridwich najdete v tématu Alternativní mikroslužby.

Podrobnosti scénáře

Známá hromadná média a zábavní konglomerat nahradila svou místní službu streamování videa cloudovým řešením pro příjem, zpracování a publikování video assetů. Hlavními cíli společnosti bylo využít výhod cloudové kapacity Azure, nákladů a flexibility pro:

  • Ingestování nezpracovaných videosouborů, zpracování a publikování a splnění požadavků na média
  • Vylepšete kódování i nové možnosti příjmu a distribuce ve velkém měřítku a s čistým návrhem přístupu.
  • Implementujte kontinuální integraci a doručování (CI/CD) pro kanál správy mediálních prostředků (MAM).

Pro splnění těchto cílů vyvinul technický tým Microsoftu gridwich, bezstavovou architekturu zpracování událostí řízenou externím systémem orchestrace pracovních postupů saga.

Potenciální případy použití

Technický tým vyvinul Gridwich, aby byl v souladu s principy a oborovými standardy pro:

Systém Gridwich představuje osvědčené postupy pro zpracování a doručování mediálních prostředků v Azure. I když je systém Gridwich specifický pro média, rozhraní pro zpracování zpráv a událostí může platit pro jakýkoli pracovní postup zpracování bezstavových událostí.

Nasazení tohoto scénáře