Doporučení pro vývoj úloh na pozadí

Tato příručka popisuje doporučení pro vývoj úloh na pozadí. Úlohy na pozadí se spouštějí automaticky bez nutnosti zásahu uživatele. Mnoho aplikací vyžaduje úlohy na pozadí, které běží nezávisle na uživatelském rozhraní.

Některé příklady úloh na pozadí zahrnují dávkové úlohy, intenzivní úlohy zpracování a dlouhotrvající procesy, jako jsou pracovní postupy. Aplikace spustí úlohu a zpracuje interaktivní požadavky od uživatelů. Pokud například aplikace potřebuje vygenerovat miniatury obrázků, které uživatelé nahrají, je možné provést úlohu na pozadí, která vygeneruje miniaturu a uloží ji do úložiště. Uživatel nemusí čekat na dokončení procesu. Zákazník zadá objednávku, která zahájí proces na pozadí pro zpracování objednávky. Zákazník bude dál procházet webovou aplikaci během spuštění úlohy na pozadí. Po dokončení úlohy na pozadí aktualizuje uložená data objednávky a odešle zákazníkovi e-mail s potvrzením objednávky.

Úlohy na pozadí pomáhají minimalizovat zatížení uživatelského rozhraní aplikace, což zlepšuje dostupnost a zkracuje dobu interaktivní odezvy.

Chcete-li vybrat, kterou úlohu chcete označit jako úlohu na pozadí, zvažte, zda se úloha spouští bez interakce uživatele a zda uživatelské rozhraní musí čekat na dokončení úlohy. Úlohy, které vyžadují, aby uživatel nebo uživatelské rozhraní čekali na jejich spuštění, obvykle nejsou vhodné úlohy na pozadí.

Terminologie

Než začnete s vývojem úloh na pozadí, seznamte se s těmito klíčovými pojmy.

Term definice
Asynchronní zpracování Zpracování operací nezávisle na hlavním toku aplikace bez čekání na dokončení. Podporuje neblokovací operace, ve kterých volající proces pokračuje bez čekání na dokončení úlohy na pozadí.
Úloha na pozadí Automatizovaná úloha, která běží nezávisle na uživatelském rozhraní, aniž by vyžadovala interakci uživatele. Obvykle zpracovává operace, jako je dávkové zpracování, transformace dat, plánovaná údržba nebo dlouhotrvající pracovní postupy.
Checkpoint Uložený stav dlouhotrvající úlohy umožňující obnovu z posledního známého dobrého bodu místo restartování od začátku. Kritické pro odolné implementace úloh na pozadí.
Fronta nedoručených zpráv Speciální fronta, která ukládá zprávy, jež se ani po několika pokusech nepodaří úspěšně zpracovat. Zabraňuje tomu, aby jedovaté zprávy zablokovaly hlavní frontu zpracování, a zároveň je uchovává pro účely vyšetřování a řešení.
Idempotentní Vlastnost operace, která vytvoří stejný výsledek bez ohledu na to, kolikrát se spustí se stejným vstupem. Nezbytné pro úlohy na pozadí, které můžou zpracovávat duplicitní zprávy nebo opakovat po selhání.
Jedovatá zpráva Zpráva, která opakovaně způsobuje selhání zpracování, která potenciálně blokuje frontu a zabraňuje zpracování dalších zpráv. Vyžaduje speciální zpracování, aby se zabránilo přerušení celého systému.
Singleton Vzor návrhu, který zajišťuje, že se najednou spustí jenom jedna instance úlohy na pozadí, i když je k dispozici více výpočetních instancí. Používá se pro úlohy, které nesmí běžet souběžně, například operace konzistence dat.
Webová úloha Funkce služby Azure App Service, která podporuje spouštění skriptů nebo programů jako úlohy na pozadí v kontextu webové aplikace. Podporuje režim průběžného i aktivovaného spouštění.

Vyhodnocení potřeby úloh na pozadí

Některé příklady úloh na pozadí jsou:

  • Úlohy náročné na procesor, jako jsou matematické výpočty nebo analýza strukturálního modelu.

  • Úlohy náročné na vstupně-výstupní operace, jako je spuštění řady transakcí úložiště nebo indexování souborů.

  • Dávkové úlohy, jako jsou noční aktualizace dat nebo plánované zpracování.

  • Dlouhotrvající pracovní postupy, jako je plnění objednávek nebo poskytování služeb a systémů.

  • Zpracování citlivých dat, které přenese úkol na bezpečnější místo pro zpracování. Například možná nebudete chtít zpracovávat citlivá data v rámci webové aplikace. Místo toho můžete použít vzor, jako je Vzor gatekeeper k přenosu dat do izolovaného procesu na pozadí, který má přístup k chráněnému úložišti.

Výběr správných aktivačních událostí

Spusťte úlohy na pozadí pomocí:

Spouštěče řízené událostmi

