Gridwich felhőbeli médiarendszer

Azure Blob Storage
Azure Event Grid
Azure Functions
Azure Logic Apps

A Gridwich-folyamatok két új módszer, az Azure Event Grid Sandwich és a Terraform Sandwich segítségével betöltik, feldolgozzák, tárolják és kézbesítik a médiaegységeket.

Felépítés

A Gridwich-architektúra két szendvicset tartalmaz, amelyek az aszinkron eseményfeldolgozás és az infrastruktúra mint kód követelményeit kezelik:

  • Az Event Grid-szendvics elvonja a távoli és hosszú ideig futó folyamatokat, például a médiakódolást a külső saga munkafolyamat-rendszerből azáltal, hogy két Event Grid-kezelő között szendvicset illeszt. Ez a szendvics lehetővé teszi, hogy a külső rendszer küldjön egy kéréseseményt, figyelje az ütemezett eseményeket, és várjon egy esetleges sikeres vagy sikertelen válaszra, amely percek vagy órák múlva érkezhet.

    Diagram showing the Event Grid handler sandwich.

    Töltse le az architektúra Visio-fájlját.

  • A Terraform Sandwich egy többfázisú Terraform-minta, amely kódként támogatja az infrastruktúrát. Az infrastruktúra és a szoftverkiadások elkülönítése azt jelenti, hogy az Azure Functions-alkalmazást ki kell adni és futtatni kell, mielőtt a Terraform üzembe helyezheti az Event Grid-előfizetést. Ennek a követelménynek a megoldásához két Terraform-feladat van a CI/CD-folyamatban:

    Diagram showing the Terraform sandwich jobs.

    • A Terraform 1 az Azure Event Grid-előfizetések kivételével az összes erőforrást létrehozza.
    • A Terraform 2 létrehozza az Event Grid-előfizetéseket a szoftver telepítése és futtatása után.

    Így a Terraform teljes mértékben felügyelheti és üzembe helyezheti a megoldásinfrastruktúrát, még akkor is, ha nem minden Azure-erőforrás hozható létre a szoftverösszetevők üzembe helyezése előtt.

Munkafolyamat

A Gridwich kérés- és válaszfolyamata a következő kéréseket fedi le:

  • Létrehozás
  • Átvitel
  • Recepció
  • Küldés a Gridwich-összetevőkre
  • Nyugtázás és műveletek
  • Válaszok

Az alábbi lépések a külső rendszer és a Gridwich közötti kérés- és válaszfolyamatot írják le. A Gridwichben a külső rendszer egy MAM és saga munkafolyamat-vezénylési rendszer. A Gridwich műveleti üzeneteseményeinek pontos formátumát lásd : Gridwich üzenetformátumok.

Diagram showing the Gridwich request-response process.

  1. A külső rendszer létrehoz egy kérést, és elküldi azt a kérésközvetítőnek.

  2. A kérésközvetítő feladata, hogy kéréseket küldjön a Gridwich-kérelmek figyelőinek egy hagyományos kiadvány-előfizetési modellben. Ebben a megoldásban a kérésközvetítő az Azure Event Grid. Minden kérés az Event Grid eseménysémával van beágyazva.

  3. A Gridwich Azure Functions alkalmazás eseményeket használ fel az Event Gridből. A jobb átviteli sebesség érdekében a Gridwich egy HTTP-végpontot az Event Grid által kezdeményezett leküldéses modellként definiál, nem pedig az Azure Functions által biztosított Event Grid-kötés-lekérdezési modellt.

  4. Az Azure Functions-alkalmazás felolvassa az esemény tulajdonságait, és elküldi az eseményeket a Gridwich-kód azon részeinek, amelyek az adott eseménytípust és -verziót kezelik.

  5. Az aktuális kéréssel dolgozó kezelők a gyakori EventGridHandlerBase osztály használatával azonnal nyugtázási üzenetet küldenek a kérés fogadásakor. A kezelő ezután elküldi a munkát a származtatott osztálynak.

    A Gridwich-kérelem munkafolyamatai szinkron vagy aszinkron jellegűek lehetnek. A könnyen végrehajtható és gyorsan teljesíthető kérések esetében a szinkron kezelő végzi a munkát, és a sikeres vagy sikertelen eseményt szinte azonnal visszaadja a nyugtázás elküldése után.

    A hosszan futó kérések esetében az aszinkron kezelő kiértékeli a kérést, érvényesíti az argumentumokat, és elindítja a hosszú ideig futó műveletet. A kezelő ezután egy ütemezett választ ad vissza, amely megerősíti, hogy kérte a munkatevékenységet. A munkatevékenység befejezésekor a kérelemkezelő felelős egy sikeres vagy sikertelen befejezésű esemény biztosításáért a munkához.

    Az eseményközvetítési szolgáltatás közli a nyugtázási, hiba-, ütemezett vagy sikerességi üzeneteket az Event Grid-kérelemközvetítőnek.

  6. Az Azure-függvény eseménykiadója elküldi a válaszeseményt egy Event Grid-témakörnek, amely megbízható üzenetközvetítőként működik. A külső rendszer feliratkozik a témakörre, és felhasználja az üzeneteket. Az Event Grid platform a külső rendszeren való közzétételhez biztosítja a szokásos újrapróbálkozási logikát.

