Poskytovatelé úložiště pro Durable Functions

Durable Functions je sada aktivačních událostí Azure Functions a vazeb, které interně využívají Durable Task Framework (DTFx). DTFx podporuje různé poskytovatele back-endového úložiště, včetně poskytovatele služby Azure Storage používaného Durable Functions. Počínaje verzí Durable Functions verze 2.5.0 můžou uživatelé nakonfigurovat své aplikace funkcí tak, aby používali jiné poskytovatele úložiště DTFx než poskytovatele služby Azure Storage.

Poznámka

U mnoha aplikací funkcí bude výchozí poskytovatel služby Azure Storage pro Durable Functions pravděpodobně stačit a je nejjednodušší, protože nevyžaduje žádnou další konfiguraci. Existují však kompromisy mezi náklady, škálovatelností a správou dat, které můžou upřednostňovat použití alternativního poskytovatele úložiště.

Pro použití s Durable Functions a architekturou Durable Task Framework byly vyvinuty dva alternativní poskytovatelé úložiště, konkrétně poskytovatel úložiště Netherite a poskytovatel úložiště Microsoft SQL Server (MSSQL). Tento článek popisuje všechny tři podporované poskytovatele, porovná je s ostatními a poskytuje základní informace o tom, jak je začít používat.

Poznámka

V současné době není možné migrovat data z jednoho poskytovatele úložiště do jiného. Pokud chcete použít nového poskytovatele úložiště, měli byste vytvořit novou aplikaci nakonfigurovanou s novým poskytovatelem úložiště.

Azure Storage

Azure Storage je výchozím poskytovatelem úložiště pro Durable Functions. Používá fronty, tabulky a objekty blob k zachování orchestrace a stavu entity. Používá také objekty blob a zapůjčení objektů blob ke správě oddílů. V mnoha případech je účet úložiště použitý k ukládání stavu modulu runtime Durable Functions stejný jako výchozí účet úložiště používaný Azure Functions (AzureWebJobsStorage). Je ale také možné nakonfigurovat Durable Functions s samostatným účtem úložiště. Poskytovatel služby Azure Storage je integrovaný do rozšíření Durable Functions a nemá žádné další závislosti.

Mezi klíčové výhody poskytovatele služby Azure Storage patří:

  • Nevyžaduje se žádná instalace – můžete použít účet úložiště, který jste vytvořili v prostředí pro nastavení aplikace funkcí.
  • Bezserverový bezserverový model – Azure Storage má cenový model založený na spotřebě založený na využití (další informace).
  • Nejlepší podpora nástrojů – Azure Storage nabízí místní emulaci napříč platformami a integruje se se sadou Visual Studio, Visual Studio Code a nástroji Azure Functions Core Tools.
  • Nejzralější – Azure Storage byl původní a nejvíce bojově testovaný back-end úložiště pro Durable Functions.
  • Podpora verze Preview pro použití identity místo tajných kódů pro připojení k zprostředkovateli úložiště

Zdrojový kód pro komponenty DTFx poskytovatele úložiště Azure Storage najdete v úložišti Azure/durabletask GitHub.

Poznámka

Účty Azure Storage pro obecné účely úrovně Standard se vyžadují při použití poskytovatele služby Azure Storage. Všechny ostatní typy účtů úložiště nejsou podporované. Důrazně doporučujeme používat starší účty úložiště pro obecné účely verze 1, protože novější účty úložiště v2 můžou být pro úlohy Durable Functions výrazně dražší. Další informace o typech účtů služby Azure Storage najdete v dokumentaci k přehledu účtu úložiště .

Netherite (Preview)

Back-end úložiště Netherite byl navržen a vyvinut společností Microsoft Research. Používá Azure Event Hubs a rychlejší databázovou technologii nad objekty blob stránky Azure. Návrh Netherite umožňuje výrazně vyšší propustnost zpracování orchestrací a entit v porovnání s jinými poskytovateli. V některých scénářích srovnávacího testu se propustnost ukázala zvýšit o více než řadu velikostí oproti výchozímu poskytovateli služby Azure Storage.

Mezi klíčové výhody poskytovatele úložiště Netherite patří:

  • Výrazně vyšší propustnost při nižších nákladech oproti ostatním poskytovatelům úložiště.
  • Podporuje optimalizaci cenového výkonu, která umožňuje podle potřeby vertikálně navýšit kapacitu výkonu.
  • Podporuje až 32 datových oddílů se skladovými položkami Event Hubs Basic a Standard.
  • Cenově výhodnější než jiní poskytovatelé pro úlohy s vysokou propustností.

Další informace o technických podrobnostech poskytovatele úložiště Netherite, včetně toho, jak ho začít používat, najdete v dokumentaci Netherite. Zdrojový kód poskytovatele úložiště Netherite najdete v úložišti Microsoft/durabletask-netherite GitHub. Podrobnější vyhodnocení poskytovatele úložiště Netherite je také k dispozici v následujícím výzkumném dokumentu: Bezserverové pracovní postupy s Durable Functions a Netherite.

Poznámka

Název Netherite pochází ze světa Minecraftu.

Microsoft SQL Server (MSSQL) (Preview)

Poskytovatel úložiště Microsoft SQL Server (MSSQL) zachová veškerý stav do databáze Microsoft SQL Server. Je kompatibilní s místním i cloudovým nasazením SQL Server, včetně Azure SQL Database.

Mezi klíčové výhody poskytovatele úložiště MSSQL patří:

  • Podporuje odpojená prostředí – při použití instalace SQL Server se nevyžaduje žádné připojení Azure.
  • Přenosná napříč několika prostředími a cloudy, včetně azure hostovaných a místních prostředí.
  • Silná konzistence dat, povolení zálohování/obnovení a převzetí služeb při selhání bez ztráty dat
  • Nativní podpora pro vlastní šifrování dat (funkce SQL Server).
  • Integruje se se stávajícími databázovými aplikacemi prostřednictvím předdefinovaných uložených procedur.

Další informace o technických podrobnostech poskytovatele úložiště MSSQL, včetně toho, jak ho začít používat, najdete v dokumentaci k poskytovateli Microsoft SQL. Zdrojový kód poskytovatele úložiště MSSQL najdete v úložišti Microsoft/durabletask-mssql GitHub.

Konfigurace alternativních poskytovatelů úložiště

Konfigurace alternativních poskytovatelů úložiště je obecně dvoustupňový proces:

  1. Přidejte do aplikace funkcí příslušný balíček NuGet (tento požadavek je dočasný pro aplikace používající sady rozšíření).
  2. Aktualizujte soubor host.json tak, aby určil, kterého zprostředkovatele úložiště chcete použít.

Pokud není v souboru host.json explicitně nakonfigurovaný žádný poskytovatel úložiště, poskytovatel služby Azure Storage bude ve výchozím nastavení povolený.

Konfigurace poskytovatele úložiště Azure

Poskytovatel služby Azure Storage je výchozím poskytovatelem úložiště a nevyžaduje explicitní konfiguraci, odkazy na balíčky NuGet ani odkazy na sadu rozšíření. Úplnou sadu možností konfigurace host.json najdete tady v cestě extensions/durableTask/storageProvider .

Připojení

Vlastnost connectionName v souboru host.json je odkazem na konfiguraci prostředí, která určuje, jak se má aplikace připojit ke službě Azure Storage. Může zadat:

Pokud je nakonfigurovaná hodnota přesná shoda pro jedno nastavení i shoda předpony pro jiná nastavení, použije se přesná shoda. Pokud není v souboru host.json zadána žádná hodnota, výchozí hodnota je AzureWebJobsStorage.

Připojení založená na identitách (Preview)

Pokud používáte rozšíření verze 2.7.0 nebo vyšší a poskytovatele úložiště Azure, místo použití připojovacího řetězce s tajným kódem můžete mít aplikaci identitu Azure Active Directory. K tomu byste definovali nastavení pod běžnou předponou, která se mapuje na connectionName vlastnost v konfiguraci triggeru a vazby.

Pokud chcete pro Durable Functions použít připojení založené na identitě, nakonfigurujte následující nastavení aplikace:

Vlastnost Šablona proměnné prostředí Description Příklad hodnoty
Blob service URI <CONNECTION_NAME_PREFIX>__blobServiceUri Identifikátor URI roviny dat služby blob účtu úložiště pomocí schématu HTTPS. <https:// storage_account_name.blob.core.windows.net>
Identifikátor URI služby Queue <CONNECTION_NAME_PREFIX>__queueServiceUri Identifikátor URI roviny dat služby fronty účtu úložiště pomocí schématu HTTPS. <https:// storage_account_name.queue.core.windows.net>
Table service URI <CONNECTION_NAME_PREFIX>__tableServiceUri Identifikátor URI roviny dat služby table účtu úložiště pomocí schématu HTTPS. <https:// storage_account_name.table.core.windows.net>

Další vlastnosti můžou být nastaveny tak, aby přizpůsobily připojení. Viz Běžné vlastnosti připojení založených na identitách.

Když je hostovaná ve službě Azure Functions, připojení založená na identitě používají spravovanou identitu. Identita přiřazená systémem se ve výchozím nastavení používá, i když je možné zadat identitu přiřazenou uživatelem s vlastnostmi a clientID vlastnostmicredential. Všimněte si, že konfigurace identity přiřazené uživatelem s ID prostředku se nepodporuje . Při spuštění v jiných kontextech, jako je místní vývoj, se místo toho použije identita vývojáře, i když je možné ji přizpůsobit. Podívejte se na místní vývoj s připojeními založenými na identitách.

Udělení oprávnění identitě

Jakákoli identita, která se používá, musí mít oprávnění k provedení zamýšlených akcí. Roli budete muset přiřadit v Azure RBAC pomocí předdefinovaných nebo vlastních rolí, které tato oprávnění poskytují.

Důležité

Některá oprávnění můžou být vystavena cílovou službou, která nejsou nezbytná pro všechny kontexty. Pokud je to možné, dodržujte zásadu nejnižších oprávnění a udělte identitě pouze požadovaná oprávnění. Pokud třeba aplikace musí být schopná číst jenom ze zdroje dat, použijte roli, která má oprávnění jen ke čtení. Přiřazování role, která také umožňuje zápis do této služby, by bylo nevhodné, protože by to mělo být nadměrné oprávnění pro operaci čtení. Podobně byste chtěli zajistit, aby přiřazení role bylo vymezeno pouze nad prostředky, které je potřeba číst.

Budete muset vytvořit přiřazení role, které poskytuje přístup k úložišti Azure za běhu. Role správy, jako je vlastník , nestačí. Při použití rozšíření Durable Functions v normálním provozu se doporučuje následující předdefinované role:

Vaše aplikace může vyžadovat více oprávnění na základě kódu, který píšete. Pokud používáte výchozí chování nebo explicitní nastavení connectionName na AzureWebJobsStorage, přečtěte si téma Připojení k hostitelskému úložišti s identitou pro další aspekty oprávnění.

Konfigurace poskytovatele úložiště Netherite

Pokud chcete použít zprostředkovatele úložiště Netherite, musíte nejdřív přidat odkaz na balíček NuGet Microsoft.Azure.Azure.DurableTask.Netherite.AzureFunctions v souboru csproj (aplikace .NET) nebo v souboru extensions.proj (javascriptové, pythonové a powershellové aplikace).

Následující příklad host.json ukazuje minimální konfiguraci potřebnou k povolení poskytovatele úložiště Netherite.

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "Netherite",
        "storageConnectionName": "AzureWebJobsStorage",
        "eventHubsConnectionName": "EventHubsConnection"
      }
    }
  }
}

Podrobnější pokyny k nastavení najdete v dokumentaci Začínáme s Netherite.

Konfigurace poskytovatele úložiště MSSQL

Pokud chcete použít zprostředkovatele úložiště MSSQL, musíte nejprve přidat odkaz na balíček NuGet Microsoft.DurableTask.SqlServer.AzureFunctions v souboru csproj (aplikace.NET) nebo souboru extensions.proj (javascript, Python a aplikace PowerShellu).

Poznámka

Poskytovatel úložiště MSSQL ještě není podporován v aplikacích, které používají sady rozšíření.

Následující příklad ukazuje minimální konfiguraci potřebnou k povolení poskytovatele úložiště MSSQL.

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "mssql",
        "connectionStringName": "SQLDB_Connection"
      }
    }
  }
}

Podrobnější pokyny k nastavení najdete v úvodní dokumentaci poskytovatele MSSQL.

Porovnání poskytovatelů úložiště

Mezi různými podporovanými poskytovateli úložiště existuje mnoho důležitých kompromisů. Následující tabulka vám pomůže porozumět těmto kompromisům a rozhodnout se, který poskytovatel úložiště je pro vaše potřeby nejvhodnější.

Poskytovatel úložiště Azure Storage Netherite MSSQL
Oficiální stav podpory ✅ Obecně dostupné (GA) ⚠ Public Preview ⚠ Public Preview
Externí závislosti Účet azure Storage (pro obecné účely v1) Azure Event Hubs
Účet Azure Storage (pro obecné účely)
databáze SQL Server 2019 nebo Azure SQL
Možnosti místního vývoje a emulace Azurite v3.12+ (napříč platformami)
Emulátor služby Azure Storage (jenom Windows)
Podporuje emulaci center úloh v paměti (další informace) SQL Server Developer Edition (podporuje kontejnery Windows, Linux a Docker)
Konfigurace centra úloh Explicitní Explicitní Implicitní ve výchozím nastavení (další informace)
Maximální propustnost Pokročilé Velmi vysoká Pokročilé
Maximální orchestrace nebo horizontální navýšení kapacity entity (uzly) 16 32 N/A
Maximální navýšení kapacity aktivity (uzly) 32 N/A
Podpora plánu Consumption ✅ Plně podporovaná ❌ Nepodporováno ❌ Nepodporováno
Podpora plánu Elastic Premium ✅ Plně podporovaná ⚠ Vyžaduje monitorování škálování modulu runtime. ⚠ Vyžaduje monitorování škálování modulu runtime.
Podpora škálování KEDA 2.0
(další informace)
❌ Nepodporováno ❌ Nepodporováno ✅ Podporováno pomocí škálovače MSSQL (další informace)
Podpora sad rozšíření (doporučeno pro aplikace non-.NET) ✅ Plně podporovaná ❌ Nepodporováno ❌ Nepodporováno
Konfigurovatelný výkon cen? ❌ Ne ✅ Ano (jednotky TU a jednotky CU služby Event Hubs) ✅ Ano (virtuální procesory SQL)
Podpora spravované identity ✅ Plně podporovaná ❌ Nepodporováno ⚠✔ Vyžaduje škálování řízené modulem runtime.
Podpora odpojeného prostředí ❌ Vyžaduje se připojení Azure ❌ Vyžaduje se připojení Azure ✅ Plně podporovaná
Připojení založená na identitách ✅ Ano (Preview) ❌ Ne ❌ Ne

Další kroky