Akce spustí vyvolání řízené událostmi, které spustí úlohu na pozadí. Mezi příklady triggerů řízených událostí patří:

  • Uživatelské rozhraní nebo jiná úloha umístí zprávu do fronty, jak je popsáno ve stylu architektury Web-Queue-Worker. Zpráva obsahuje data o dříve provedené akci, například o zákazníkovi, který objednávku zadal. Úloha na pozadí monitoruje tuto frontu a detekuje příchod nové zprávy. Přečte zprávu a použije data zprávy jako vstup pro úlohu na pozadí. Tento model se nazývá asynchronní komunikace založená na zprávách.

  • Uživatelské rozhraní nebo jiná úloha uloží nebo aktualizuje hodnotu, která je v úložišti. Úloha na pozadí monitoruje úložiště a detekuje změny. Čte data a používá je jako vstup pro úlohu na pozadí.

  • Uživatelské rozhraní nebo jiná úloha odešle požadavek na koncový bod, jako je HTTPS URI nebo API, které je vystaveno jako webová služba. V rámci požadavku uživatelské rozhraní nebo úloha přenese data, která úloha na pozadí vyžaduje. Koncový bod nebo webová služba vyvolá úlohu na pozadí, která použije data jako svůj vstup.

Mezi další příklady úloh, které jsou vhodné pro vyvolání řízené událostmi, patří zpracování obrázků, pracovní postupy, odesílání informací do vzdálených služeb, odesílání e-mailových zpráv a zřizování nových uživatelů ve víceklientských aplikacích.

Plánované spouštěče

Časovač spustí vyvolání řízené plánem, které spustí úlohu na pozadí. Mezi příklady triggerů řízených plánem patří:

  • Časovač, který běží místně v aplikaci nebo jako součást operačního systému aplikace, pravidelně vyvolává úlohu na pozadí.

  • Časovač, který běží v jiné aplikaci, jako je Azure Logic Apps, pravidelně odesílá požadavek do rozhraní API nebo webové služby. Rozhraní API nebo webová služba vyvolá úlohu na pozadí.

  • Samostatný proces nebo aplikace spustí časovač, který vyvolá úlohu na pozadí po časové prodlevě nebo v určitý čas.

Mezi další příklady úloh, které jsou vhodné pro volání řízené podle plánu, patří rutiny dávkového zpracování (například aktualizace souvisejících seznamů produktů pro zákazníky na základě jejich nedávného chování), rutinní úlohy zpracování dat (například aktualizace indexů nebo generování kumulovaných výsledků), analýza dat pro denní sestavy, čištění dat a kontroly konzistence dat.

Pokud používáte úlohu řízenou podle plánu, která se musí spouštět jako jedna instance, projděte si následující aspekty:

  • Pokud je výpočetní instance, která spouští plánovač, například virtuální počítač, který používá naplánované úlohy Windows, škálovaná, pak spouštíte několik instancí plánovače. Více instancí plánovače může spustit více instancí úlohy. Další informace naleznete v tématu Co znamená idempotentní v softwarových systémech?

  • Pokud úkoly běží déle, než je doba mezi událostmi plánovače, může plánovač spustit jinou instanci úlohy při spuštění předchozí úlohy.

Vrácení dat do pracovní zátěže

Úlohy na pozadí běží asynchronně v samostatném procesu nebo dokonce na samostatném místě, odděleně od uživatelského rozhraní nebo procesu, který tyto úlohy na pozadí vyvolal. V ideálním případě jsou úlohy na pozadí operace typu spustit a zapomenout. Průběh jejich běhu nemá vliv na uživatelské rozhraní ani na volající proces, což znamená, že volající proces nečeká na dokončení úloh. Uživatelské rozhraní a proces volání nemohou zjistit, kdy úloha končí.

Pokud potřebujete úkol na pozadí, který by komunikoval s volajícím úkolem, aby naznačil průběh nebo dokončení, musíte implementovat mechanismus. Mezi příklady patří:

  • Zapsat hodnotu indikátoru stavu do úložiště, které je přístupné uživatelskému rozhraní nebo úloze volajícího, které může tuto hodnotu sledovat nebo kontrolovat. Další data, která úloha na pozadí vrací volajícímu, lze umístit do stejného úložiště.

  • Vytvořte frontu odpovědí, kterou monitoruje uživatelské rozhraní nebo volající. Úloha na pozadí může odesílat zprávy do fronty, které označují stav. Data, která úloha na pozadí vrátí volajícímu, mohou být umístěna ve zprávách. Pro Azure Service Bus použijte vlastnosti ReplyTo a CorrelationId k implementaci této funkce.

  • Vystavte API nebo koncový bod úlohy na pozadí, k nimž může mít přístup uživatelské rozhraní nebo volající, aby získali informace o stavu. Odpověď může obsahovat data, která úloha na pozadí vrací volajícímu.

  • Nakonfigurujte úlohu na pozadí tak, aby volala zpět uživatelskému rozhraní nebo volajícímu prostřednictvím rozhraní API, aby oznamovala stav v předdefinovaných bodech nebo po dokončení. Můžete použít události vyvolané místně nebo mechanismus publikování a přihlášení k odběru. Požadavek nebo datová část události může zahrnovat data, která úloha na pozadí vrátí volajícímu.

Rozdělení úloh na pozadí