Üzenetsorrend

Bár a nyugtázás a sikeres és az ütemezett válaszokat is megelőzi, a Gridwich nem garantálja, hogy az ütemezett válasz mindig megelőzi a megfelelő sikeres választ. Az érvényes válaszütemezés lehet elismert > ütemezett > vagyelismert > sikeres > ütemezett.

Kérelemhibák

A kéréshibákat hibás kérések, hiányzó előfeltételek, feldolgozási hibák, biztonsági kivételek vagy kezeletlen kivételek okozhatják. Szinte minden hiba ugyanazzal az üzenetűrlaplal rendelkezik, és tartalmazza az eredeti műveleti környezet értékét. A gyakori EventGridHandlerBase-osztály általában hibaválaszokat küld az Event Gridnek az Azure Function eseménykiadó felületén keresztül. Az alkalmazás Elemzések strukturált naplózáson keresztül naplózza a hibákat is.

Műveleti környezet

A külső rendszer több ezer kérést generálhat naponta, óránként vagy másodpercenként. A Gridwichnek küldött minden kérelemeseménynek tartalmaznia kell egy JSON-objektumtulajdonságot.operationContext

Ha egy kérelem tartalmaz egy műveleti környezetet, például{"id"="Op1001"}, minden Gridwich-válasznak tartalmaznia kell egy megfelelő átlátszatlan műveleti környezetet, függetlenül attól, hogy a kérelem rövid ideig fut vagy hosszú ideig fut. Ez a műveleti környezet még a nagyon hosszú ideig futó kérések élettartama alatt is megmarad.

A válaszkövetelmény a "megfelelő" és nem az "azonos" JSON-objektumra vonatkozik. A Gridwich olyan funkciói, mint a környezetnémítás , kihasználják azt a tényt, hogy a külső rendszer felülről lefelé dolgozza fel a visszaadott JSON-objektumot.

Konkrétan a külső rendszer a következő:

  • Nincs függőség a tulajdonságrendezéshez, így a Gridwich visszaküldhet egy azonos tulajdonságokkal rendelkező objektumot, esetleg egy másik sorrendben. Például: {"a":1,"b":2} vs. {"b":2,"a":1}.

  • Nem jelent problémát a további tulajdonságok jelenléte, ezért a Gridwich, miután megkapta {"b":2,"a":1}, érvényesen vissza tudott térni {"a":1,"b":2,"~somethingExtra":"yes"}. Az ütközések lehetőségének minimalizálása érdekében a Gridwich előtagja például egy tilde (~) ~mutedkarakterrel adhatja meg a hozzáadott tulajdonságok nevét.

  • Nincsenek JSON-formázási függőségek. Például nincsenek feltételezések arról, hogy a whitespace padding hol eshet a JSON sztringreprezentációjához. A Gridwich kihasználja a formázási függőségek hiányát azáltal, hogy a JSON-objektumok sztringreprezentációiban tömöríti a szükségtelen szóközöket. Lásd: JSONHelpers.SerializeOperationContext.

A Saga résztvevői és a műveleti környezet

A Gridwich saga vezénylési rendszerében minden saga résztvevő egy vagy több munkatevékenységgel járul hozzá a rendszerhez. Minden saga-résztvevő a többi résztvevőtől függetlenül működik, és egynél több saga résztvevő is eljárhat egyetlen kérés alapján.

