Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein Aufgabenhub ist eine Darstellung des aktuellen Zustands der Anwendung im Speicher, einschließlich aller ausstehenden Arbeiten. Während eine Anwendung ausgeführt wird, speichert der Aufgabenhub kontinuierlich den Fortschritt von Orchestrierungs-, Aktivitäts- und Entitätsfunktionen. Dieser Ansatz stellt sicher, dass die Anwendung die Verarbeitung fortsetzen kann, wo sie unterbrochen wurde, wenn sie nach dem vorübergehenden Anhalten oder Unterbrechen neu gestartet wird. Ein Aufgabenhub ermöglicht es Anwendungen auch, die Compute-Worker dynamisch zu skalieren.
In diesem Artikel wird erläutert, was ein Aufgabenhub speichert, wie Sie Aufgabenhubs konfigurieren und benennen, wie Sie sie mit verschiedenen Speicher-Back-Ends erstellen und verwalten und wie Aufgabenhubs intern funktionieren.
Konzeptionell speichert ein Aufgabenhub die folgenden Informationen:
- Die Instanzzustände aller Orchestrierungs- und Entitätsinstanzen.
- Die zu verarbeitenden Nachrichten, einschließlich:
- Alle Aktivitätsmeldungen, die Aktivitäten darstellen, die auf die Ausführung warten.
- Alle Instanznachrichten , die auf die Zustellung an Instanzen warten.
Aktivitätsmeldungen sind zustandslos und können überall verarbeitet werden. Instanznachrichten müssen an eine bestimmte zustandsbehaftete Instanz (Orchestrierung oder Entität) übermittelt werden, die durch ihre Instanz-ID identifiziert wird.
Intern kann jeder Speicheranbieter eine andere Organisation verwenden, um Instanzzustände und Nachrichten darzustellen. Beispielsweise speichert der Azure Storage Anbieter Nachrichten in Azure Storage Warteschlangen, aber der MSSQL-Anbieter speichert sie in relationalen Tabellen. Diese Unterschiede sind für den Anwendungsentwurf nicht wichtig, aber einige davon können die Leistungsmerkmale beeinflussen. Weitere Informationen finden Sie unter Darstellung im Speicher.
Dauerhafte Task-SDKs verwenden den Durable Task Scheduler als Backend für Task-Hubs. Der permanente Aufgabenplaner ist ein vollständig verwalteter Dienst, der den Speicher intern verarbeitet.
Namen des Task-Hubs
Aufgabenhubs werden durch einen Namen identifiziert, der den folgenden Regeln entspricht:
- Enthält nur alphanumerische Zeichen
- Beginnt mit einem Buchstaben
- Hat eine Mindestlänge von 3 Zeichen, maximale Länge von 45 Zeichen
Deklarieren Sie den Aufgabenhubnamen in der dateihost.json , wie im folgenden Beispiel gezeigt:
host.json (Funktionen 2.0)
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "MyTaskHub"
}
}
}
host.json (Funktionen 1.x)
{
"durableTask": {
"hubName": "MyTaskHub"
}
}
Sie können Aufgabenhubs auch mithilfe von App-Einstellungen einrichten, wie in der folgenden host.json Beispieldatei gezeigt:
host.json (Funktionen 2.0)
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "%MyTaskHub%"
}
}
}
host.json (Funktionen 1.x)
{
"durableTask": {
"hubName": "%MyTaskHub%"
}
}
Der Name des Aufgabenhubs wird auf den Wert der MyTaskHub App-Einstellung festgelegt. In der folgenden local.settings.json Datei wird gezeigt, wie Sie die MyTaskHub Einstellung als samplehubname definieren:
{
"IsEncrypted": false,
"Values": {
"MyTaskHub" : "samplehubname"
}
}
Hinweis
Bei Verwendung von Bereitstellungsslots wird empfohlen, den Aufgabenhubnamen mithilfe von App-Einstellungen einzurichten. Wenn Sie sicherstellen möchten, dass ein bestimmter Slot immer einen bestimmten Task-Hub verwendet, verwenden Sie "Slot-Sticky-App-Einstellungen".
Zusätzlich zu host.json können die Namen der Task Hubs auch in den Orchestrierung Client Bindung Metadaten eingerichtet werden. Diese Einrichtung ist nützlich, wenn Sie auf Orchestrierungen oder Entitäten zugreifen müssen, die sich in einer separaten Funktions-App befinden. Der folgende Code zeigt, wie eine Funktion geschrieben wird, die die Orchestrierungs-Clientbindung verwendet, um mit einem Aufgabenhub zu arbeiten, der als App-Einstellung konfiguriert wurde.
[FunctionName("HttpStart")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[DurableClient(TaskHub = "%MyTaskHub%")] IDurableOrchestrationClient starter,
string functionName,
ILogger log)
{
// Function input comes from the request content.
object eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync(functionName, eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
Hinweis
Das vorherige Beispiel ist für Durable Functions 2.x. Verwenden Sie für Durable Functions 1.x DurableOrchestrationContext anstelle von IDurableOrchestrationContext. Weitere Informationen zu den Unterschieden zwischen den Versionen finden Sie im Artikel Durable Functions-Versionen.
Hinweis
Das Einrichten von Aufgabenhubnamen in Clientbindungsmetadaten ist nur erforderlich, wenn Sie eine Funktions-App für den Zugriff auf Orchestrierungen und Entitäten in einer anderen Funktions-App verwenden. Wenn die Clientfunktionen in derselben Funktions-App wie die Orchestrierungen und Entitäten definiert sind, vermeiden Sie die Angabe von Aufgabenhubnamen in den Bindungsmetadaten. Standardmäßig erhalten alle Clientbindungen ihre Aufgabenhubmetadaten aus den host.json-Einstellungen .
Wenn nicht angegeben, wird wie in der folgenden Tabelle gezeigt ein Standardname für den Aufgabenhub verwendet:
| Dauerhafte Erweiterungsversion | Standardname des Aufgabenhubs |
|---|---|
| 2.x | Wenn sie in Azure bereitgestellt wird, wird der Aufgabenhubname vom Namen der Funktions-App abgeleitet. Wenn sie außerhalb von Azure ausgeführt wird, ist der Standardname des Aufgabenhubs TestHubName. |
| 1.x | Der Standardname des Aufgabenhubs für alle Umgebungen lautet DurableFunctionsHub. |
Weitere Informationen zu den Unterschieden zwischen Erweiterungsversionen finden Sie im Artikel Durable Functions versions.
Verwenden mehrerer Apps mit separaten Aufgabenhubs
Jede Anwendung, die ein Back-End teilt, sollte eine Verbindung mit einem eigenen Aufgabenhub herstellen, um Konflikte zu vermeiden. Wenn mehrere Apps denselben Aufgabenhub verwenden, konkurrieren sie um Nachrichten, was zu nicht definierten Verhaltensweisen führen kann, einschließlich Orchestrierungen, die unerwartet hängen bleiben. Ein einzelnes Back-End kann mehrere Task-Hubs enthalten; konfigurieren Sie jede Anwendung mit ihrem eigenen Task-Hub.
Diese Anforderung gilt für alle Speicher-Back-Ends. Konfigurieren Sie für BYO-Speicheranbieter (Azure Storage, Netherite, MSSQL) jede Funktions-App mit einem separaten Aufgabenhubnamen. Diese Anforderung gilt auch für Stagingslots: Jeder Stagingslot muss mit einem eindeutigen Aufgabenhubnamen konfiguriert werden.
Von Bedeutung
Standardmäßig wird der App-Name als Aufgaben-Hub-Name verwendet, wodurch sichergestellt wird, dass versehentliche Freigaben verhindert werden. Wenn Sie Aufgabenhubnamen in host.jsonexplizit konfigurieren, stellen Sie sicher, dass die Namen eindeutig sind. Die einzige Ausnahme ist, wenn Sie Kopien derselben App in mehreren Regionen für die Notfallwiederherstellung bereitstellen. Verwenden Sie in diesem Fall denselben Aufgabenhub für die Kopien.
Das folgende Diagramm veranschaulicht einen Aufgabenhub pro Funktions-App in freigegebenen und dedizierten Azure Storage-Konten.
Verwaltung des Aufgabenhubs für Durable Task Scheduler
In diesem Abschnitt wird beschrieben, wie Sie Aufgabenhubs erstellen und verwalten, wenn Sie das Back-End für dauerhafte Aufgabenplanung verwenden. Erstellen Sie die Ressourcen für den Zeitplan und den Aufgabenhub explizit, bevor Ihre Anwendung sie verwendet.
Erstellen eines Planers und eines Aufgabenhubs
Erstellen Sie einen Planer und einen Aufgabenhub mithilfe des Azure Portals, Azure CLI, Azure Resource Manager (ARM) oder Bicep.
Suchen Sie im Azure-Portal nach "Durable Task Scheduler ", und wählen Sie ihn aus den Ergebnissen aus.
Wählen Sie "Erstellen" aus, um den Bereich "Zeitplanerstellung" zu öffnen.
Füllen Sie die Felder auf der Registerkarte " Grundlagen " aus, einschließlich der Ressourcengruppe, des Zeitplannamens, der Region und der SKU. Klicken Sie auf Überprüfen + erstellen.
Nachdem die Überprüfung bestanden wurde, wählen Sie "Erstellen" aus. Die Bereitstellung dauert bis zu 15 Minuten.
Wechseln Sie nach dem Erstellen des Schedulers zur Scheduler-Ressource. Erstellen Sie auf der Seite "Übersicht" einen neuen Aufgabenhub.
Von Bedeutung
Die 0.0.0.0/0 IP-Zulassungsliste ermöglicht den Zugriff von jeder IP-Adresse. Beschränken Sie dies für Produktionsbereitstellungen nur auf die erforderlichen IP-Bereiche.
In den vorherigen Beispielen wird die dedizierte SKU verwendet. Der Durable Task Scheduler bietet auch eine Consumption SKU. Weitere Informationen zum Verwalten von Ressourcen im Durable Task Scheduler finden Sie unter Develop with Durable Task Scheduler.
Konfigurieren der identitätsbasierten Authentifizierung
Der dauerhafte Aufgabenplaner unterstützt nur die verwaltete Identitätsauthentifizierung. Es unterstützt keine Verbindungszeichenfolgen mit Speicherschlüsseln. Weisen Sie der verwalteten Identität die entsprechende rollenbasierte Zugriffssteuerungsrolle (RBAC) zu, und konfigurieren Sie Ihre App so, dass diese Identität verwendet wird.
Die folgenden Rollen stehen zur Verfügung:
| Rolle | Beschreibung |
|---|---|
| Mitwirkender an langlebigen Aufgabendaten | Vollständiger Datenzugriff. Die übergeordnete Rolle aller anderen Rollen. |
| Worker für langlebige Aufgaben | Interagieren Sie mit dem Zeitplan für die Verarbeitung von Orchestrierungen, Aktivitäten und Entitäten. |
| Permanenter Aufgabendatenleser | Nur-Lesezugriff auf Orchestrierungs- und Entitätsdaten. |
Hinweis
Für die meisten Apps ist die Rolle "Durable Task Data Contributor" erforderlich.
Verwenden Sie nach Möglichkeit vom Benutzer zugewiesene verwaltete Identitäten, da sie nicht an den Lebenszyklus der App gebunden sind und sie nach dem Entfernen der App wiederverwenden können.
Wechseln Sie im Azure-Portal zur Ressource "Scheduler" oder "Task Hub".
Wählen Sie im linken Menü Zugriffssteuerung (IAM).
Wählen Sie Hinzufügen>Rollenzuweisung hinzufügen.
Suchen Sie Mitwirkender an langlebigen Aufgabendaten, und wählen Sie die Rolle aus. Wählen Sie Weiteraus.
Wählen Sie unter Zugriff zuweisen zu die Option Verwaltete Identität aus. Wählen Sie + Mitglieder hinzufügen.
Wählen Sie vom Benutzer zugewiesene verwaltete Identität aus, wählen Sie die Identität und dann "Auswählen" aus.
Wählen Sie "Überprüfen" und "Zuweisen " aus, um den Vorgang abzuschließen.
Wechseln Sie zu Ihrer Funktions-App, und wählen Sie Einstellungen>Identität aus. Wählen Sie die Registerkarte "Benutzerzuweisung" aus, und fügen Sie die Identität hinzu.
Nachdem Sie die Identität zugewiesen haben, fügen Sie Ihrer App die folgenden Umgebungsvariablen hinzu:
| Variable | Wert |
|---|---|
TASKHUB_NAME |
Der Name der Aufgabenzentrale. |
DURABLE_TASK_SCHEDULER_CONNECTION_STRING |
Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id} |
Hinweis
Wenn Sie eine vom System zugewiesene verwaltete Identität verwenden, lassen Sie das Segment ClientID aus der Verbindungszeichenfolge weg: Endpoint={scheduler endpoint};Authentication=ManagedIdentity.
Vollständige Identitätskonfigurationsdetails finden Sie unter Configure managed identity for Durable Task Scheduler.
AUFGABENHUB-Verwaltung des BYO-Speicheranbieters
In diesem Abschnitt werden die Erstellung und Löschung von Task Hubs sowie das Überprüfen ihrer Inhalte behandelt. Es gilt für Bring-your-own (BYO)-Speicheranbieter: Azure Storage, Netherite und MSSQL.
Erstellen und Löschen von Aufgabenhubs
Ein leerer Aufgabenhub mit allen erforderlichen Ressourcen wird automatisch im Speicher erstellt, wenn eine Funktions-App zum ersten Mal gestartet wird.
Wenn Sie den Azure Storage-Anbieter verwenden, ist keine zusätzliche Konfiguration erforderlich. Befolgen Sie andernfalls die Anweisungen zum Konfigurieren von Speicheranbietern , um sicherzustellen, dass der Speicheranbieter die für den Aufgabenhub erforderlichen Speicherressourcen ordnungsgemäß einrichten und darauf zugreifen kann.
Hinweis
Der Aufgabenhub wird nicht automatisch gelöscht, wenn Sie die Funktions-App beenden oder löschen. Um diese Daten zu entfernen, löschen Sie den Aufgabenhub, dessen Inhalt oder das enthaltende Speicherkonto manuell.
Tipp
In einem Entwicklungsszenario müssen Sie möglicherweise häufig aus einem sauberen Zustand neu starten. Ändern Sie dazu einfach den namen des konfigurierten Aufgabenhubs. Durch diese Änderung wird die Erstellung eines neuen, leeren Aufgabenhubs erzwungen, wenn Sie die Anwendung neu starten. Die alten Daten werden in diesem Fall nicht gelöscht.
Überprüfung der Inhalte des Task-Hubs
Es gibt mehrere gängige Methoden zum Überprüfen des Inhalts eines Aufgabenhubs:
- Innerhalb einer Funktions-App stellt das Clientobjekt Methoden zum Abfragen des Instanzspeichers bereit. Weitere Informationen dazu, welche Arten von Abfragen unterstützt werden, finden Sie im Artikel " Instanzverwaltung" .
- Ebenso bietet die HTTP-API REST-Anforderungen an, um den Status von Orchestrierungen und Entitäten abzufragen. Weitere Informationen finden Sie in der HTTP-API-Referenz .
- Das Tool Durable Functions Monitor kann Task-Hubs prüfen und bietet verschiedene Optionen für die visuelle Anzeige.
Bei einigen Speicheranbietern können Sie den Aufgabenhub auch überprüfen, indem Sie direkt zum zugrunde liegenden Speicher wechseln:
- Wenn Sie den Azure Storage-Anbieter verwenden, werden die Instanzzustände in der Instance Table und der History Table gespeichert, die Sie mithilfe von Tools wie Azure Storage Explorer prüfen können.
- Wenn Sie den MSSQL-Speicheranbieter verwenden, verwenden Sie SQL-Abfragen und -Tools, um den Inhalt des Aufgabenhubs in der Datenbank zu prüfen.
Arbeitsaufgaben
Die Aktivitätsnachrichten und Instanzmeldungen im Aufgabenhub stellen die Arbeit dar, die die Anwendung verarbeiten muss. Während die Anwendung ausgeführt wird, ruft sie kontinuierlich Arbeitsaufgaben vom Aufgabenhub ab. Jede Arbeitsaufgabe verarbeitet eine oder mehrere Nachrichten. Es gibt zwei Arten von Arbeitsaufgaben:
- Aktivitätsarbeitselemente: Führen Sie eine Aktivitätsfunktion aus, um eine Aktivitätsnachricht zu verarbeiten.
- Orchestrator-Arbeitsaufgaben: Führen Sie eine Orchestrator- oder Entitätsfunktion aus, um eine oder mehrere Instanznachrichten zu verarbeiten.
Mitarbeiter können mehrere Arbeitsaufgaben gleichzeitig verarbeiten, vorbehaltlich der konfigurierten Parallelitätsgrenzwerte pro Mitarbeiter.
Weitere Informationen zu Gleichzeitigkeitsbegrenzungen finden Sie unter Leistung und Skalierung.
Sobald ein Worker ein Arbeitselement abgeschlossen hat, committet er die Effekte zurück an den Aufgabenhub. Diese Effekte variieren je nach Art der ausgeführten Funktion:
- Eine abgeschlossene Aktivitätsfunktion erstellt eine Instanznachricht, die das Ergebnis enthält, das an die übergeordnete Orchestratorinstanz adressiert ist.
- Eine abgeschlossene Orchestratorfunktion aktualisiert den Orchesterstatus und den Verlauf und kann neue Nachrichten erstellen.
- Eine abgeschlossene Entitätsfunktion aktualisiert den Entitätsstatus und kann auch neue Instanzmeldungen erstellen.
Bei Orchestrierungen stellt jedes Arbeitselement eine Episode der Ausführung dieser Orchestrierung dar. Eine Episode ist eine Runde des Orchestrators, der ausgeführt wird, die verfügbaren Ergebnisse verarbeitet und dann anhält, bis das nächste Ergebnis eingeht. Beispielsweise beginnt eine Episode, wenn die Orchestrierung beginnt, wenn eine Aktivität abgeschlossen ist und ein Ergebnis zurückgibt, oder wenn ein externes Ereignis eingeht. Die Episode endet, wenn der Orchestrator beendet oder einen Punkt erreicht, an dem er auf neue Nachrichten warten muss.
Ausführungsbeispiel
Betrachten Sie eine Fan-Out-Fan-In-Orchestrierung, bei der zwei Aktivitäten parallel gestartet werden und gewartet wird, bis beide abgeschlossen wurden:
[FunctionName("Example")]
public static async Task Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
Task t1 = context.CallActivityAsync<int>("MyActivity", 1);
Task t2 = context.CallActivityAsync<int>("MyActivity", 2);
await Task.WhenAll(t1, t2);
}
using Microsoft.DurableTask;
public class Example : TaskOrchestrator<object?, object?>
{
public override async Task<object?> RunAsync(TaskOrchestrationContext context, object? input)
{
Task t1 = context.CallActivityAsync("MyActivity", 1);
Task t2 = context.CallActivityAsync("MyActivity", 2);
await Task.WhenAll(t1, t2);
return null;
}
}
Nachdem diese Orchestrierung von einem Client initiiert wurde, verarbeitet die Anwendung sie als Abfolge von Arbeitsaufgaben. Jedes abgeschlossene Arbeitselement aktualisiert beim Committen den Status des Aufgabenhubs. Hier sind die Schritte aufgeführt:
Ein Client fordert an, eine neue Orchestrierung mit der Instanz-ID "123" zu starten. Nachdem der Client diese Anforderung abgeschlossen hat, enthält der Aufgabenhub einen Platzhalter für den Orchestrierungsstatus und eine Instanzmeldung:
Die Bezeichnung
ExecutionStartedist eine von vielen history-Ereignistypen die die verschiedenen Arten von Nachrichten und Ereignissen identifizieren, die an der Geschichte einer Orchestrierung teilnehmen.Ein Worker führt einen Orchestrator-Arbeitsvorgang aus, um die
ExecutionStartedNachricht zu verarbeiten. Sie ruft die Orchestratorfunktion auf, die mit der Ausführung des Orchestrierungscodes beginnt. Dieser Code plant zwei Aktivitäten und beendet die Ausführung, wenn sie auf die Ergebnisse wartet.
Der Laufzeitzustand ist jetzt
Running, und der Verlauf zeichnet diese erste Episode auf: Der Orchestrator hat begonnen, die Ausführung hat begonnen, zwei Aufgaben wurden angesetzt, und der Orchestrator hat die Episode abgeschlossen.Ein Worker führt ein Aktivitätsarbeitselement aus, um eine der
TaskScheduled-Nachrichten zu verarbeiten. Sie ruft die Aktivitätsfunktion mit der Eingabe "2" auf. Wenn die Aktivitätsfunktion abgeschlossen ist, wird eineTaskCompletedNachricht erstellt, die das Ergebnis enthält.
Ein Worker führt einen Orchestrator-Arbeitsvorgang aus, um die
TaskCompletedNachricht zu verarbeiten. Wenn die Orchestrierung noch im Arbeitsspeicher zwischengespeichert ist, kann sie einfach die Ausführung fortsetzen. Andernfalls gibt der Worker zuerst den Verlauf wieder, um den aktuellen Zustand der Orchestrierung wiederherzustellen. Dann setzt sie die Orchestrierung fort und liefert das Ergebnis der Aktivität. Nach dem Empfang dieses Ergebnisses wartet die Orchestrierung weiterhin auf das Ergebnis der anderen Aktivität, sodass die Ausführung erneut beendet wird.
Das Protokoll zeichnet die zweite Episode auf: Die Aufgabe wurde abgeschlossen, und der Orchestrator wurde erneut angehalten.
Ein Worker führt ein Aktivitätsarbeitselement aus, um die verbleibende
TaskScheduled-Nachricht zu verarbeiten. Sie ruft die Aktivitätsfunktion mit der Eingabe "1" auf.
Ein Worker führt ein weiteres Orchestratorarbeitselement aus, um die
TaskCompleted-Nachricht zu verarbeiten. Nach Erhalt dieses zweiten Ergebnisses wird die Orchestrierung abgeschlossen.
Der Laufzeitstatus ist jetzt
Completed, und der Verlauf zeichnet den dritten und letzten Abschnitt auf: die zweite Aufgabe abgeschlossen und die Ausführung beendet.
Hinweis
Der angezeigte Zeitplan ist nicht die einzige mögliche. Wenn beispielsweise die zweite Aktivität früher abgeschlossen ist, können beide TaskCompleted Nachrichten von einer einzelnen Arbeitsaufgabe verarbeitet werden, was zu nur zwei Episoden statt drei führt.
Darstellung im Speicher
Jeder Speicheranbieter verwendet eine andere interne Organisation, um Aufgabenhubs im Speicher darzustellen. Obwohl das Verständnis für diese Organisation nicht erforderlich ist, kann es bei der Problembehandlung oder bei der Erfüllung von Leistungs-, Skalierbarkeits- oder Kostenzielen hilfreich sein.
Dauerhafte Aufgaben-SDKs verwenden den Durable Task Scheduler als Back-End, der den Task Hub-Zustand intern verwaltet.
Anbieter für dauerhafte Aufgabenplanung
Der Durable Task Scheduler ist ein vollständig verwalteter Back-End-Anbieter, der den gesamten Task Hub-Zustand intern speichert. Im Gegensatz zu den Bring-your-own (BYO)-Speicheranbietern müssen Sie keine zugrunde liegende Speicherinfrastruktur einrichten oder verwalten. Jede Scheduler-Ressource (Microsoft.DurableTask/schedulers) verfügt über dedizierte Compute- und Memory-Ressourcen und kann einen oder mehrere Task Hubs (Microsoft.DurableTask/schedulers/taskHubs) enthalten.
Da der permanente Aufgabenplaner den Speicher intern verwaltet, können Sie die zugrunde liegenden Daten nicht direkt prüfen. Verwenden Sie stattdessen das Dashboard "Durable Task Scheduler", um Orchestrierungsinstanzen zu überwachen und abzufragen.
Weitere Informationen zu BYO-Speicheranbieteroptionen und deren Vergleich finden Sie in den Durable Functions-Speicheranbietern.
Azure Speicheranbieter
Der Azure Storage-Anbieter stellt den Aufgabenhub im Speicher mithilfe der folgenden Komponenten dar:
- In zwei Azure Tabellen werden die Instanzzustände gespeichert.
- Eine Azure Warteschlange speichert die Aktivitätsmeldungen.
- Mindestens eine Azure-Warteschlange speichert die Instanznachrichten. Jede dieser sogenannten Steuerungswarteschlangen stellt eine Partition dar, der basierend auf dem Hash der Instanz-ID eine Teilmenge aller Instanznachrichten zugeordnet wird.
- Einige zusätzliche Blob-Container, die für Lease-Blobs oder große Nachrichten verwendet werden.
Beispielsweise enthält ein Aufgabenhub mit dem Namen xyz mit PartitionCount = 4 die folgenden Warteschlangen und Tabellen:
In den folgenden Abschnitten werden diese Komponenten und ihre Rollen ausführlicher beschrieben.
Weitere Informationen dazu, wie Aufgabenhubs vom Azure Storage-Anbieter dargestellt werden, finden Sie in der Dokumentation Azure Storage Provider.
Netherite-Speicheranbieter (Ruhestandspfad)
Netherite partitioniert den gesamten TaskHub-Zustand in eine bestimmte Anzahl von Partitionen. Im Speicher speichern diese Ressourcen die Daten:
- Ein Azure Storage Blobcontainer, der alle Blobs enthält, gruppiert nach Partition.
- Eine Azure Tabelle, die veröffentlichte Metriken zu den Partitionen enthält.
- Ein Azure Event Hubs Namespace zum Übermitteln von Nachrichten zwischen Partitionen.
Beispielsweise wird ein Aufgabenhub mit dem Namen mytaskhub und PartitionCount = 32 im Speicher wie folgt dargestellt:
Hinweis
Der gesamte Aufgabenhubstatus wird innerhalb des x-storage Blobcontainers gespeichert. Die DurableTaskPartitions Tabelle und der Event Hubs-Namespace enthalten redundante Daten: Wenn ihre Inhalte verloren gehen, können sie automatisch wiederhergestellt werden. Daher müssen Sie den Azure Event Hubs Namespace nicht so konfigurieren, dass Nachrichten über die Standardablaufzeit hinaus aufbewahrt werden.
Netherite verwendet einen Ereignis-Sourcing-Mechanismus, der auf einem Protokoll und Prüfpunkten basiert, um den aktuellen Zustand einer Partition darzustellen. Sowohl Block-Blobs als auch Seitenblobs speichern die Daten. Sie können dieses Format nicht direkt aus dem Speicher lesen, daher muss die Funktions-App ausgeführt werden, wenn Sie den Instanzspeicher abfragen.
Weitere Informationen zu Aufgabenhubs für den Netherite-Speicheranbieter finden Sie unter Task Hub-Informationen für den Netherite-Speicheranbieter.
MSSQL-Speicheranbieter
Alle Aufgabenhubdaten werden in einer einzigen relationalen Datenbank mit den folgenden Tabellen gespeichert:
- Die
dt.InstancesUnddt.HistoryTabellen speichern die Instanzzustände. - In der
dt.NewEventsTabelle werden die Instanzmeldungen gespeichert. - In der
dt.NewTasksTabelle werden die Aktivitätsmeldungen gespeichert.
Damit mehrere Aufgabenhubs unabhängig in derselben Datenbank koexistieren können, enthält jede Tabelle eine TaskHub Spalte als Teil des Primärschlüssels. Im Gegensatz zu den anderen beiden Anbietern verfügt der MSSQL-Anbieter nicht über Partitionen.
Weitere Informationen zu Aufgabenhubs für den MSSQL-Speicheranbieter finden Sie unter Task Hub-Informationen für den Microsoft SQL (MSSQL)-Speicheranbieter.