Pokud do existující výpočetní instance zahrnete úlohy na pozadí, zvažte, jak tyto změny ovlivňují atributy kvality výpočetní instance a úlohy na pozadí. Zvažte tyto faktory, abyste se rozhodli, jestli chcete úkoly umístit s existující výpočetní instancí, nebo je oddělit do jiné výpočetní instance:

  • Dostupnost: Úlohy na pozadí nemusí potřebovat stejnou úroveň dostupnosti jako jiné části aplikace, zejména uživatelské rozhraní a části, které přímo zahrnují interakci uživatele. Úlohy na pozadí můžou mít vyšší odolnost proti latenci, opakovaným selháním připojení a dalším faktorům, které ovlivňují dostupnost, protože operace se dají zařadit do fronty. Musí však existovat dostatečná kapacita, aby se zabránilo zálohovaným požadavkům, které můžou blokovat fronty a ovlivnit celou aplikaci.

  • Škálovatelnost: Úlohy na pozadí mají pravděpodobně různé požadavky na škálovatelnost v porovnání s uživatelským rozhraním a interaktivními částmi aplikace. Možná budete muset škálovat uživatelské rozhraní tak, aby splňovalo špičky v poptávce. Vynikající úlohy na pozadí se můžou spouštět během méně zaneprázdněných časů a s menším počtem výpočetních instancí.

  • Odolnost: Pokud výpočetní instance, která hostuje pouze úlohy na pozadí, selže, nemusí mít závažnou vliv na celou aplikaci. Žádosti o tyto úlohy je možné zařadit do fronty nebo odložit, dokud nebude úkol k dispozici. Pokud se výpočetní instance nebo úlohy můžou restartovat v příslušném intervalu, nemusí to mít vliv na uživatele aplikace.

  • Zabezpečení: Úlohy na pozadí můžou mít různé požadavky na zabezpečení nebo omezení v porovnání s uživatelským rozhraním nebo jinými částmi aplikace. K určení jiného prostředí zabezpečení pro úlohy použijte samostatnou výpočetní instanci. K maximalizaci zabezpečení a oddělení můžete také použít vzory, jako je Gatekeeper, k izolaci výpočetních instancí na pozadí z uživatelského rozhraní.

  • Výkon: Zvolte typ výpočetní instance pro úlohy na pozadí, které odpovídají požadavkům na výkon úlohy. Pokud úlohy nevyžadují stejné možnosti zpracování jako uživatelské rozhraní, můžete použít levnější výpočetní možnost. Nebo můžete použít větší instanci, pokud úlohy vyžadují větší kapacitu a prostředky.

  • Možnosti správy: Úlohy na pozadí můžou mít jiný rytmus vývoje a nasazení v porovnání s hlavním kódem aplikace nebo uživatelským rozhraním. Pokud chcete zjednodušit aktualizace a správu verzí, nasaďte úlohy na pozadí do samostatné výpočetní instance.

  • Náklady: Pokud přidáte výpočetní instance pro spouštění úloh na pozadí, zvýší se náklady na hostování. Pečlivě zvažte kompromis mezi větší kapacitou a dalšími náklady.

Další informace naleznete v tématu Model volby vedoucího procesu a model Konkurujících spotřebitelů.

Zabránění konfliktu prostředků

Pokud máte více instancí úlohy na pozadí, mohou soutěžit o přístup k prostředkům a službám, jako jsou databáze a úložiště. Tento souběžný přístup může způsobit kolize prostředků, což může způsobit konflikty dostupnosti služeb a poškodit integritu dat v úložišti. Vyřešte soutěžení o prostředky pomocí pesimistického uzamčení. Tento přístup brání konkurenčním instancím úlohy, aby souběžně přistupovaly ke službě nebo poškozovaly data.

Dalším přístupem k řešení konfliktů je definování úloh na pozadí jako jediného typu, aby se spustila pouze jedna instance. Tento přístup ale eliminuje výhody spolehlivosti a výkonu, které poskytuje konfigurace s více instancemi. Tato nevýhoda je obzvláště platná, pokud uživatelské rozhraní poskytuje dostatek práce, abychom zaměstnali více než jednu úlohu na pozadí.

Ujistěte se, že úloha na pozadí se může automaticky restartovat a že má dostatečnou kapacitu pro zvládnutí špiček v poptávce. Přidělte výpočetní instanci s dostatečnými prostředky, implementujte mechanismus pro řazení požadavků do fronty ke spuštění při poklesu poptávky, nebo použijte kombinaci těchto technik.

Řízení více úkolů

Úlohy na pozadí mohou být složité a ke spuštění vyžadují více úloh. V těchto scénářích je běžné rozdělit úlohu na menší samostatné kroky nebo dílčí úlohy, které může spustit více spotřebitelů. Vícekrokové úlohy jsou efektivnější a flexibilnější, protože jednotlivé kroky jsou často opakovaně použitelné ve více úlohách. Je také snadné přidat, odebrat nebo upravit pořadí kroků.

