Durable Functions-opslagproviders

Durable Functions is een set Azure Functions-triggers en -bindingen die intern worden aangedreven door het Durable Task Framework (DTFx). DTFx ondersteunt verschillende back-endopslagproviders, waaronder de Azure Storage-provider die wordt gebruikt door Durable Functions. Vanaf Durable Functions v2.5.0 kunnen gebruikers hun functie-apps configureren voor het gebruik van andere DTFx-opslagproviders dan de Azure Storage-provider.

Notitie

Voor veel functie-apps is de standaard Azure Storage-provider voor Durable Functions waarschijnlijk voldoende en is het eenvoudigst te gebruiken omdat hiervoor geen extra configuratie is vereist. Er zijn echter kosten, schaalbaarheid en compromissen voor gegevensbeheer die het gebruik van een alternatieve opslagprovider kunnen bevorderen.

Er zijn twee alternatieve opslagproviders ontwikkeld voor gebruik met Durable Functions en het Durable Task Framework, namelijk de Netherite-opslagprovider en de Microsoft SQL Server-opslagprovider (MSSQL ). In dit artikel worden alle drie de ondersteunde providers beschreven, vergeleken met elkaar en vindt u basisinformatie over hoe u aan de slag kunt gaan met deze providers.

Notitie

Het is momenteel niet mogelijk om gegevens van de ene opslagprovider naar de andere te migreren. Als u een nieuwe opslagprovider wilt gebruiken, moet u een nieuwe app maken die is geconfigureerd met de nieuwe opslagprovider.

Azure Storage

Azure Storage is de standaardopslagprovider voor Durable Functions. Er worden wachtrijen, tabellen en blobs gebruikt om indeling en entiteitsstatus te behouden. Het maakt ook gebruik van blobs en blob-leases om partities te beheren. In veel gevallen is het opslagaccount dat wordt gebruikt voor het opslaan van de Runtimestatus van Durable Functions hetzelfde als het standaardopslagaccount dat wordt gebruikt door Azure Functions (AzureWebJobsStorage). Het is echter ook mogelijk om Durable Functions te configureren met een afzonderlijk opslagaccount. De Azure Storage-provider is ingebouwd in de Durable Functions-extensie en heeft geen andere afhankelijkheden.

De belangrijkste voordelen van de Azure Storage-provider zijn:

  • Er is geen installatie vereist. U kunt het opslagaccount gebruiken dat voor u is gemaakt door de installatie van de functie-app.
  • Serverloos factureringsmodel met laagste kosten: Azure Storage heeft een prijsmodel op basis van verbruik op basis van gebruik (meer informatie).
  • Beste ondersteuning voor hulpprogramma's: Azure Storage biedt platformoverschrijdende lokale emulatie en integreert met Visual Studio, Visual Studio Code en de Azure Functions Core Tools.
  • Meest volwassen: Azure Storage was de oorspronkelijke en meest geteste opslagback-end voor Durable Functions.
  • Preview-ondersteuning voor het gebruik van identiteit in plaats van geheimen voor het maken van verbinding met de opslagprovider.

De broncode voor de DTFx-onderdelen van de Azure Storage-opslagprovider vindt u in de Azure/durabletask GitHub-opslagplaats.

Notitie

Azure Storage-accounts voor algemeen gebruik zijn vereist wanneer u de Azure Storage-provider gebruikt. Alle andere typen opslagaccounts worden niet ondersteund. We raden u ten zeerste aan verouderde v1-opslagaccounts voor algemeen gebruik te gebruiken, omdat de nieuwere v2-opslagaccounts aanzienlijk duurder kunnen zijn voor Durable Functions-workloads. Zie de overzichtsdocumentatie van het Opslagaccount voor meer informatie over Azure Storage-accounttypen.

Netherite

De back-end van Netherite Storage is ontworpen en ontwikkeld door Microsoft Research. Het maakt gebruik van Azure Event Hubs en de SNELLERE databasetechnologie boven op Azure Page Blobs. Het ontwerp van Netherite maakt een aanzienlijk hogere doorvoerverwerking van indelingen en entiteiten mogelijk vergeleken met andere providers. In sommige benchmarkscenario's werd de doorvoer met meer dan een groottevolgorde weergegeven in vergelijking met de standaard Azure Storage-provider.