A saga minden résztvevőjének meg kell őriznie a műveleti környezetet, de másképpen is implementálhatja azt. Példa:

  • A rövid ideig futó szinkron műveletek megőrzik a műveleti környezetet.
  • Az Azure Storage a legtöbb művelethez egy átlátszatlan sztringtulajdonságot ClientRequestId biztosít.
  • Egyes szolgáltatások rendelkeznek tulajdonságokkal Job.CorrelationData .
  • Más felhőalapú API-k hasonló fogalmakat kínálnak egy átlátszatlan műveleti környezethez, amelyet az előrehaladás, a befejezés vagy a hiba jelzésekor kaphatnak vissza.

További információ a saga és a saga résztvevőiről: Saga vezénylés.

Szinkron és aszinkron kezelők

A rendszer minden eseménykezelője egy általános EventGridHandlerBase-osztályt használ olyan általános szolgáltatások biztosítására, mint a kérések visszaigazolása, a hibakezelés és a válaszesemények közzététele. Az eseményközvetítési szolgáltatás közli a nyugtázási, hiba-, ütemezett vagy sikerességi üzeneteket az Event Grid-kérelemközvetítőnek.

Minden olyan kezelőnek, aki az aktuális kérést szeretné kezelni, nyugtát kell adnia, amikor megkapja a kérést. Az alaposztály azonnal nyugtázási üzenetet küld, majd elküldi a munkát a származtatott osztálynak.

Diagram showing the Acknowledgment message flow.

Szinkron eseményfeldolgozás

A könnyen végrehajtható és gyorsan végrehajtható kérések esetében a kezelő szinkron módon végzi el a munkát, és a műveletkörnyezettel együtt a sikeres eseményt adja vissza, szinte közvetlenül a Nyugtázás elküldése után.

Diagram showing a synchronous request-response message flow..

A ChangeBlobTierHandler például egy egyszerű szinkron folyamat. A kezelő lekéri a Kérelem adatátviteli objektumot (DTO), meghívja és egyetlen szolgáltatásra vár, hogy elvégezhesse a munkát, és sikeres vagy sikertelen választ ad vissza.

Diagram showing the ChangeBlobTierHandler synchronous flow example.

Aszinkron eseményfeldolgozás

Egyes kérések hosszú ideig futnak. A médiafájlok kódolása például órákat is igénybe vehet. Ezekben az esetekben az aszinkron kéréskezelő kiértékeli a kérést, érvényesíti az argumentumokat, és elindítja a hosszú ideig futó műveletet. A kezelő ezután egy ütemezett választ ad vissza, amely megerősíti, hogy kérte a munkatevékenységet.

Diagram showing an asynchronous request-response message flow.

A munkatevékenység befejezésekor a kérelemkezelő felelős egy sikeres vagy sikertelen befejezésű esemény biztosításáért a munkához. Amíg állapot nélküli marad, a kezelőnek le kell kérnie az eredeti műveleti környezetet , és el kell helyeznie a Kész eseményüzenet hasznos adatai között.

A BlobCopyHandler például egy egyszerű aszinkron folyamatot jelenít meg. A kezelő lekéri a kérelem DTO-t, meghívja és egyetlen szolgáltatásra vár, hogy elindítsa a munkát, és közzétegye az ütemezett vagy sikertelen választ.

Diagram showing the BlobCopyHandler asynchronous flow example with event scheduled.

A hosszú ideig futó kérelemfolyamat befejezéséhez a BlobCreatedHandler felhasználja a platformeseményt Microsoft.Storage.BlobCreated, kinyeri az eredeti műveleti környezetet, és közzétesz egy sikeres vagy sikertelen befejezési választ.

Diagram showing the BlobCopyHandler asynchronous flow example with event successful.

Hosszan futó függvények

Amikor a Gridwich üzembe helyez egy új Functions-alkalmazást, az elvetheti az aktuális, hosszú ideig futó folyamatokat. Ha ezek a folyamatok hirtelen véget érnek, nincs állapot, és nincs jelentés a hívónak. A Gridwichnek új Functions-alkalmazásokat kell üzembe helyeznie, miközben a hosszú ideig futó függvények esetében is zökkenőmentesen kezeli az áttűnést, és nem hiányoznak üzenetek.