Koordinace více úkolů a kroků může být náročná, ale existují tři běžné vzorce, kterými se můžete řídit:

  • Rozložte úkol na více opakovaně použitelných kroků. Aplikace může být vyžadována k provádění různých úkolů různé složitosti na informacích, které zpracovává. Přímým, ale neflexibilním přístupem k implementaci takové aplikace je provést toto zpracování jako monolitický modul. Tento přístup však pravděpodobně sníží příležitosti pro refaktorování kódu, jeho optimalizaci nebo opětovné použití, pokud aplikace vyžaduje části stejného zpracování jinde. Další informace najdete v modelu Kanály a filtry.

  • Spravujte orchestraci kroků pro úlohu. Aplikace může provádět úlohy, které zahrnují mnoho kroků, z nichž některé mohou vyvolat vzdálené služby nebo přistupovat ke vzdáleným zdrojům. Někdy jsou jednotlivé kroky na sobě nezávislé, ale jsou řízeny aplikační logikou, která úkol implementuje. Další informace najdete v modelu Plánovač agentů Supervisor.

  • Řiďte proces obnovy pro kroky úlohy, které selžou. Pokud jeden nebo více kroků selže, aplikace může potřebovat vrátit zpět práci, kterou provádí řada kroků, které společně definují nakonec konzistentní operaci. Další informace naleznete v tématu Model kompenzační transakce.

Zajištění odolnosti úloh

Vytvářejte odolné úlohy na pozadí, které poskytují spolehlivé služby pro aplikaci. Při plánování a návrhu úloh na pozadí zvažte následující body:

  • Úlohy na pozadí musí elegantně zvládnout restartování bez poškození dat nebo zavedení nekonzistence do aplikace. Pro dlouhotrvající nebo vícekrokové úlohy zvažte použití kontrolních bodů. Pomocí kontrolních bodů můžete uložit stav úloh v trvalém úložišti nebo jako zprávy ve frontě. Můžete například ukládat informace o stavu ve zprávě, která je ve frontě, a přírůstkově aktualizovat tyto informace o stavu průběhem úkolu. Úkol lze zpracovat z posledního známého kontrolního bodu místo restartování od začátku.

    Pro fronty služby Service Bus použijte relace zpráv pro tento účel. Při relacích zpráv uložte a načtěte stav zpracování aplikace pomocí metod SetState a GetState . Další informace o návrhu spolehlivých vícekrokových procesů a pracovních postupů naleznete v vzorci Supervisor Scheduler Agent.

  • Když ke komunikaci s úlohami na pozadí používáte fronty, fronty mohou fungovat jako vyrovnávací paměť pro ukládání požadavků, které jsou odesílány nim, zatímco je aplikace vystavena větším než obvyklým zatížením. Úlohy mohou dohnat uživatelské rozhraní během méně vytížených období a restartování neblokuje uživatelské rozhraní. Další informace najdete v tématu vzor vyrovnávání zátěže založený na frontě. Pokud jsou některé úlohy důležitější než jiné, zvažte implementaci modelu Prioritní fronta , abyste zajistili, že se tyto úlohy spustí jako první.

Messages

Nakonfigurujte úlohy na pozadí, které jsou inicializovány zprávami nebo které zpracovávají zprávy tak, aby zpracovávaly nekonzistence, jako jsou zprávy, které přicházejí mimo pořadí, zprávy, které opakovaně způsobují chybu (otrávené zprávy) a zprávy, které se doručují více než jednou. Zvažte následující doporučení:

  • Někdy potřebujete zprávy zpracovávat v určitém pořadí, například zprávy, které mění data na základě existující hodnoty dat, například přidání hodnoty do existující hodnoty. Zprávy nedorazí vždy v pořadí, v jakém byly odeslány. Různé instance úlohy na pozadí také můžou zpracovávat zprávy v jiném pořadí, a to kvůli různým zatížením jednotlivých instancí.

    U zpráv, které musí být zpracovány v určitém pořadí, uveďte pořadové číslo, klíč nebo jiný indikátor, který můžou úlohy na pozadí použít ke zpracování zpráv ve správném pořadí. Pro Service Bus použijte relace zpráv k zajištění správného pořadí doručení. Návrh procesu je efektivnější, aby pořadí zpráv nebylo důležité. Další informace najdete v tématu sekvencování zpráv a časové razítko.

  • Úloha na pozadí obvykle nahlédne do zpráv ve frontě, což je dočasně skryje před ostatními příjemci zpráv. Po úspěšném zpracování úlohy zprávu odstraní. Pokud úloha na pozadí selže, když zpracuje zprávu, tato zpráva se znovu zobrazí ve frontě po vypršení časového limitu náhledu. Jiná instance úlohy zpracuje zprávu nebo další cyklus zpracování původní instance zpracuje zprávu.

    Pokud zpráva konzistentně způsobí chybu příjemce, zablokuje úlohu, frontu a nakonec samotnou aplikaci, když se fronta zaplní. Je důležité detekovat a odebírat z fronty otrávené zprávy. Pokud používáte Service Bus, automaticky nebo ručně přesuňte otrávené zprávy do přidružené fronty mrtvých zpráv.

  • Fronty jsou alespoň jednou mechanismy doručení, ale můžou doručovat stejnou zprávu více než jednou. Pokud úloha na pozadí selže, jakmile zpracuje zprávu, ale před odstraněním z fronty ji znovu zpracuje, bude zpráva k dispozici ke zpracování.

    Úlohy na pozadí by měly být idempotentní, což znamená, že když úkol zpracuje stejnou zprávu více než jednou, nezpůsobí chybu nebo nekonzistence dat aplikace. Některé operace jsou přirozeně idempotentní, například pokud je uložená hodnota nastavená na konkrétní novou hodnotu. Některé operace však způsobují nekonzistence, například pokud je hodnota přidána k existující uložené hodnotě bez ověření, že uložená hodnota je stále stejná jako při původním odeslání zprávy. Nakonfigurujte fronty služby Service Bus tak, aby automaticky odebraly duplicitní zprávy. Další informace naleznete v tématu Idempotentní zpracování zpráv.

  • Některé systémy zasílání zpráv, jako jsou fronty Azure Storage a fronty Service Bus, podporují vlastnost počtu vyřazení z fronty, která označuje, kolikrát se zpráva z fronty přečte. Tato data jsou užitečná pro zpracování opakovaných zpráv a jedových zpráv. Další informace naleznete v Úvodu do asynchronního zasílání zpráv.