De belangrijkste voordelen van de Netherite-opslagprovider zijn:

  • Aanzienlijk hogere doorvoer tegen lagere kosten vergeleken met andere opslagproviders.
  • Ondersteunt optimalisatie van prijsprestaties, zodat u de prestaties naar behoefte kunt opschalen.
  • Ondersteunt maximaal 32 gegevenspartities met Event Hubs Basic- en Standard-SKU's.
  • Rendabeler dan andere providers voor workloads met hoge doorvoer.

Meer informatie over de technische details van de Netherite-opslagprovider, inclusief hoe u hiermee aan de slag kunt gaan, vindt u in de Netherite-documentatie. De broncode voor de Netherite-opslagprovider vindt u in de GitHub-opslagplaats microsoft/durabletask-netherite . Een uitgebreidere evaluatie van de Netherite-opslagprovider is ook beschikbaar in het volgende onderzoeksdocument: Serverloze werkstromen met Durable Functions en Netherite.

Notitie

De Naam van Netherite is afkomstig uit de wereld van Minecraft.

Microsoft SQL Server (MSSQL)

De Microsoft SQL Server-opslagprovider (MSSQL) behoudt alle statussen in een Microsoft SQL Server-database. Het is compatibel met zowel on-premises als in de cloud gehoste implementaties van SQL Server, waaronder Azure SQL Database.

De belangrijkste voordelen van de MSSQL-opslagprovider zijn:

  • Ondersteunt niet-verbonden omgevingen. Er is geen Azure-connectiviteit vereist bij het gebruik van een SQL Server-installatie.
  • Draagbaar over meerdere omgevingen en clouds, waaronder door Azure gehost en on-premises.
  • Sterke gegevensconsistentie, waardoor back-up/herstel en failover zonder gegevensverlies mogelijk zijn.
  • Systeemeigen ondersteuning voor aangepaste gegevensversleuteling (een functie van SQL Server).
  • Integreert met bestaande databasetoepassingen via ingebouwde opgeslagen procedures.

Meer informatie over de technische details van de MSSQL-opslagprovider, waaronder hoe u hiermee aan de slag kunt gaan, vindt u in de documentatie van de Microsoft SQL-provider. De broncode voor de MSSQL-opslagprovider vindt u in de GitHub-opslagplaats microsoft/durabletask-mssql .

Alternatieve opslagproviders configureren

Het configureren van alternatieve opslagproviders is doorgaans een proces in twee stappen:

  1. Voeg het juiste NuGet-pakket toe aan uw functie-app (deze vereiste is tijdelijk voor apps met behulp van extensiebundels).
  2. Werk het host.json-bestand bij om op te geven welke opslagprovider u wilt gebruiken.

Als er geen opslagprovider expliciet is geconfigureerd in host.json, wordt de Azure Storage-provider standaard ingeschakeld.

De Azure-opslagprovider configureren

De Azure Storage-provider is de standaardopslagprovider en vereist geen expliciete configuratie, NuGet-pakketverwijzingen of uitbreidingsbundelverwijzingen. U vindt hier de volledige set configuratieopties voor host.json, onder het extensions/durableTask/storageProvider pad.

Verbindingen

De connectionName eigenschap in host.json is een verwijzing naar de omgevingsconfiguratie die aangeeft hoe de app verbinding moet maken met Azure Storage. Het kan het volgende opgeven:

  • De naam van een toepassingsinstelling met een verbindingsreeks. Als u een verbindingsreeks wilt verkrijgen, volgt u de stappen in Toegangssleutels voor het opslagaccount beheren.
  • De naam van een gedeeld voorvoegsel voor meerdere toepassingsinstellingen, samen het definiëren van een op identiteit gebaseerde verbinding.

Als de geconfigureerde waarde zowel een exacte overeenkomst is voor één instelling als een voorvoegselovereenkomst voor andere instellingen, wordt de exacte overeenkomst gebruikt. Als er geen waarde is opgegeven in host.json, is de standaardwaarde 'AzureWebJobsStorage'.