A megoldásnak a következőnek kell lennie:

  • Ne tartsa meg a Gridwich-alkalmazás futó példányainak állapotát.
  • Ne ölje meg a folyamatokat csak azért, mert valami új üzembe helyez, vagy egy új üzenet ugyanazt a tevékenységet kéri.
  • Ne hívjon meg további Azure-számítási feladatokat, például a Durable Functionst, a Functions Appst, a Logic Appst vagy az Azure Container Instancest.

A Gridwich az Azure Functions-pont üzembe helyezési és lemondási jogkivonatait használja a megbízható, hosszú ideig futó függvények követelményeinek való megfeleléshez.

Az alábbi ábra a Gridwich-feladatok többségének működését mutatja be. A zöld mező azt a feladatot jelöli, amelyet a Gridwich átad egy külső szolgáltatásnak. A Gridwich ezután eseményvezérelt módon reagál az állapotra. A piros mező egy olyan függvényt jelenít meg, amely hosszú ideig fut a Gridwichen.

Diagram showing short-running and long-running functions.

A Functions-futtatókörnyezet hozzáadja a lemondási jogkivonatot, amikor az alkalmazás leáll. A Gridwich észleli a jogkivonatot, és hibakódokat ad vissza az összes kéréshez és a jelenleg futó folyamatokhoz.

A pont üzembe helyezése új szoftververziókat helyez üzembe. Az éles pont rendelkezik a futó alkalmazással, az előkészítési pont pedig az új verzióval. Az Azure üzembe helyezési lépések sorozatát hajtja végre, majd felcseréli a pontpéldányokat. A régi példány a folyamat utolsó lépéseként újraindul.

A Gridwich 30 másodpercet vár a gazdagépnevek újrakészítése után, így a HTTP által aktivált függvények esetében a Gridwich legalább 30 másodpercet garantál a régi éles pont újraindítása előtt. Más eseményindítókat olyan alkalmazásbeállítások vezérelhetnek, amelyek nem rendelkeznek mechanizmussal az alkalmazásbeállítás-frissítésekre való várakozáshoz. Ezek a függvények megszakítást kockáztatnak, ha a végrehajtás közvetlenül a régi éles pont újraindítása előtt kezdődik.

További információ: Mi történik az Azure Functions és az Azure Functions üzembehelyezési pontjainak pontcseréje során?

Összetevők

A Gridwich médiafeldolgozási megoldás az Azure Event Gridet, az Azure Functionst, az Azure Blob Storage-t, az Azure Logic Appst és az Azure Key Vaultot használja. A CI/CD és a saga vezénylési folyamatai az Azure Repost, az Azure Pipelinest és a Terraformot használják.

  • Az Azure Event Grid felügyeli a Gridwich-események útválasztását két szendvicses Event Grid-feladattal, amelyek lehetővé teszik az aszinkron médiaesemények feldolgozását. Az Event Grid egy rendkívül megbízható kéréskézbesítési végpont. Az Azure-platform biztosítja a kérelemkézbesítési végpont szükséges üzemidejét és stabilitását.

    A Gridwich az Event Grid sématulajdonság-objektumánEvent.Data belüli eseményeket foglalja magában, amely átlátszatlan az Event Grid-közvetítő és -átviteli réteg számára. A Gridwich az események irányításához az és dataVersion az eventType objektummezőket is használja. Annak érdekében, hogy az Event Grid-kérelemközvetítő más kiadvány-előfizetéses eseményközvetítőkkel helyettesíthető legyen, a Gridwich a lehető legkevesebb eseménymezőtől függ, és nem használja a topic mezőket.subject

  • Az Azure Functions lehetővé teszi az eseményvezérelt kód futtatását anélkül, hogy explicit módon ki kellene építenie vagy kezelnie kellene az infrastruktúrát. A Gridwich egy Azure Functions-alkalmazás, amely különböző függvények végrehajtását üzemelteti.

  • Az Azure Blob Storage skálázható, költséghatékony felhőalapú tárolást és hozzáférést biztosít strukturálatlan adatokhoz, például médiaeszközökhöz. A Gridwich az Azure Storage blokkblobokat és a tárolókat egyaránt használja.

  • Az Azure Key Vault védi az Azure és külső alkalmazások és szolgáltatások által használt titkosítási kulcsokat, jelszavakat és egyéb titkos kulcsokat.

  • Az Azure DevOps fejlesztői és üzemeltetési szolgáltatások készlete, beleértve a Git-alapú kódtárakat, valamint az Azure-ral integrálható automatizált buildelési és kiadási folyamatokat. A Gridwich az Azure Repos használatával tárolja és frissíti a kódprojekteket, valamint az Azure Pipelines for CI/CD-t és más munkafolyamatokat.

  • A Terraform egy nyílt forráskódú eszköz, amely az infrastruktúrát kódként használja az infrastruktúrák és szolgáltatások kiépítéséhez és kezeléséhez.