Zajištění škálovatelnosti úloh

Úlohy na pozadí musí nabízet dostatečný výkon, aby bylo zajištěno, že neblokují aplikaci nebo nezdržují provoz při zatížení systému. Výkon se obvykle zlepší, když škálujete instance výpočtu, které hostí úlohy na pozadí. Při plánování a návrhu úloh na pozadí zvažte následující body související se škálovatelností a výkonem:

  • Azure Virtual Machines a funkce Web Apps služby Azure App Service můžou hostovat nasazená řešení. Podporují automatické škálování, jak horizontální rozšíření kapacity, tak snížení kapacity. Automatické škálování je určeno poptávkou a zatížením nebo předdefinovaným plánem. Automatické škálování vám pomůže zajistit, aby aplikace byla dostatečně výkonná a minimalizovala náklady za běhu.

  • Některé úlohy na pozadí mají v porovnání s jinými částmi aplikace jinou funkci výkonu, například uživatelské rozhraní nebo komponenty, například vrstvu přístupu k datům. V tomto scénáři hostujte úlohy na pozadí v samostatné výpočetní službě, aby se uživatelské rozhraní a úlohy na pozadí mohly škálovat nezávisle na správě zatížení. Pokud má více úloh na pozadí výrazně jiné možnosti výkonu, rozdělte je a škálujte každý typ nezávisle. Tato technika může zvýšit náklady během provozu.

  • Abyste zabránili ztrátě výkonu při zatížení, možná budete muset škálovat fronty úložiště a další prostředky tak, aby jediný bod v řetězci zpracování nezpůsobil zúžení. Vezměte v úvahu další omezení, jako je maximální propustnost úložiště a dalších služeb, na které aplikace a úlohy na pozadí spoléhají.

  • Návrh úloh na pozadí pro škálování Úlohy na pozadí například musí dynamicky zjišťovat počet využívaných front úložiště pro monitorování zpráv nebo odesílání zpráv do příslušné fronty.

  • Ve výchozím nastavení se webová úloha škáluje s přidruženou instancí Web Apps. Pokud však chcete, aby webová úloha běžela pouze jako jedna instance, můžete vytvořit soubor Settings.job, který obsahuje data { "is_singleton": true }JSON . Tato metoda vynutí, aby Azure spustila pouze jednu instanci webové úlohy, i když existuje více instancí přidružené webové aplikace. Tato technika je užitečná pro naplánované úlohy, které se musí spouštět pouze jako jedna instance.

  • Úlohy na pozadí mohou představovat problémy pro synchronizaci dat a koordinaci procesů, zejména pokud úlohy na pozadí závisí na sobě navzájem nebo na jiných zdrojích dat. Úlohy na pozadí mohou například řešit problémy s konzistencí dat, podmínkami závodů, záseky nebo časovými limity.

  • Úlohy na pozadí mohou ovlivnit uživatelské prostředí, pokud jsou uživateli prezentovány výsledky úloh na pozadí. Úlohy na pozadí mohou například vyžadovat, aby uživatel čekal na oznámení, obnovil stránku nebo ručně zkontroloval stav úlohy. Toto chování může zvýšit složitost uživatelské interakce a negativně ovlivnit uživatelské prostředí.

Kompromis: Na pozadí běžící úlohy zavádějí do systému více komponent a závislostí, což může zvýšit složitost a náklady na údržbu řešení. Úlohy na pozadí můžou například vyžadovat samostatnou službu fronty, službu zpracování úloh, monitorovací službu a mechanismus opakování.

Usnadnění na platformě Azure

Následující části popisují služby Azure, které můžete použít k hostování, spouštění, konfiguraci a správě úloh na pozadí.

Hostitelské prostředí

Existuje několik služeb platformy Azure, které můžou hostovat úlohy na pozadí:

  • Web Apps a WebJobs: Pomocí funkce WebJobs služby App Service můžete spouštět vlastní úlohy založené na různých skriptech nebo programech, které můžete spustit ve webové aplikaci.

  • Azure Functions: Používejte aplikace funkcí pro úlohy na pozadí, které dlouho neběží. Aplikace funkcí můžete použít také v případě, že hostujete úlohu v nedostatečně využitém plánu služby App Service.

  • Azure Logic Apps: Používejte aplikace logiky pro úlohy na pozadí, které vyžadují orchestraci napříč několika službami a systémy.

  • Virtuální počítače: Pokud máte službu Windows nebo chcete použít Plánovač úloh systému Windows, hostujte úlohy na pozadí na vyhrazeném virtuálním počítači.

  • Azure Batch: Batch je služba platformy, kterou můžete použít k naplánování práce náročné na výpočetní výkon na spravované kolekci virtuálních počítačů. Může automaticky škálovat výpočetní prostředky.

  • Azure Kubernetes Service (AKS): AKS poskytuje spravované hostitelské prostředí pro Kubernetes v Azure.

  • Azure Container Apps: S kontejnerovými aplikacemi můžete vytvářet bezserverové mikroslužby založené na kontejnerech.