Op identiteit gebaseerde verbindingen

Als u versie 2.7.0 of hoger van de extensie en de Azure-opslagprovider gebruikt, in plaats van een verbindingsreeks te gebruiken met een geheim, kunt u de app een Microsoft Entra-identiteit laten gebruiken. Hiervoor definieert u instellingen onder een gemeenschappelijk voorvoegsel dat wordt toegewezen aan de connectionName eigenschap in de trigger- en bindingsconfiguratie.

Als u een op identiteit gebaseerde verbinding voor Durable Functions wilt gebruiken, configureert u de volgende app-instellingen:

Eigenschappen Sjabloon voor omgevingsvariabele Omschrijving Voorbeeldwaarde
Blob-service-URI <CONNECTION_NAME_PREFIX>__blobServiceUri De gegevensvlak-URI van de blobservice van het opslagaccount met behulp van het HTTPS-schema. <https:// storage_account_name.blob.core.windows.net>
Wachtrijservice-URI <CONNECTION_NAME_PREFIX>__queueServiceUri De gegevensvlak-URI van de wachtrijservice van het opslagaccount met behulp van het HTTPS-schema. <https:// storage_account_name.queue.core.windows.net>
Tabelservice-URI <CONNECTION_NAME_PREFIX>__tableServiceUri De gegevensvlak-URI van een tabelservice van het opslagaccount met behulp van het HTTPS-schema. <https:// storage_account_name.table.core.windows.net>

Er kunnen extra eigenschappen worden ingesteld om de verbinding aan te passen. Zie Algemene eigenschappen voor op identiteit gebaseerde verbindingen.

Wanneer deze worden gehost in de Azure Functions-service, maken identiteitsverbindingen gebruik van een beheerde identiteit. De door het systeem toegewezen identiteit wordt standaard gebruikt, hoewel een door de gebruiker toegewezen identiteit kan worden opgegeven met de credential en clientID eigenschappen. Houd er rekening mee dat het configureren van een door de gebruiker toegewezen identiteit met een resource-id niet wordt ondersteund. Wanneer uw ontwikkelaarsidentiteit wordt uitgevoerd in andere contexten, zoals lokale ontwikkeling, wordt in plaats daarvan uw ontwikkelaarsidentiteit gebruikt, hoewel dit kan worden aangepast. Zie Lokale ontwikkeling met op identiteit gebaseerde verbindingen.

Toestemming verlenen aan de identiteit

Elke identiteit die wordt gebruikt, moet machtigingen hebben om de beoogde acties uit te voeren. Voor de meeste Azure-services betekent dit dat u een rol in Azure RBAC moet toewijzen met behulp van ingebouwde of aangepaste rollen die deze machtigingen bieden.

Belangrijk

Sommige machtigingen worden mogelijk weergegeven door de doelservice die niet nodig is voor alle contexten. Waar mogelijk moet u zich houden aan het principe van minimale bevoegdheid, waarbij de identiteit alleen vereiste bevoegdheden verleent. Als de app bijvoorbeeld alleen uit een gegevensbron moet kunnen lezen, gebruikt u een rol die alleen gemachtigd is om te lezen. Het zou ongepast zijn om een rol toe te wijzen die ook schrijfbewerkingen naar die service toestaat, omdat dit overmatige machtigingen zou zijn voor een leesbewerking. Op dezelfde manier wilt u ervoor zorgen dat de roltoewijzing alleen is afgestemd op de resources die moeten worden gelezen.

U moet een roltoewijzing maken die tijdens runtime toegang biedt tot Azure Storage. Beheerrollen zoals Eigenaar zijn niet voldoende. De volgende ingebouwde rollen worden aanbevolen bij gebruik van de Durable Functions-extensie in normale werking:

Uw toepassing vereist mogelijk meer machtigingen op basis van de code die u schrijft. Als u het standaardgedrag gebruikt of expliciet connectionName instelt op AzureWebJobsStorage, raadpleegt u Verbinding maken voor het hosten van opslag met een identiteit voor andere machtigingsoverwegingen.

De Netherite-opslagprovider configureren

