Nasazení bez výpadků pro Durable Functions

Spolehlivý model spouštění Durable Functions vyžaduje, aby orchestrace byly deterministické, což představuje další výzvu, kterou je potřeba při nasazování aktualizací zvážit. Pokud nasazení obsahuje změny signatur funkcí aktivity nebo logiky orchestrátoru, instance průběžné orchestrace selžou. Tato situace je problémem zejména u instancí dlouhotrvajících orchestrací, které můžou představovat hodiny nebo dny práce.

Pokud chcete těmto selháním zabránit, máte dvě možnosti:

  • Odložte nasazení, dokud se nedokončily všechny spuštěné instance orchestrace.
  • Ujistěte se, že všechny spuštěné instance orchestrace používají existující verze vašich funkcí.

Následující graf porovnává tři hlavní strategie pro dosažení nasazení s nulovými výpadky pro Durable Functions:

Strategie Kdy je použít Výhody Nevýhody
Správa verzí Aplikace, u které nemusejí docházet k častým změnám způsobujícím chybu. Jednoduchá implementace. Větší velikost aplikace funkcí v paměti a počet funkcí
Duplikace kódu.
Kontrola stavu se slotem Systém, který nemá dlouhotrvající orchestrace trvající déle než 24 hodin nebo se orchestrace často překrývají. Jednoduchý základ kódu.
Nevyžaduje další správu aplikací funkcí.
Vyžaduje další správu účtu úložiště nebo centra úloh.
Vyžaduje časová období, kdy nejsou spuštěny žádné orchestrace.
Směrování aplikací Systém, který nemá časová období, kdy nejsou spuštěné orchestrace, jako jsou časová období s orchestracemi, které trvají déle než 24 hodin, nebo s často překrývajícími se orchestracemi. Zpracovává nové verze systémů s nepřetržitě běžícími orchestracemi, které mají zásadní změny. Vyžaduje inteligentní směrovač aplikací.
Může se jednat o maximální počet aplikací funkcí povolených vaším předplatným. Výchozí hodnota je 100.

Zbývající část tohoto dokumentu popisuje tyto strategie podrobněji.

Poznámka

Popisy těchto strategií nasazení s nulovými výpadky předpokládají, že pro Durable Functions používáte výchozího poskytovatele služby Azure Storage. Pokyny nemusí být vhodné, pokud používáte jiného poskytovatele úložiště, než je výchozí poskytovatel služby Azure Storage. Další informace o různých možnostech zprostředkovatele úložiště a jejich porovnání najdete v dokumentaci k poskytovatelům úložiště Durable Functions.

Správa verzí

Definujte nové verze funkcí a staré verze ponechte v aplikaci funkcí. Jak je vidět na diagramu, verze funkce se stává součástí jejího názvu. Vzhledem k tomu, že předchozí verze funkcí jsou zachovány, instance průběžné orchestrace na ně mohou i nadále odkazovat. Požadavky na nové instance orchestrace mezitím volají nejnovější verzi, na kterou může funkce klienta orchestrace odkazovat z nastavení aplikace.

Strategie správy verzí

V této strategii musí být každá funkce zkopírována a její odkazy na jiné funkce musí být aktualizovány. Můžete si to usnadnit napsáním skriptu. Tady je ukázkový projekt se skriptem migrace.

Poznámka

Tato strategie používá sloty nasazení, aby se zabránilo výpadkům během nasazení. Podrobnější informace o vytváření a používání nových slotů nasazení najdete v tématu Azure Functions sloty nasazení.

Kontrola stavu se slotem

Zatímco aktuální verze vaší aplikace funkcí běží v produkčním slotu, nasaďte novou verzi aplikace funkcí do přípravného slotu. Před prohozením produkčního a přípravného slotu zkontrolujte, jestli nejsou spuštěné nějaké instance orchestrace. Po dokončení všech instancí orchestrace můžete provést prohození. Tato strategie funguje, pokud máte předvídatelná období, kdy nejsou v průběhu žádné instance orchestrace. Tento přístup je nejlepší, když vaše orchestrace neběží dlouho a provádění orchestrace se často nepřekrývají.

Konfigurace aplikace funkcí

K nastavení tohoto scénáře použijte následující postup.

  1. Přidejte sloty nasazení do aplikace funkcí pro přípravu a produkci.

  2. Pro každý slot nastavte nastavení aplikace AzureWebJobsStorage na připojovací řetězec sdíleného účtu úložiště. Tento připojovací řetězec účtu úložiště používá modul runtime Azure Functions k bezpečnému ukládání přístupových klíčů funkcí.

  3. Pro každý slot vytvořte nové nastavení aplikace, DurableManagementStoragenapříklad . Nastavte jeho hodnotu na připojovací řetězec různých účtů úložiště. Tyto účty úložiště používá rozšíření Durable Functions ke spolehlivému spouštění. Pro každý slot použijte samostatný účet úložiště. Neoznačívejte toto nastavení jako nastavení slotu nasazení.

  4. V části durableTask souboru host.json vaší aplikace funkcí zadejte connectionStringName (Durable 2.x) nebo azureStorageConnectionStringName (Durable 1.x) jako název nastavení aplikace, které jste vytvořili v kroku 3.

Následující diagram znázorňuje popsanou konfiguraci slotů nasazení a účtů úložiště. V tomto potenciálním scénáři před nasazením běží verze 2 aplikace funkcí v produkčním slotu, zatímco verze 1 zůstává v přípravném slotu.