Následující části obsahují důležité informace o každé z těchto možností, které vám pomůžou zvolit tu nejlepší možnost.

Web Apps a WebJobs

Pomocí funkce WebJobs můžete ve webové aplikaci spouštět vlastní úlohy jako úlohy na pozadí. Webová úloha běží jako průběžný proces v kontextu vaší webové aplikace. Webová úloha se může spustit také v reakci na událost spouštěče z Logic Apps nebo vnější faktory, jako jsou změny úložných objektů blob nebo front zpráv. WebJobs je možné spustit a zastavit na vyžádání a řádně vypnout. Pokud se nepřetržitě spuštěná webová úloha nezdaří, automaticky se restartuje. Můžete konfigurovat akce pro opakované pokusy a chyby.

Při konfiguraci WebJobu:

  • Pokud chcete, aby úloha reagovala na trigger řízený událostmi, nakonfigurujte ji tak, aby běžela nepřetržitě. Skript nebo program se uloží do složky s názvem site/wwwroot/app_data/jobs/continuous.

  • Pokud chcete, aby úloha reagovala na trigger řízený plánem, nakonfigurujte ji tak, aby běžela podle plánu. Skript nebo program se uloží do složky s názvem site/wwwroot/app_data/jobs/triggered.

  • Pokud při konfiguraci úlohy zvolíte možnost Spustit na vyžádání , spustí se při spuštění úlohy stejný kód jako Spustit podle plánu .

Webová úloha se spouští v sandboxu webové aplikace. Má přístup k proměnným prostředí a může sdílet informace, jako jsou připojovací řetězce, s webovou aplikací. Webová úloha má přístup k jedinečnému identifikátoru počítače, na kterém běží webová úloha. Připojovací řetězec s názvem AzureWebJobsStorage poskytuje přístup k frontám, blobům a tabulkám úložiště pro data aplikací. Poskytuje také přístup ke službě Service Bus pro zasílání zpráv a komunikaci. Připojovací řetězec s názvem AzureWebJobsDashboard poskytuje přístup k souborům protokolu akcí WebJob.

Webové úlohy mají následující charakteristiky:

  • Zabezpečení: Přihlašovací údaje pro nasazení webové aplikace poskytují ochranu webových úloh.

  • Podporované typy souborů: Definování webových úloh pomocí skriptů příkazů (.cmd), dávkových souborů (.bat), skriptů PowerShellu (.ps1), skriptů prostředí Bash (.sh), skriptů PHP (.php), skriptů Pythonu (.py), kódu JavaScriptu (.js) a spustitelných programů (.exe a .jar).

  • Nasazení: Skripty a spustitelné soubory můžete nasadit pomocí webu Azure Portal, sady Visual Studio nebo sady WebJobs SDK nebo je můžete zkopírovat přímo do následujících umístění:

    • Pro aktivované nasazení: site/wwwroot/app_data/jobs/triggered/<název úlohy>

    • Pro průběžné nasazování: site/wwwroot/app_data/jobs/continuous/<název úlohy>

  • Soubory protokolu: Console.Out jsou zpracovávány nebo označeny jako INFO. Console.Error se považuje za ERROR. Pomocí portálu můžete získat přístup k informacím o monitorování a diagnostice. Soubory protokolu si můžete stáhnout přímo z webu. Soubory protokolu se ukládají do následujících umístění:

    • Pro aktivované nasazení: Vfs/data/úlohy/triggered/< název úlohy>

    • Pro průběžné nasazování: Vfs/data/jobs/continuous/<název úlohy>

  • Konfigurace: Konfigurace webových úloh pomocí portálu, rozhraní REST API a PowerShellu. Pomocí konfiguračního souboru s názvem settings.job, který je ve stejném kořenovém adresáři jako skript webové úlohy, zadejte konfigurační informace pro webovou úlohu. Například:

    • { "stopping_wait_time": 60 }

    • { "is_singleton": true }

Aspekty webových aplikací a webových úloh

  • Ve výchozím nastavení se webové úlohy škálují s webovou aplikací. Chcete-li nakonfigurovat webové úlohy tak, aby běžely v jedné instanci, nastavte konfigurační vlastnost is_singleton na hodnotu true. Webové úlohy s jednou instancí jsou užitečné pro úlohy, které nechcete škálovat ani spouštět jako souběžné více instancí, jako je například přeindexování nebo analýza dat.

  • Pokud chcete minimalizovat účinek webových úloh na výkon webové aplikace, vytvořte v novém plánu služby App Service prázdnou instanci webové aplikace pro hostování dlouhotrvajících webových úloh nebo webových úloh náročných na prostředky.

Azure Functions

Azure Functions je bezserverová a je nejvhodnější pro triggery řízené událostmi, které běží po krátkou dobu. Azure Functions můžete také použít ke spouštění naplánovaných úloh prostřednictvím triggerů časovače, pokud nakonfigurujete funkci tak, aby běžela v zadaných časech.

Azure Durable Functions slouží k orchestraci složitých pracovních postupů a dlouhotrvajících procesů. Durable Functions umožňuje definovat stavové pracovní postupy v bezserverovém prostředí, což může být zvlášť užitečné pro úlohy na pozadí, které vyžadují koordinaci a správu stavu.

Důležité informace o službě Azure Functions

Pokud očekáváte, že úloha na pozadí poběží po krátkou dobu v reakci na událost, zvažte spuštění úkolu v plánu Consumption. Modul runtime můžete nakonfigurovat na maximální dobu. Funkce, která běží déle, stojí více. Úlohy náročné na procesor, které spotřebovávají více paměti, můžou být dražší. Pokud jako součást úkolu použijete další triggery pro služby, účtují se samostatně.

Plán Premium je vhodný, pokud máte několik úkolů, které jsou krátké, ale běží nepřetržitě. Tento plán je dražší, protože potřebuje více paměti a procesoru. Jako výhodu můžete použít další funkce, jako je integrace virtuální sítě.

Vyhrazený plán je vhodný pro úlohy na pozadí, pokud už vaše úloha běží na vyhrazeném plánu. Pokud máte nevyužité virtuální počítače, můžete na stejném virtuálním počítači spustit vyhrazený plán a sdílet náklady na výpočetní prostředky.

Další informace najdete tady:

Azure Logic Apps

Azure Logic Apps poskytuje výkonnou platformu pro automatizaci pracovních postupů a integraci různých služeb. Jsou zvláště vhodné pro hostování úloh na pozadí, které vyžadují orchestraci napříč několika službami a systémy.

Azure Logic Apps má vizuální návrhář pro vytváření pracovních postupů, rozsáhlou knihovnu konektorů pro integraci různých služeb, triggerů řízených událostmi, stavových pracovních postupů pro komplexní koordinaci a integrované zpracování chyb a opakování, které zajišťují odolnost a obnovení z přechodných selhání.

Důležité informace o Azure Logic Apps

Služba Logic Apps funguje nejlépe ve scénářích, které nevyžadují nízkou latenci pro odpověď, jako jsou asynchronní nebo částečně dlouhotrvající volání rozhraní API. Pokud je vyžadována nízká latence, například při volání, které blokuje uživatelské rozhraní, použijte jinou technologii, jako je Azure Functions nebo webové rozhraní API nasazené ve službě Azure App Service.

Azure Logic Apps se řídí cenovým modelem průběžných plateb, kde se účtují poplatky na základě počtu provedených akcí a použitých konektorů. Optimalizujte náklady návrhem efektivních pracovních postupů a minimalizací počtu akcí a konektorů používaných ve službě Logic Apps.

Logic Apps se automaticky škáluje na základě počtu příchozích požadavků a složitosti pracovních postupů. Mějte ale na paměti omezení a kvóty pro Logic Apps, zejména pokud úlohy na pozadí zahrnují aktivační události s vysokou frekvencí nebo velké objemy dat.

Další informace najdete tady:

Virtual Machines

Úlohy na pozadí můžete implementovat tak, aby se nenasadily do Web Apps. Úlohy můžete například implementovat pomocí služeb systému Windows, nástrojů třetích stran nebo spustitelných programů. Můžete také použít programy napsané pro běhové prostředí, které se liší od prostředí, které je hostitelem aplikace. Můžete například použít program systému Unix nebo Linux, který chcete spustit z aplikace systému Windows nebo .NET. Vyberte si z několika operačních systémů pro virtuální počítač Azure a spusťte na daném virtuálním počítači službu nebo spustitelný soubor.

Další informace najdete tady:

Pokud chcete zahájit úlohu na pozadí na samostatném virtuálním počítači, můžete:

  • Odešlete požadavek do koncového bodu, který úloha zpřístupňuje ke spuštění úlohy na vyžádání přímo z vaší aplikace. Požadavek přenáší data, která úloha vyžaduje. Koncový bod vyvolá úlohu.

  • Pomocí plánovače nebo časovače ze zvoleného operačního systému nakonfigurujte úlohu tak, aby běžela podle plánu. Například ve Windows můžete pomocí Plánovače úloh systému Windows spouštět skripty a úlohy. Pokud máte na virtuálním počítači nainstalovaný SQL Server, spusťte skripty a úlohy pomocí agenta SQL Serveru.

  • Pomocí Logic Apps zahajte úlohu přidáním zprávy do fronty, kterou úloha monitoruje, nebo odesláním požadavku do rozhraní API, které úloha zveřejňuje.

Další informace o tom, jak můžete zahájit úlohy na pozadí, najdete v předchozí části Aktivační události .

Důležité informace o virtuálních počítačích

