A programozási modell áttekintése

Durable Functions a Azure Functions bővítménye, amely állapotalapú vezénylési képességeket ad hozzá a függvényalkalmazáshoz. A Durable Functions-alkalmazások különböző Azure függvények alkotják, amelyek mindegyike egy adott szerepkört játszik: vezénylő, tevékenység, entitás vagy ügyfél. Ezek a szerepkörök a Durable Functions bővítmény által biztosított speciális trigger- és kötéstípusoknak felelnek meg.

A Durable Task SDK-k segítségével állapotalapú, hibatűrő alkalmazásokat hozhat létre bármely számítási platformon. Az alkalmazás a vezénylőket, tevékenységeket és entitásokat osztályként vagy függvényként határozza meg, amelyeket egy munkásnál regisztrál. Egy különálló kliens API lehetővé teszi az orkestrációs példányok elindítását és kezelését.

Az alábbi táblázat összefoglalja az alapvető programozási összetevőket és azok szerepköreit:

Komponens Szerep Definíció:
Hangszerelő Munkafolyamat-logika koordinálása Vezénylési eseményindító
Tevékenység Egyetlen munkaegységet hajt végre Tevékenység-eseményindító
Entitás Egy kis állapot kezelése Entitás-eseményindító
Ügyfél Orchesztációk és entitások indítása és kezelése Tartós ügyfélkötés
Komponens Szerep Definíció:
Hangszerelő Munkafolyamat-logika koordinálása A munkafolyamatnál regisztrált osztály vagy függvény
Tevékenység Egyetlen munkaegységet hajt végre A munkafolyamatnál regisztrált osztály vagy függvény
Entitás Egy kis állapot kezelése A dolgozónál regisztrált osztály
Ügyfél Orchesztációk és entitások indítása és kezelése DurableTaskClient API

Automatizációs vezérlő

A vezénylők határozzák meg a munkafolyamatot: milyen műveleteket kell végrehajtani, milyen sorrendben és hogyan kell kezelni az eredményeket. Az orchestrator logikát hagyományos kódként írhatja szabványos vezérlési szerkezetek, például ciklusok, feltételes utasítások és try/catch blokkok használatával.

A vezénylők többféle feladatot ütemezhetnek:

Az vezénylők az entitásokkal is kommunikálhatnak.

A Durable Functions alkalmazásban egy vezénylőt az orchestration trigger kötés használatával definiálhat. Az eseményindító egy környezeti objektumot biztosít, amellyel feladatokat ütemezhet és eredményeket fogadhat.

A Durable Task SDK-kban egy osztály vagy függvény implementálásával és a Durable Task feldolgozónál való regisztrálásával definiálhat vezénylőt. A vezénylő egy környezeti objektumot kap, amellyel feladatokat ütemezhet és eredményeket fogadhat.

Fontos

Az orchestrator-kódnak determinisztikusnak kell lennie. A Durable Task futtatókörnyezet esemény-beszerzést és visszajátszást használ a vezénylési állapot újraépítéséhez, így a nemdeterminisztikus kód hibákhoz vagy holtpontokhoz vezethet. Részletes útmutatásért tekintse meg az Orchestrator kódkorlátozásait.

Az orchestrátor viselkedésének teljes áttekintéséért, beleértve a visszajátszást, a példány identitását és a hibakezelést, tekintse meg a Durable orchestrációkat.

tevékenységek

A tevékenységek a tartós orkesztráció alapvető munkaegységei. Minden tevékenység általában egyetlen feladatot jelöl, például egy webes API meghívását, egy adatbázisba való írást vagy egy eredmény számítását. A vezénylők a valódi munkájuk elvégzésére hívják a tevékenységeket.

A tevékenységek kulcsfontosságú módon különböznek a vezénylőktől:

  • Nincsenek kódkorlátozások. A vezénylőknek determinisztikusnak kell lenniük, de a tevékenységek bármilyen kódot futtathatnak, beleértve a nem meghatározott vagy hosszú ideig futó műveleteket is.
  • Legalább egyszeri végrehajtás A futtatókörnyezet garantálja, hogy minden tevékenység legalább egyszer fut egy orkestráció során. Ha a tevékenység befejeződése után, de az eredmény rögzítése előtt hiba történik, a futtatókörnyezet újrafuttathatja azt.
  • Egyetlen felelősség. Minden tevékenység egy bemenetet kap, és egy kimenetet ad vissza. Több érték átadásához használjon összetett típust vagy gyűjteményt.