Alternatívák

  • A Tartós függvények, amelyek beépített állapottárolóval rendelkeznek a hosszú ideig futó műveletekhez, átlátszatlan műveleti környezetet is biztosíthatnak. A Durable Functions több feladatot is létrehozhat egy műveleten belül, és mentheti a műveleti környezetet bemenetként vagy kimenetként a művelethez. A Gridwich valójában minden munkatevékenységhez használhatja a Durable Functionst, de ez a megközelítés növeli a kód összetettségét.

  • Az Event Grid-infrastruktúrától való jobb leválasztást az EventGridHandlerBaseRequestHandlerBaseújrabontásával és az Event Grid-objektumokhoz vagy -típusokhoz való kapcsolódás eltávolításával érheti el. Ez az újrabontási osztály csak az alapszintű DTO-kban foglalkozna, és nem az átvitelspecifikus objektumtípusokban. Hasonlóképpen, az IEventGridDispatcher egy konkrét EventGridDispatcher implementációval is rendelkezhetIResponseDispatcher.

  • A Gridwich.SagaParticipants.Storage.AzureStorage könyvtár olyan tárolási szolgáltatásokat is tartalmaz, amelyeket más saga-résztvevők használnak. Ha az interfészek egy alapprojektben vannak, elkerülheti a vezérlési (IoC-) problémákat, de a felületeket külön tárolóinfrastruktúra-átjárótárba is kinyerheti.

  • A Gridwich Functions-alkalmazás függőséginjektálással regisztrál egy vagy több kérelemkezelőt adott eseménytípusokhoz és adatverziókhoz. Az alkalmazás az EventGridDispatchert az Event Grid eseménykezelőinek gyűjteményébe injektálja, a diszpécser pedig lekérdezi a kezelőket, hogy melyikek dolgozzák fel az eseményt.

    Alternatív megoldásként használhatja az Event Grid platform által biztosított esemény-előfizetést és szűrési mechanizmust. Ez a mechanizmus egy 1:1-alapú üzemi modellt ír elő, amelyben egy Azure-függvény csak egy eseménykezelőt üzemeltet. Bár a Gridwich 1:0-s modellt használ, a tiszta architektúra azt jelenti, hogy a megoldás újrabontása az 1:1-re nem lenne nehéz.

  • A monolitikus Gridwich-architektúra helyett egy alternatív mikroszolgáltatást a Microservices alternatívában talál.

Forgatókönyv részletei

Egy jól ismert tömegmédia- és szórakoztató konglomerátum a helyszíni videostreamelési szolgáltatását egy felhőalapú megoldásra cserélte a videoeszközök betöltésére, feldolgozására és közzétételére. A vállalat fő célja az Volt, hogy kihasználja az Azure-felhőkapacitást, a költségeket és a rugalmasságot a következők érdekében:

  • Nyers videofájlok betöltése, feldolgozása és közzététele, valamint médiakérelmek teljesítése.
  • A kódolási és az új beviteli és terjesztési képességek fejlesztése nagy léptékben, valamint egy tiszta kialakítású megközelítéssel.
  • Folyamatos integráció és teljesítés (CI/CD) megvalósítása a médiaeszköz-kezelési (MAM) folyamathoz.

E célok elérése érdekében a Microsoft mérnöki csapata kifejlesztette a Gridwichet, egy állapot nélküli eseményfeldolgozási keretrendszert, amelyet egy külső saga munkafolyamat-vezénylési rendszer hajt.

Lehetséges használati esetek

A mérnöki csapat úgy fejlesztette ki a Gridwichet, hogy megfeleljen az alábbi alapelveknek és iparági szabványoknak:

A Gridwich rendszer az Azure-beli médiaeszközök feldolgozására és továbbítására vonatkozó ajánlott eljárásokat tartalmazza. Bár a Gridwich rendszer médiaspecifikus, az üzenetfeldolgozási és eseménykezelési keretrendszer bármilyen állapot nélküli eseményfeldolgozási munkafolyamatra alkalmazható.

A forgatókönyv üzembe helyezése