Při nasazování úloh na pozadí na virtuálním počítači Azure zvažte následující body:

  • Hostování úloh na pozadí na samostatném virtuálním počítači Azure za účelem zajištění flexibility a přesné kontroly nad zahájením, nasazením, plánováním a přidělováním prostředků. Pokud ale nasadíte virtuální počítač výhradně pro úlohy na pozadí, náklady za běhu se zvýší.

  • Na portálu není k dispozici žádné zařízení pro monitorování úloh a žádné funkce automatizovaného restartování pro neúspěšné úlohy. Pomocí rutin Azure Resource Manageru ale můžete monitorovat stav virtuálního počítače a spravovat ho. Ve výpočetních uzlech nejsou k dispozici žádná zařízení pro řízení procesů a vláken. Obvykle platí, že pokud používáte virtuální počítač, musíte implementovat mechanismus, který shromažďuje data z instrumentace v úloze a také z operačního systému virtuálního počítače. Pro tento účel můžete použít sadu System Center Management Pack pro Azure.

  • Zvažte vytvoření monitorovacích sond, které jsou vystavené prostřednictvím koncových bodů HTTP. Kód pro tyto sondy můžete nakonfigurovat tak, aby prováděl kontroly stavu a shromažďuje provozní informace a statistiky. Sondy můžete použít také ke kolaci informací o chybách a jejich vrácení do aplikace pro správu.

Další informace najdete tady:

Azure Batch

Zvažte službu Batch , pokud potřebujete spouštět velké, paralelní úlohy vysokovýkonného výpočetního prostředí (HPC) napříč desítkami, stovkami nebo tisíci virtuálních počítačů.

Služba Batch slouží k přípravě virtuálních počítačů, přiřazování úkolů k virtuálním počítačům, spouštění úloh, monitorování průběhu a automatické škálování virtuálních počítačů v reakci na zatížení. Batch také poskytuje plánování úloh a podporuje virtuální počítače s Linuxem a Windows.

Aspekty dávkového zpracování

Služba Batch je vhodná pro vnitřně paralelní úlohy. Službu Batch můžete použít k provádění paralelních výpočtů s krokem redukce na konci nebo spuštění aplikací MPI (Message Passing Interface) pro paralelní úlohy, které vyžadují předávání zpráv mezi uzly.

Úloha Batch běží ve fondu uzlů nebo virtuálních počítačů. Můžete přidělit fond pouze v případě potřeby a po dokončení úlohy ho odstranit. Tento přístup maximalizuje využití, protože uzly nejsou nečinné, ale úloha musí počkat, až přidělíte uzly. Případně můžete předem vytvořit fond. Tento přístup minimalizuje dobu potřebnou ke spuštění úlohy, ale může vést k tomu, že uzly zůstanou nečinné.

Další informace najdete tady:

Azure Kubernetes Service

Pomocí AKS můžete spravovat hostované prostředí Kubernetes, abyste mohli snadno nasazovat a spravovat kontejnerizované aplikace.

Kontejnery jsou užitečné pro spouštění úloh na pozadí. Mezi výhody patří:

  • Kontejnery podporují hostování s vysokou hustotou. Izolovat úlohu na pozadí v kontejneru můžete při umístění více kontejnerů do každého virtuálního počítače.

  • Orchestrator kontejnerů slouží k internímu vyrovnávání zatížení, konfiguraci interní sítě a provádění dalších úloh konfigurace.

  • Kontejnery můžete podle potřeby spustit a zastavit.

  • Pomocí služby Azure Container Registry můžete své kontejnery zaregistrovat uvnitř hranic Azure, abyste zajistili výhody zabezpečení, ochrany osobních údajů a blízkosti.

Úvahy o AKS

AKS vyžaduje pochopení toho, jak používat orchestrátor kontejnerů.

Další informace najdete tady:

Azure Container Apps

Pomocí Container Apps můžete vytvářet bezserverové mikroslužby založené na kontejnerech. Kontejnerové aplikace:

  • Je optimalizovaná pro spouštění kontejnerů pro obecné účely, zejména pro aplikace, které pokrývají mnoho mikroslužeb nasazených v kontejnerech.

  • Využívá Kubernetes a opensourcové technologie, jako je Dapr, Automatické škálování řízené událostmi Kubernetes (KEDA) a Envoy.

  • Podporuje aplikace a mikroslužby ve stylu Kubernetes s funkcemi, jako je zjišťování služeb a rozdělení provozu.

  • Umožňuje architekturu aplikací řízených událostmi tím, že podporuje škálování založené na zátěži a přebírání událostí ze zdrojů, jako jsou fronty, včetně možnosti škálování na nulu.

  • Podporuje dlouhotrvající procesy a může spouštět úlohy na pozadí.

Důležité informace o službě Container Apps

Container Apps neposkytuje přímý přístup k podkladovým rozhraním API Kubernetes. Pokud potřebujete přístup k rozhraním API Kubernetes a řídicí rovině, použijte AKS. Pokud chcete vytvářet aplikace ve stylu Kubernetes a nevyžadujete přímý přístup k nativním rozhraním API Kubernetes a správě clusterů, použijte Container Apps pro plně spravované prostředí. Container Apps je nejvhodnější pro vytváření mikroslužeb kontejnerů.

Další informace najdete tady:

Kontrolní seznam pro spolehlivost

Projděte si kompletní sadu doporučení.