Tevékenységfüggvényt a tevékenységindító kötésével definiálhat. Az eseményindító megadja azt a bemenetet, amelyet a vezénylő adott át a tevékenység ütemezése során.

Egy tevékenységet egy osztály vagy függvény implementálásával és a Durable Task feldolgozónál való regisztrálásával határozhat meg. A tevékenység megkapja a vezénylő által az ütemezés során átadott bemenetet.

Megjegyzés:

Mivel a tevékenységek csak legalább egyszer garantálják a végrehajtást, a tevékenységlogika legyen idempotens , amikor csak lehetséges. Használjon például "upserts"-eket beszúrások helyett, vagy ellenőrizze a meglévő eredményeket, mielőtt új erőforrásokat hoz létre.

A tevékenységek sorozatosan, párhuzamosan vagy mindkettő kombinációjában futtathatók.

Entities

Az entitások kis méretű, tartós állapotokat kezelnek. Minden entitás egyedi identitással és elnevezett műveletekkel rendelkezik, amelyek beolvashatják vagy frissíthetik a belső állapotát. Az entitások abban különböznek a vezénylőktől, hogy explicit módon kezelik az állapotot műveleteken keresztül, nem pedig implicit módon a vezérlési folyamaton keresztül. Abban is különböznek a vezénylőktől, hogy nem rendelkeznek ugyanazokkal a kódkorlátozásokkal – az entitásműveletek bármilyen kódot futtathatnak, beleértve a nem meghatározott vagy hosszan futó műveleteket is.

Az entitások gyakori felhasználási módjai a következők:

  • Adatok összesítése több forrásból
  • Elosztott zárolások vagy szemaphorok implementálása
  • Állapotalapú objektumok, például bevásárlókocsik vagy játék munkamenetek modellezése

Az entitások sorosan futtatják a műveleteket: egy adott entitáspéldányhoz egyszerre csak egy művelet fut. Ez a soros végrehajtás explicit zárolás nélkül megakadályozza az egyidejűségi ütközéseket.

Egy entitásfüggvényt az entitás-eseményindító kötésével definiálhat.

Megjegyzés:

Az entitásfüggvények .NET, JavaScript/TypeScript, Python és Java támogatottak, a PowerShellben azonban nem.

Egy entitást úgy határozhat meg, hogy megvalósít egy osztályt, és regisztrálja azt a Durable Task workerben.

Megjegyzés:

Az entitások támogatása a .NET, a JavaScript/TypeScript és Python SDK-kban érhető el. A Java SDK jelenleg nem támogatja az entitásokat.

Az entitások definiálására, meghívására és kezelésére vonatkozó teljes útmutatóért tekintse meg a Durable entitásokat.

Ügyfél

Az klienskomponens az a módszer, ahogyan a vezénylésen kívüli vezénylésekkel és entitásokkal létesítünk interakciót. Gyakori ügyfélműveletek a következők:

  • Orkesztrációs új példányok ütemezése
  • Futó vagy befejezett vezénylések állapotának lekérdezése
  • Események előkészítése várakozási vezénylésekre
  • Orchestration példányok felfüggesztése és folytatása
  • Orchesztrációs példányok megszüntetése
  • Entitásműveletek jelzése és entitásállapot olvasása

A nem vezénylő függvények ügyfélfüggvényként is működhetnek. Az, ami ügyféllé teszi, a tartós ügyfélkimeneti kötés használata. Elindíthat például egy vezénylést EGY HTTP által aktivált függvényből, egy üzenetsor által aktivált függvényből vagy egy időzítő által aktivált függvényből.

A tartós ügyfélkötés api-kat is biztosít az entitásokkal való interakcióhoz, beleértve az entitásműveletek jelzését és az entitás állapotának olvasását. További információkért tekintse meg a kliensentitás-kötést.

A Durable Task SDK-kban a DurableTaskClient osztályon keresztül kezelheti az orchestrationöket és entitásokat. Létrehoz egy ügyfélpéldányt az alkalmazáskódban, és meghívja annak metódusait a vezénylési és entitáspéldányok indításához, lekérdezéséhez vagy kezeléséhez. Az ügyfél az alkalmazás bármely részéből használható – HTTP-végpontból, háttérszolgáltatásból, konzolalkalmazásból vagy bármilyen más kódból.

Az összes példánykezelési művelettel kapcsolatos részletes információkért, beleértve az egyes nyelvekhez tartozó kódmintákat, tekintse meg a vezénylési példányok kezelését ismertető cikket.

Következő lépések

Első lépések az első Durable Function-alkalmazás létrehozásával: