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

Durable Functions je sada triggerů a vazeb Azure Functions, které interně využívají Durable Task Framework (DTFx). DTFx podporuje různé poskytovatele back-endového úložiště, včetně poskytovatele Azure Storage používaného Durable Functions. Od verze Durable Functions v2.5.0 můžou uživatelé nakonfigurovat své aplikace funkcí tak, aby používaly jiné poskytovatele úložiště DTFx než poskytovatele azure Storage.

Poznámka:

U mnoha aplikací funkcí bude pravděpodobně stačit výchozí poskytovatel služby Azure Storage pro Durable Functions, který je nejjednodušší použít, 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ává je mezi sebou 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í zprostředkovatel úložiště pro Durable Functions. K zachování orchestrace a stavu entity používá fronty, tabulky a objekty blob. 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 uložení stavu modulu runtime Durable Functions stejný jako výchozí účet úložiště používaný službou Azure Functions (AzureWebJobsStorage). Durable Functions je ale také možné nakonfigurovat s samostatným účtem úložiště. Zprostředkovatel služby Azure Storage je integrovaný do rozšíření Durable Functions a nemá žádné další závislosti.

Mezi klíčové výhody poskytovatele azure Storage patří:

  • Nevyžaduje se žádné nastavení – můžete použít účet úložiště, který pro vás vytvořil prostředí pro nastavení aplikace funkcí.
  • Model fakturace bez serveru s nejnižšími náklady – Azure Storage má cenový model založený na spotřebě založený zcela na využití (další informace).
  • Nejlepší podpora nástrojů – Azure Storage nabízí multiplatformní místní emulaci 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 bitevně otestovaný back-end úložiště pro Durable Functions.
  • Podpora použití identity místo tajných kódů pro připojení k poskytovateli úložiště

Zdrojový kód pro komponenty DTFx zprostředkovatele úložiště Azure Storage najdete v úložišti Azure/durabletask Na GitHubu.

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ě se nepodporují. Důrazně doporučujeme používat starší účty úložiště verze 1 pro obecné účely, 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ů azure Storage najdete v dokumentaci k přehledu účtu úložiště.

Netherite

Back-end úložiště Netherite byl navržen a vyvinut společností Microsoft Research. Využívá službu Azure Event Hubs a technologii databáze FASTER 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ích testů se propustnost ve srovnání s výchozím poskytovatelem služby Azure Storage zobrazovala o více než řádově vyšší.

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

  • Výrazně vyšší propustnost s nižšími náklady v porovnání s jinými poskytovateli úložiště.
  • Podporuje optimalizaci výkonu podle ceny, což vám umožní 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.
  • Nákladově efektivnější než ostatní 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 k 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)

Zprostředkovatel úložiště Microsoft SQL Server (MSSQL) zachovává veškerý stav do databáze Microsoft SQL Serveru. Je kompatibilní s místním i cloudovým nasazením SQL Serveru, 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 Serveru se nevyžaduje připojení Azure.
  • Přenosná napříč několika prostředími a cloudy, včetně azure hostovaných a místních.
  • Silná konzistence dat umožňující zálohování/obnovení a převzetí služeb při selhání bez ztráty dat
  • Nativní podpora vlastního šifrování dat (funkce SQL Serveru)
  • 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 poskytovatele Microsoft SQL. Zdrojový kód pro poskytovatele úložiště MSSQL najdete v úložišti Microsoft/durabletask-mssql Na GitHubu.

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 v host.json není 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

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

Propojení

Vlastnost connectionName v 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:

  • Název nastavení aplikace obsahující připojovací řetězec. Pokud chcete získat připojovací řetězec, postupujte podle kroků uvedených v tématu Správa přístupových klíčů účtu úložiště.
  • Název sdílené předpony pro více nastavení aplikace, společně definující připojení založené na identitě.

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

Připojení založená na identitách

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

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

Vlastnost Šablona proměnné prostředí Popis 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 tabulkové služby účtu úložiště pomocí schématu HTTPS. <https:// storage_account_name.table.core.windows.net>

Pro přizpůsobení připojení je možné nastavit další vlastnosti. Viz Běžné vlastnosti pro připojení založená na identitě.