Sloty nasazení a účty úložiště

příklady host.json

Následující fragmenty JSON jsou příklady nastavení připojovacího řetězce v souboru host.json .

Functions 2.0

{
  "version": 2.0,
  "extensions": {
    "durableTask": {
      "hubName": "MyTaskHub",
      "storageProvider": {
        "connectionStringName": "DurableManagementStorage"
      }
    }
  }
}

Functions 1.x

{
  "durableTask": {
    "azureStorageConnectionStringName": "DurableManagementStorage"
  }
}

Konfigurace kanálu CI/CD

Nakonfigurujte kanál CI/CD tak, aby se nasazoval jenom v případě, že vaše aplikace funkcí nemá žádné čekající nebo spuštěné instance orchestrace. Pokud používáte Azure Pipelines, můžete vytvořit funkci, která kontroluje tyto podmínky, jako v následujícím příkladu:

[FunctionName("StatusCheck")]
public static async Task<IActionResult> StatusCheck(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestMessage req,
    [DurableClient] IDurableOrchestrationClient client,
    ILogger log)
{
    var runtimeStatus = new List<OrchestrationRuntimeStatus>();

    runtimeStatus.Add(OrchestrationRuntimeStatus.Pending);
    runtimeStatus.Add(OrchestrationRuntimeStatus.Running);

    var result = await client.ListInstancesAsync(new OrchestrationStatusQueryCondition() { RuntimeStatus = runtimeStatus }, CancellationToken.None);
    return (ActionResult)new OkObjectResult(new { HasRunning = result.DurableOrchestrationState.Any() });
}

Dále nakonfigurujte přípravnou bránu tak, aby počkala, dokud nebudou spuštěny žádné orchestrace. Další informace najdete v tématu Uvolnění řízení nasazení pomocí bran.

Brána nasazení

Azure Pipelines před zahájením nasazení zkontroluje, jestli vaše aplikace funkcí nespustí instance orchestrace.

Brána nasazení (spuštěná)

Nová verze vaší aplikace funkcí by teď měla být nasazená do přípravného slotu.

Přípravný slot

Nakonec sloty prohodíte.

Prohodí se také nastavení aplikace, která nejsou označená jako nastavení slotu nasazení, takže aplikace verze 2 si zachová svůj odkaz na účet úložiště A. Vzhledem k tomu, že se stav orchestrace sleduje v účtu úložiště, všechny orchestrace spuštěné v aplikaci verze 2 poběží v novém slotu bez přerušení.

Slot nasazení

Pokud chcete pro oba sloty použít stejný účet úložiště, můžete změnit názvy center úloh. V takovém případě musíte spravovat stav slotů a nastavení HubName vaší aplikace. Další informace najdete v tématu Centra úloh v Durable Functions.

Směrování aplikací

Tato strategie je nejsložitější. Dá se ale použít pro aplikace funkcí, které nemají čas mezi spuštěnými orchestracemi.

Pro tuto strategii musíte před Durable Functions vytvořit směrovač aplikací. Tento směrovač lze implementovat s Durable Functions. Směrovač zodpovídá za:

  • Nasaďte aplikaci funkcí.
  • Umožňuje spravovat verzi Durable Functions.
  • Směrujte žádosti o orchestraci do aplikací funkcí.

Při prvním přijetí žádosti o orchestraci provede směrovač následující úlohy:

  1. Vytvoří novou aplikaci funkcí v Azure.
  2. Nasadí kód vaší aplikace funkcí do nové aplikace funkcí v Azure.
  3. Předá žádost o orchestraci nové aplikaci.

Směrovač spravuje stav, ve které aplikaci funkcí v Azure je nasazená verze kódu vaší aplikace.

Směrování aplikací (poprvé)

Směrovač směruje požadavky na nasazení a orchestraci do příslušné aplikace funkcí na základě verze odeslané s požadavkem. Ignoruje verzi opravy.

Když nasadíte novou verzi aplikace bez zásadní změny, můžete zvýšit verzi opravy. Směrovač se nasadí do vaší stávající aplikace funkcí a odešle požadavky na starou a novou verzi kódu, které se směrují do stejné aplikace funkcí.

Směrování aplikací (bez zásadní změny)

Když nasadíte novou verzi aplikace se zásadní změnou, můžete zvýšit hlavní nebo podverzi. Pak směrovač aplikace vytvoří novou aplikaci funkcí v Azure, nasadí do ní a směruje do ní požadavky na novou verzi vaší aplikace. V následujícím diagramu běží orchestrace ve verzi aplikace 1.0.1, ale požadavky na verzi 1.1.0 se směrují do nové aplikace funkcí.

Směrování aplikace (změna způsobující chybu)

Směrovač monitoruje stav orchestrací ve verzi 1.0.1 a po dokončení všech orchestrací odebere aplikace.

Nastavení úložiště sledování

Každá aplikace funkcí by měla používat samostatné fronty plánování, případně v samostatných účtech úložiště. Pokud chcete dotazovat všechny instance orchestrací ve všech verzích vaší aplikace, můžete mezi aplikacemi funkcí sdílet tabulky instancí a historie. Tabulky můžete sdílet konfigurací trackingStoreConnectionStringName nastavení a trackingStoreNamePrefix v souboru nastavení host.json tak, aby všechny používaly stejné hodnoty.

Další informace najdete v tématu Správa instancí v Durable Functions v Azure.

Nastavení úložiště sledování

Další kroky