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.
- 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:
- Voeg het juiste NuGet-pakket toe aan uw functie-app (deze vereiste is tijdelijk voor apps met behulp van extensiebundels).
- 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. Hier vindt u de volledige set host.json configuratieopties, onder het extensions/durableTask/storageProvider
pad.
Connecties
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 | Beschrijving | 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:
- Inzender van opslag-blobgegevens
- Inzender voor opslagwachtrijgegevens
- Inzender voor opslagtabelgegevens
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 met hostopslag 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:
- Voor de in-process .NET-werkrol installeert u
Microsoft.Azure.DurableTask.Netherite.AzureFunctions
. - Voor de geïsoleerde .NET-werkrol installeert u
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.Netherite
.
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:
- Voor de in-process .NET-werkrol installeert u
Microsoft.DurableTask.SqlServer.AzureFunctions
. - Voor de geïsoleerde .NET-werkrol installeert u
Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
.
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 | Matig | Zeer hoog | Matig |
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 duurzame entiteiten | ✅ Volledig ondersteund | ✅ Volledig ondersteund | ⚠Ondersteund behalve bij gebruik van .NET Isolated |
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 |
Flex Consumption-abonnement | ✅ Volledig ondersteund (zie notities) | ❌ Niet ondersteund | ❌ Niet ondersteund |