Voor het inschakelen van de Netherite-opslagprovider is een configuratiewijziging in uw host.json. Voor C#-gebruikers is ook een extra installatiestap vereist.

host.json configuratie

In het volgende host.json-voorbeeld ziet u de minimale configuratie die is vereist om de Netherite-opslagprovider in te schakelen.

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

Zie de documentatie aan de slag voor Netherite voor meer gedetailleerde installatie-instructies.

Installeer de Netherite-extensie (alleen.NET)

Notitie

Als uw app extensiebundels gebruikt, moet u deze sectie negeren omdat extensiebundels de noodzaak voor handmatig extensiebeheer verwijderen.

U moet de nieuwste versie van de Netherite-extensie installeren op NuGet. Dit betekent meestal het opnemen van een verwijzing naar .csproj het bestand en het bouwen van het project.

Het te installeren extensiepakket is afhankelijk van de .NET-werkrol die u gebruikt:

De MSSQL-opslagprovider configureren

Voor het inschakelen van de MSSQL-opslagprovider is een configuratiewijziging in uw host.json. Voor C#-gebruikers is ook een extra installatiestap vereist.

host.json configuratie

In het volgende voorbeeld ziet u de minimale configuratie die is vereist om de MSSQL-opslagprovider in te schakelen.

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

Zie de documentatie van de MSSQL-provider om aan de slag te gaan voor gedetailleerdere installatie-instructies.

Installeer de MSSQL-extensie Durable Task (alleen.NET)

Notitie

Als uw app extensiebundels gebruikt, moet u deze sectie negeren omdat extensiebundels de noodzaak voor handmatig extensiebeheer verwijderen.

U moet de nieuwste versie van de MSSQL-opslagproviderextensie op NuGet installeren. Dit betekent meestal het opnemen van een verwijzing naar .csproj het bestand en het bouwen van het project.

Het te installeren extensiepakket is afhankelijk van de .NET-werkrol die u gebruikt:

Opslagproviders vergelijken

Er zijn veel belangrijke compromissen tussen de verschillende ondersteunde opslagproviders. De volgende tabel kan worden gebruikt om u te helpen deze compromissen te begrijpen en te bepalen welke opslagprovider het meest geschikt is voor uw behoeften.

Opslagprovider Azure Storage Netherite MSSQL
Officiële ondersteuningsstatus ✅ Algemeen beschikbaar (GA) ✅ Algemeen beschikbaar (GA) ✅ Algemeen beschikbaar (GA)
Externe afhankelijkheden Azure Storage-account (algemeen gebruik v1) Azure Event Hubs
Azure Storage-account (algemeen gebruik)
SQL Server 2019 of Azure SQL Database
Opties voor lokale ontwikkeling en emulatie Azurite v3.12+ (platformoverschrijdend) Ondersteunt in-memory emulatie van taakhubs (meer informatie) SQL Server Developer Edition (ondersteunt Windows-, Linux- en Docker-containers)
Configuratie van taakhub Expliciet Expliciet Impliciet standaard (meer informatie)
Maximale doorvoer Gemiddeld Zeer hoog Gemiddeld
Maximale indeling/uitschalen van entiteiten (knooppunten) 16 32 N.v.t.
Maximale uitschalen van activiteiten (knooppunten) N.v.t. 32 N.v.t.
Ondersteuning voor KEDA 2.0-schaalaanpassing
(meer informatie)
❌ Niet ondersteund ❌ Niet ondersteund ✅ Ondersteund met behulp van de MSSQL-scaler (meer informatie)
Ondersteuning voor uitbreidingsbundels (aanbevolen voor non-.NET-apps) ✅ Volledig ondersteund ✅ Volledig ondersteund ✅ Volledig ondersteund
Configureerbaar voor prijsprestaties? ❌ Nee ✅ Ja (Event Hubs-RU's en CA's) ✅ Ja (SQL vCPU's)
Verbroken omgevingsondersteuning ❌ Azure-connectiviteit vereist ❌ Azure-connectiviteit vereist ✅ Volledig ondersteund
Op identiteit gebaseerde verbindingen ✅ Volledig ondersteund ❌ Niet ondersteund ⚠ϑ Vereist runtimegestuurd schalen

Volgende stappen