Při hostovaní ve službě Azure Functions používají připojení založená na identitách spravovanou identitu. Identita přiřazená systémem se používá ve výchozím nastavení, 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 vaše identita vývojáře, i když je možné ji přizpůsobit. Viz Místní vývoj s připojeními založenými na identitách.

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

Jakákoli identita, kterou používáte, musí mít oprávnění k provedení zamýšlených akcí. U většiny služeb Azure to znamená, že potřebujete přiřadit roli v Azure RBAC pomocí předdefinovaných nebo vlastních rolí, které tato oprávnění poskytují.

Důležité

Cílová služba může zpřístupnit některá oprávnění, která nejsou nutná pro všechny kontexty. Pokud je to možné, dodržujte zásadu nejnižšího oprávnění a udělte identitě pouze požadovaná oprávnění. Pokud například aplikace potřebuje jen číst ze zdroje dat, použijte roli, která má oprávnění jen ke čtení. Přiřazení role, která také umožňuje zápis do této služby, by bylo nevhodné, protože by to bylo 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čují následující předdefinované role:

Aplikace může vyžadovat více oprávnění na základě kódu, který napíš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 úložišti hostitele s identitou pro další aspekty oprávnění.

Konfigurace poskytovatele úložiště Netherite

Povolení poskytovatele úložiště Netherite vyžaduje změnu konfigurace ve vašem host.json. Pro uživatele jazyka C# vyžaduje také další krok instalace.

Konfigurace host.json

Následující host.json příklad 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 úvodní dokumentaci k Netherite.

Instalace rozšíření Netherite (jenom .NET)

Poznámka:

Pokud vaše aplikace používá sady rozšíření, měli byste tuto část ignorovat, protože sady rozšíření odeberou potřebu ruční správy rozšíření.

Na NuGet budete muset nainstalovat nejnovější verzi rozšíření Netherite. Obvykle to znamená, že do souboru zahrnete odkaz a projekt sestavíte .csproj .

Balíček rozšíření, který se má nainstalovat, závisí na pracovním procesu .NET, který používáte:

Konfigurace poskytovatele úložiště MSSQL

Povolení poskytovatele úložiště MSSQL vyžaduje změnu konfigurace ve vašem host.json. Pro uživatele jazyka C# vyžaduje také další krok instalace.

Konfigurace host.json

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.

Instalace rozšíření Durable Task MSSQL (pouze .NET)

Poznámka:

Pokud vaše aplikace používá sady rozšíření, měli byste tuto část ignorovat, protože sady rozšíření odeberou potřebu ruční správy rozšíření.

Na NuGet budete muset nainstalovat nejnovější verzi rozšíření poskytovatele úložiště MSSQL. Obvykle to znamená, že do souboru zahrnete odkaz a projekt sestavíte .csproj .

Balíček rozšíření, který se má nainstalovat, závisí na pracovním procesu .NET, který používáte:

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á dostupnost (GA) ✅ Obecná dostupnost (GA) ✅ Obecná dostupnost (GA)
Externí závislosti Účet služby Azure Storage (pro obecné účely v1) Azure Event Hubs
Účet azure Storage (pro obecné účely)
SQL Server 2019 nebo Azure SQL Database
Možnosti místního vývoje a emulace Azurite v3.12+ (pro různé platformy) 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 Střední Velmi vysoká Střední
Maximální orchestrace nebo horizontální navýšení kapacity entity (uzly) 16 32
Maximální navýšení kapacity aktivity (uzly) 32
Podpora trvalých entit ✅ Plně podporovaná ✅ Plně podporovaná ⚠️ Podporováno s výjimkou použití rozhraní .NET Isolated
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 non-.NET aplikace) ✅ Plně podporovaná ✅ Plně podporovaná ✅ Plně podporovaná
Konfigurovatelný cenový výkon? ❌ Ne ✅ Ano (jednotky TU a CU služby Event Hubs) ✅ Ano (virtuální procesory SQL)
Odpojené podpora prostředí ❌ Vyžaduje se připojení Azure. ❌ Vyžaduje se připojení Azure. ✅ Plně podporovaná
Připojení založená na identitách ✅ Plně podporovaná ❌ Nepodporováno ⚠️ Vyžaduje škálování řízené modulem runtime.
Plán Flex Consumption ✅ Plně podporovaná (viz poznámky) ❌ Nepodporováno ❌ Nepodporováno

Další kroky