Sdílet prostřednictvím


Nasazení nulového výpadku pro Durable Functions

Spolehlivý model spouštění Durable Functions vyžaduje, aby orchestrace byly deterministické, což vytváří další výzvu, kterou je potřeba vzít v úvahu při nasazování aktualizací. Pokud nasazení obsahuje změny podpisů funkcí aktivity nebo logiky orchestratoru, instance orchestrace v testovacích verzích selžou. Tato situace je zvlášť problém 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:

  • Zpozdí 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 k dosažení nasazení nulového výpadku pro Durable Functions:

Strategie Vhodné použití služby Výhody Nevýhody
Správa verzí Aplikace, které nemají zkušenosti s častými zásadními změnami. Jednoduše implementovat. Zvýšená velikost aplikace funkcí v paměti a počtu funkcí
Duplikace kódu
Kontrola stavu s slotem Systém, který nemá dlouhotrvající orchestrace trvající déle než 24 hodin nebo často překrývající se orchestrace. Jednoduchý základ kódu.
Nevyžaduje další správu aplikací funkcí.
Vyžaduje další účet úložiště nebo správu centra úloh.
Vyžaduje časové období, kdy nejsou spuštěny žádné orchestrace.
Směrování aplikací Systém, který nemá časové období, kdy orchestrace nejsou spuštěné, například tato časová období s orchestracemi, které trvají déle než 24 hodin nebo často překrývající se orchestrace. 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í.
Mohlo by dojít k maximálnímu počtu aplikací funkcí povolených vaším předplatným. Výchozí volba je 100.

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

Poznámka:

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

Vytváření verzí

Definujte nové verze funkcí a ponechte staré verze v aplikaci funkcí. Jak vidíte v diagramu, verze funkce se stane součástí jejího názvu. Vzhledem k tomu, že předchozí verze funkcí jsou zachovány, instance orchestrace v testovacích verzích je můžou dál odkazovat. Mezitím požadavky na nové instance orchestrace 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 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 Sloty nasazení Služby Azure Functions.

Kontrola stavu s 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ích a přípravných slotů zkontrolujte, jestli nejsou spuštěné instance orchestrace. Po dokončení všech instancí orchestrace můžete provést prohození. Tato strategie funguje, když máte předvídatelná období, když se neschovávají žádné instance orchestrace. Tento přístup je nejlepší v případě, že vaše orchestrace nejsou dlouhotrvající a kdy se provádění orchestrace č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 produkční prostředí.

  2. Pro každý slot nastavte nastavení aplikace AzureWebJobsStorage na připojení sdíleného účtu úložiště. Toto připojení účtu úložiště používá modul runtime Azure Functions k bezpečnému ukládání přístupových klíčů funkcí. Pro nejvyšší úroveň zabezpečení byste měli ke svému účtu úložiště použít připojení spravované identity.

  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žívají rozšíření Durable Functions ke spolehlivému spuštění. Pro každý slot použijte samostatný účet úložiště. Toto nastavení neoznačíte jako nastavení slotu nasazení. Spravovaná připojení založená na identitách jsou opět nejbezpečnější.

  4. V oddílu DurableTask vaší aplikace funkcí host.json souboru 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ředběžného nasazení 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í řetězec v souboru host.json.

Funkce 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. Když 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 čekala, dokud nebudou spuštěny žádné orchestrace. Další informace najdete v tématu Řízení nasazení vydané verze pomocí bran.

Brána nasazení

Azure Pipelines zkontroluje, jestli vaše aplikace funkcí spouští instance orchestrace před spuštěním nasazení.

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

Teď by se měla nová verze vaší aplikace funkcí nasadit do přípravného slotu.

Přípravný slot

Nakonec prohození slotů.

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

Slot nasazení

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

Směrování přihlášek

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

Pro tuto strategii musíte před Durable Functions vytvořit směrovač aplikace. Tento směrovač lze implementovat s Durable Functions. Směrovač má odpovědnost za:

  • Nasaďte aplikaci funkcí.
  • Správa verze Durable Functions
  • Směrujte žádosti o orchestraci do aplikací funkcí.

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

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

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

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 staré a nové verze 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 s 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 požadavky na novou verzi 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í aplikací (zásadní změna)

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 aplikace, můžete sdílet tabulky instancí a historie napříč aplikacemi funkcí. Tabulky můžete sdílet tak trackingStoreConnectionStringName , že nakonfigurujete nastavení 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