Přehled programovacího modelu

Durable Functions je rozšíření Azure Functions, které do aplikace funkcí přidává stavové možnosti orchestrace. Aplikace Durable Functions se skládá z různých funkcí Azure, přičemž každá hraje určitou roli: orchestrátor, aktivita, entita nebo klient. Tyto role odpovídají specializovaným typům trigger a vazeb, které poskytuje rozšíření Durable Functions.

Sady SDK durable task umožňují vytvářet stavové aplikace odolné proti chybám na libovolné výpočetní platformě. Vaše aplikace definuje orchestrátory, aktivity a entity jako třídy nebo funkce, které zaregistrujete u pracovníka. Samostatné klientské rozhraní API umožňuje spouštět a spravovat instance orchestrace.

Následující tabulka shrnuje základní programovací komponenty a jejich role:

Součást Úloha Definováno podle
Orchestrátor Koordinuje logiku pracovního postupu Spouštěč orchestrace
Activity Provede jednu jednotku práce. Aktivace triggeru
Entita Spravuje malou část stavu systému. Spouštěč entity
Klient Spouští a spravuje orchestrace a entity. Trvalá vazba klienta
Součást Úloha Definováno podle
Orchestrátor Koordinuje logiku pracovního postupu Třída nebo funkce zaregistrovaná s pracovníkem
Activity Provede jednu jednotku práce. Třída nebo funkce zaregistrovaná s pracovníkem
Entita Spravuje malou část stavu systému. Třída zaregistrovaná u pracovníka
Klient Spouští a spravuje orchestrace a entity. DurableTaskClient Rozhraní api

Orchestrátory

Orchestrátory definují pracovní postup: jaké akce se mají provést, v jakém pořadí a jak zpracovat výsledky. Logiku orchestrátoru napíšete jako běžný kód pomocí standardních řídících struktur, jako jsou například smyčky, podmínkové konstrukce a bloky try/catch.

Orchestrátor může naplánovat několik typů úloh:

Orchestrátory můžou také komunikovat s entitami.

V Durable Functions definujete orchestrátor pomocí vazby aktivační události orchestration. Trigger poskytuje kontextový objekt, který používáte k naplánování úkolů a přijímání výsledků.

V sadách SDK Durable Task definujete orchestrátor implementací třídy nebo funkce a jeho registrací u pracovního procesu Durable Task. Orchestrátor obdrží kontextový objekt, který použijete k naplánování úkolů a příjmu výsledků.

Důležité

Kód orchestrátoru musí být deterministický. Modul runtime Durable Task používá k opětovnému sestavení stavu orchestrátoru ukládání událostí a přehrávání, takže nedeterministický kód může způsobit selhání nebo zablokování. Podrobné pokyny najdete v tématu Omezení kódu nástroje Orchestrator.

Úplný přehled chování orchestrátoru, včetně přehrání, identity instance a zpracování chyb, najdete v tématu Trvalé orchestrace.

Activities

Aktivity jsou základní jednotkou práce v durabilní orchestraci. Každá aktivita obvykle představuje jeden úkol, například volání webového rozhraní API, zápis do databáze nebo výpočet výsledku. Orchestrátoři volají aktivity, aby dělali svou skutečnou práci.

Aktivity se liší od orchestrátorů klíčovými způsoby:

  • Žádná omezení kódu. Orchestrátory musí být deterministické, ale aktivity můžou spouštět jakýkoli kód, včetně nedeterministických nebo dlouhotrvajících operací.
  • Zajištění alespoň jednoho spuštění Modul runtime zaručuje, že každá aktivita běží alespoň jednou během orchestrace. Pokud dojde k selhání po dokončení aktivity, ale před zaznamenáným výsledkem, modul runtime ho může spustit znovu.
  • Jediná zodpovědnost. Každá aktivita přijímá jeden vstup a vrací jeden výstup. Pokud chcete předat více hodnot, použijte komplexní typ nebo kolekci.

Funkci aktivity definujete pomocí vazby triggeru aktivity. Trigger poskytuje vstup, který orchestrátor předal při plánování aktivity.

Aktivitu definujete implementací třídy nebo funkce a registrací pomocí pracovního procesu Durable Task. Aktivita obdrží vstup, který orchestrátor předal při plánování.

Poznámka:

Protože aktivity zaručují vykonání alespoň jednou, snažte se, aby logika aktivity byla idempotentní, kdykoli je to možné. Například místo vkládání použijte operaci "upsert" nebo zkontrolujte existující výsledky před vytvořením nových prostředků.

Aktivity se můžou spouštět sériově, paralelně nebo v kombinaci obou.

Entitety

Entity spravují malé, odolné části stavu. Každá entita má jedinečnou identitu a sadu pojmenovaných operací, které mohou číst nebo aktualizovat svůj interní stav. Entity se liší od orchestrátorů v tom, že spravují stav explicitně prostřednictvím operací místo implicitně prostřednictvím toku řízení. Liší se také od orchestrátorů v tom, že nemají stejná omezení kódu – operace entit mohou spouštět jakýkoli kód, včetně nedeterministických nebo dlouhotrvajících operací.

Mezi běžné použití entit patří:

  • Agregace dat z více zdrojů
  • Implementace distribuovaných zámků nebo semaforů
  • Modelování stavových objektů, jako jsou nákupní košíky nebo herní relace

Entity spouští operace sériově: pro danou instanci entity se spustí pouze jedna operace najednou. Toto sériové spuštění zabraňuje konfliktům při souběžném zpracování bez nutnosti explicitního zamykání.

Funkci entity definujete pomocí vazby triggeru entity.

Poznámka:

Funkce entit jsou podporované v .NET, JavaScriptu/TypeScriptu, Python a Java, ale ne v PowerShellu.

Entitu definujete implementací třídy a její registrací u Durable Task workeru.

Poznámka:

Podpora entit je dostupná v sadách SDK .NET, JavaScript/TypeScript a Python. Sada Java SDK v současné době nepodporuje entity.

Kompletní průvodce definováním, voláním a správou entit najdete v tématu Durable entity.

Klient

Klientská komponenta je způsob interakce s orchestracemi a entitami mimo orchestraci. Mezi běžné klientské operace patří:

  • Plánování nových orchestracčních instancí
  • Dotazování na stav spuštěných nebo dokončených orchestrací
  • Generování událostí pro čekající orchestraci
  • Pozastavení a obnovení instancí orchestrace
  • Ukončení instancí orchestrace
  • Signaling entity operace a čtení stavu entity

Jakákoli jiná než orchestrátorová funkce může fungovat jako klientská funkce. To, co ho činí klientem, je použití odolné výstupní vazby klienta. Například můžete spustit orchestraci z funkce spuštěné protokolem HTTP, z funkce spuštěné frontou nebo z funkce spuštěné časovačem.

Odolné klientské vázání také poskytuje rozhraní API pro interakci s entitami, včetně signalizace operací entit a čtení stavu entity. Další informace najdete v vazbě klienta entity.

V Durable Task SDK komunikujete s orchestracemi a entitami prostřednictvím třídy DurableTaskClient. V kódu aplikace vytvoříte instanci klienta a zavoláte její metody pro spuštění, dotazování nebo správu orchestrace a instancí entit. Klienta můžete použít z libovolné části aplikace – koncového bodu HTTP, služby na pozadí, konzolové aplikace nebo jakéhokoli jiného kódu.

Podrobné informace o všech operacích správy instancí, včetně ukázek kódu pro každý jazyk, najdete v tématu Správa instancí orchestrace.

Další kroky

Začněte vytvořením první aplikace Durable Function: