Dela via


Leverantörer av lagring för Durable Functions

Durable Functions är en uppsättning Azure Functions-utlösare och bindningar som drivs internt av Durable Task Framework (DTFx). DTFx stöder olika backend-lagringsleverantörer, inklusive den Azure Storage-leverantör som används av Durable Functions. Från och med Durable Functions v2.5.0 kan användarna konfigurera sina funktionsappar så att de använder andra DTFx-lagringsleverantörer än Azure Storage-providern.

Kommentar

Standardprovidern för Azure Storage för Durable Functions är den enklaste att använda eftersom den inte kräver någon extra konfiguration. Det finns dock kostnads-, skalbarhets- och datahanteringsavvägningar som kan gynna användningen av en alternativ backend-leverantör.

Durable Functions stöder två typer av serverdelsproviders: "Bring your own (BYO)" och Azure managed. BYO-alternativen inkluderar Azure Storage, Netherite och Microsoft SQL Server (MSSQL). Det hanterade Azure-alternativet är den nya beständiga uppgiftsschemaläggaren som just nu är i förhandsgranskning. Den här artikeln beskriver alla serverdelsleverantörer som stöds, jämför dem med varandra och ger grundläggande information om hur du kommer igång med att använda dem.

Kommentar

Det går för närvarande inte att migrera data från en lagringsserverdelsprovider till en annan. Om du vill använda en ny provider bör du skapa en ny app som konfigurerats med den nya providern.

Beständig uppgiftsschemaläggare (förhandsversion)

Den hållbara uppgiftsschemaläggaren är en fullständigt hanterad backend-tjänst med hög prestanda för Durable Functions-ramverket. Den har utformats och byggts från grunden med hjälp av Microsoft Research. Den här nya providern syftar till att ge den bästa användarupplevelsen i aspekter som hantering, observerbarhet, prestanda och säkerhet.

De viktigaste fördelarna med den hållbara schemaläggaren är:

  • Lägre hanterings- och driftkostnader jämfört med BYO-serverdelsleverantörer
  • Den förstklassiga instrumentpanelen för observerbarhet och hantering tillhandahålls direkt.
  • Har stöd för det högsta dataflödet av alla bakändar idag.
  • Stöd för autentisering med hanterad identitet.

Befintliga Durable Functions-användare kan utnyttja schemaläggaren utan kodändringar. Läs mer om den hållbara schemaläggaren och hur du kommer igång.

Exempel för varaktiga schemaläggare finns på GitHub.

Azure Storage

Azure Storage är standardlagringsprovidern för Durable Functions. Den använder köer, tabeller och blobbar för att bevara orkestrerings- och entitetstillstånd. Den använder också blobar och bloblån för att hantera partitioner. I många fall är lagringskontot som används för att lagra Durable Functions-körningstillstånd samma som standardlagringskontot som används av Azure Functions (AzureWebJobsStorage). Det är dock också möjligt att konfigurera Durable Functions med ett separat lagringskonto. Azure Storage-providern är inbyggd i Durable Functions-tillägget och har inga andra beroenden.

De viktigaste fördelarna med Azure Storage-providern är:

  • Ingen installation krävs – du kan använda lagringskontot som skapades åt dig av funktionsappens konfigurationsupplevelse.
  • Serverlös faktureringsmodell med lägsta kostnad – Azure Storage har en förbrukningsbaserad prismodell som helt baseras på användning (mer information).
  • Bästa stöd för verktyg – Azure Storage erbjuder plattformsoberoende lokal emulering och integreras med Visual Studio, Visual Studio Code och Azure Functions Core Tools.
  • Mest mogen – Azure Storage var den ursprungliga och mest stridstestade lagringsserverdelen för Durable Functions.
  • Stöd för att använda identitet i stället för hemligheter för att ansluta till lagringsprovidern.

Källkoden för DTFx-komponenterna i Azure Storage-lagringsprovidern finns på GitHub-lagringsplatsen Azure/durabletask .

Kommentar

Azure Storage-standardkonton för generell användning krävs när du använder Azure Storage-providern. Alla andra typer av lagringskonton stöds inte. Vi rekommenderar starkt att du använder äldre v1-lagringskonton för generell användning eftersom de nyare v2-lagringskontona kan vara dyrare för Durable Functions-arbetsbelastningar. Mer information om Azure Storage-kontotyper finns i översiktsdokumentationen för lagringskontot.

Netherite

Kommentar

Stöd för att använda Netherite Storage-serverdelen med Durable Functions upphör den 31 mars 2028. Vi rekommenderar att du börjar utvärdera Durable Task Scheduler för arbetsbelastningar som du använder Netherite för. Se meddelande om supportens slut.

Netherite Storage-serverdelen har utformats och utvecklats av Microsoft Research. Den använder Azure Event Hubs och FASTER-databastekniken ovanpå Azure Page Blobs. Netherite-designen möjliggör bearbetning med högre dataflöde av orkestreringar och entiteter jämfört med andra leverantörer. I vissa benchmark-scenarier visade sig dataflödet öka med mer än en storleksordning jämfört med standardleverantören för Azure Storage.

De viktigaste fördelarna med Netherite-lagringsprovidern är:

  • Högre dataflöde till lägre kostnad jämfört med andra lagringsleverantörer.
  • Har stöd för pris-prestandaoptimering så att du kan skala upp prestanda efter behov.
  • Stöder upp till 32 datapartitioner med Event Hubs Basic- och Standard-SKU:er.
  • Mer kostnadseffektivt än andra leverantörer för arbetsbelastningar med högt dataflöde.

Du kan läsa mer om teknisk information om Netherite-lagringsprovidern, inklusive hur du kommer igång med att använda den, i Netherite-dokumentationen. Källkoden för Netherite-lagringsprovidern finns på GitHub-lagringsplatsen microsoft/durabletask-netherite . En mer djupgående utvärdering av Netherite-lagringsprovidern finns också i följande forskningsdokument: Serverlösa arbetsflöden med Durable Functions och Netherite.

Kommentar

Netherite-namnet kommer från Minecrafts värld.

Microsoft SQL Server (MSSQL)

Microsoft SQL Server-lagringsprovidern (MSSQL) bevarar alla tillstånd i en Microsoft SQL Server-databas. Den är kompatibel med både lokala och molnbaserade distributioner av SQL Server, inklusive Azure SQL Database.

De viktigaste fördelarna med MSSQL-lagringsprovidern är:

  • Stöder frånkopplade miljöer – ingen Azure-anslutning krävs när du använder en SQL Server-installation.
  • Användbar över flera miljöer och moln, inklusive värd i Azure och lokala miljöer.
  • Stark datakonsekvens, aktivering av säkerhetskopiering/återställning och redundans utan dataförlust.
  • Internt stöd för anpassad datakryptering (en funktion i SQL Server).
  • Integrerar med befintliga databasprogram via inbyggda lagrade procedurer.

Du kan läsa mer om teknisk information om MSSQL-lagringsprovidern, inklusive hur du kommer igång med att använda den, i dokumentationen för Microsoft SQL-providern. Källkoden för MSSQL-lagringsprovidern finns på GitHub-lagringsplatsen microsoft/durabletask-mssql .

Konfigurering av Azure-lagringsleverantören

Azure Storage-providern är standardlagringsprovidern och kräver ingen explicit konfiguration, NuGet-paketreferenser eller tilläggspaketreferenser. Du kan hitta den fullständiga uppsättningen av host.json-konfigurationsalternativ här, under extensions/durableTask/storageProvider-sökvägen.

anslutningar

Egenskapen connectionName i host.json är en referens till miljökonfigurationen som anger hur appen ska ansluta till Azure Storage. Den kan ange:

  • Namnet på ett delat prefix för flera programinställningar, som tillsammans definierar en identitetsbaserad anslutning. Hanterade identiteter använder Microsoft Entra-autentisering för att tillhandahålla den säkraste anslutningen till ditt lagringskonto.
  • Namnet på en programinställning som innehåller en anslutningssträng. För att få en anslutningssträng följer du stegen som visas i Hantera åtkomstnycklar för lagringskonto.

Om det konfigurerade värdet både är en exakt matchning för en enskild inställning och en prefixmatchning för andra inställningar används den exakta matchningen. Om inget värde anges i host.json är AzureWebJobsStoragestandardvärdet .

Identitetsbaserade anslutningar

Om du använder version 2.7.0 eller senare av tillägget och Azure Storage-providern kan du i stället för att använda en anslutningssträng med en hemlighet låta appen använda en Microsoft Entra-identitet. För att göra detta definierar du inställningar under ett vanligt prefix som mappar till connectionName egenskapen i utlösar- och bindningskonfigurationen.

Om du vill använda en identitetsbaserad anslutning för Durable Functions konfigurerar du följande appinställningar:

Egendom Miljövariabelmall beskrivning Exempelvärde
URI för blobtjänst <CONNECTION_NAME_PREFIX>__blobServiceUri Dataplanens URI för blobtjänsten i lagringskontot, med användning av HTTPS-schemat. <https://storage_account_name.blob.core.windows.net>
Kötjänst-URI <CONNECTION_NAME_PREFIX>__queueServiceUri Dataplanets URI för lagringskontots kötjänst med HTTPS-protokollet. <https:// storage_account_name.queue.core.windows.net>
Tabelltjänst-URI <CONNECTION_NAME_PREFIX>__tableServiceUri Dataplanets URI för en tabelltjänst för lagringskontot med hjälp av HTTPS-schemat. <https:// storage_account_name.table.core.windows.net>

Ytterligare egenskaper kan anges för att anpassa anslutningen. Se Vanliga egenskaper för identitetsbaserade anslutningar.

När identitetsbaserade anslutningar finns i Azure Functions-tjänsten använder de en hanterad identitet. Den systemtilldelade identiteten används som standard, även om en användartilldelad identitet kan anges med credential egenskaperna och clientID . Observera att det inte går att konfigurera en användartilldelad identitet med ett resurs-ID. När den körs i andra sammanhang, till exempel lokal utveckling, används utvecklaridentiteten i stället, även om den kan anpassas. Se Lokal utveckling med identitetsbaserade anslutningar.

Ge behörighet till identiteten

Den identitet som används måste ha behörighet att utföra de avsedda åtgärderna. För de flesta Azure-tjänster innebär det att du måste tilldela en roll i Azure RBAC med hjälp av antingen inbyggda eller anpassade roller som ger dessa behörigheter.

Viktigt!

Vissa behörigheter kan exponeras av måltjänsten som inte är nödvändiga för alla kontexter. Om möjligt följer du principen om minsta behörighet och beviljar identiteten endast nödvändiga privilegier. Om appen till exempel bara behöver kunna läsa från en datakälla använder du en roll som bara har behörighet att läsa. Det skulle vara olämpligt att tilldela en roll som också tillåter skrivning till tjänsten, eftersom det skulle ge allt för mycket behörighet för en åtgärd som endast är avsedd för läsning. På samma sätt vill du försäkra dig om att rolltilldelningen är begränsad till endast de resurser som behöver läsas.

Du måste skapa en rolltilldelning som ger åtkomst till Azure Storage under körningstid. Hanteringsroller som Ägare räcker inte. Följande inbyggda roller rekommenderas när du använder Durable Functions-tillägget i normal drift:

Programmet kan kräva fler behörigheter baserat på den kod du skriver. Om du använder standardbeteendet eller uttryckligen anger connectionName till "AzureWebJobsStorage", se Ansluta till värdlagring med en identitet för andra aspekter av behörigheter.

Konfigurera alternativa lagringsleverantörer

Att konfigurera alternativa lagringsproviders är vanligtvis en tvåstegsprocess:

  1. Lägg till lämpligt NuGet-paket i funktionsappen (det här kravet är tillfälligt för appar som använder tilläggspaket).
  2. Uppdatera host.json-filen för att ange vilken lagringsprovider du vill använda.

Om ingen lagringsprovider uttryckligen konfigureras i host.json aktiveras Azure Storage-providern som standard.

Konfigurera varaktig uppgiftsschemaläggare (förhandsversion)

Se dokumentationen om att komma igång med schemaläggaren för hållbara uppgifter.

Konfigurera MSSQL-lagringsprovidern

För att aktivera MSSQL-lagringsprovidern krävs en konfigurationsändring i din host.json. För C#-användare krävs även ytterligare ett installationssteg.

host.json konfiguration

I följande exempel visas den minsta konfiguration som krävs för att aktivera MSSQL-lagringsprovidern.

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

För mer detaljerade installationsinstruktioner, se MSSQL-providerns introduktionsdokumentation och dokumentationen på github.io.

Installera Durable Task MSSQL-tillägget (endast .NET)

Kommentar

Om appen använder tilläggspaket bör du ignorera det här avsnittet eftersom tilläggspaket tar bort behovet av manuell tilläggshantering.

Du måste installera den senaste versionen av MSSQL-lagringsprovidertillägget på NuGet: Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer. Det innebär vanligtvis att du inkluderar en referens till den i .csproj filen och skapar projektet.

Jämföra lagringsprovidrar

Det finns många betydande kompromisser mellan de olika lagringsleverantörer som stöds. Följande tabell kan användas för att hjälpa dig att förstå dessa kompromisser och avgöra vilken lagringsprovider som passar bäst för dina behov.

Kommentar

Stöd för att använda Netherite Storage-serverdelen med Durable Functions upphör den 31 mars 2028. Vi rekommenderar att du börjar utvärdera Durable Task Scheduler för arbetsbelastningar som du använder Netherite för. Se meddelande om supportens slut.

Lagringsleverantör Azure Storage Netherite MSSQL DTS
Officiell supportstatus ✅ Allmänt tillgänglig (GA) ✅ Allmänt tillgänglig (GA) ✅ Allmänt tillgänglig (GA) Offentlig förhandsversion
Externa beroenden Azure Storage-konto (generell användning v1) Azure Event Hubs
Azure Storage-konto (generell användning)
SQL Server 2019 eller Azure SQL Database Ej tillämpligt
Alternativ för lokal utveckling och emulering Azurite v3.12+ (plattformsoberoende) Stöder minnesintern emulering av aktivitetshubbar (mer information) SQL Server Developer Edition (stöder Windows-, Linux- och Docker-containrar) Durable task scheduler-emulator
Konfiguration av aktivitetshubben Tydlig Tydlig Implicit som standard (mer information) Tydlig
Maximalt dataflöde Måttlig Mycket högt Måttlig Mycket högt
Maximal orkestrering/utskalning av entitet (noder) 16 32 Ej tillämpligt Ej tillämpligt
Maximal aktivitetsutökning (noder) Ej tillämpligt 32 Ej tillämpligt Ej tillämpligt
Stöd för varaktiga entiteter ✅ Stöds fullt ut ✅ Stöds fullt ut ⚠️ Stöds förutom när du använder .NET Isolerad ✅ Stöds fullt ut
Stöd för KEDA 2.0-skalning
(Mer information)
❌ Stöds inte ❌ Stöds inte ✅ Stöds genom att använda MSSQL-scaler (mer information) Kommer snart!
Stöd för tilläggspaket (rekommenderas för non-.NET appar) ✅ Stöds fullt ut ✅ Stöds fullt ut ✅ Stöds fullt ut Kommer snart!
Är pris/prestanda-förhållandet konfigurerbart? ❌ Nej ✅ Ja (Event Hubs TUs och CUs) ✅ Ja (SQL vCPU) Kommer snart!
Stöd för frånkopplad miljö ❌ Azure-anslutning krävs ❌ Azure-anslutning krävs ✅ Stöds fullt ut ❌ Azure-anslutning krävs
Identitetsbaserade anslutningar ✅ Stöds fullt ut ❌ Stöds inte ⚠️ Kräver körningsdriven skalning ✅ Stöds fullt ut
Flexibel förbrukningsplan ✅ Stöds fullt ut (se anteckningar) ❌ Stöds inte ✅ Stöds fullt ut ❌ Stöds inte

Nästa steg