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.
Priorisieren Sie Anforderungen, die an Dienste gesendet werden, damit eine Workload Anforderungen mit hoher Priorität schneller verarbeitet als solche mit niedrigerer Priorität. Dieser Ansatz verwendet Nachrichten, die an eine oder mehrere Warteschlangen gesendet werden, und ist nützlich für Anwendungen, die unterschiedliche Servicelevels oder Vereinbarungen auf Serviceebene (Service Level Agreements, SLAs) für unterschiedliche Anforderungstypen oder Kunden bereitstellen.
Kontext und Problem
Workloads müssen möglicherweise Aufgaben mit unterschiedlicher Priorität und Dringlichkeit verwalten und verarbeiten. Manche Aufgaben müssen sofort bearbeitet werden, bei anderen besteht weniger Eile. Die ausbleibende Bearbeitung von Aufgaben mit hoher Priorität kann die Benutzererfahrung beeinträchtigen und zu SLA-Verletzungen führen.
Um Aufgaben effizient basierend auf ihrer Priorität zu verarbeiten, benötigen Workloads einen Mechanismus, um Aufgaben entsprechend zu verarbeiten und auszuführen. Standardmäßig verarbeiten die meisten Workloads Aufgaben in der Reihenfolge, in der sie eingehen, mithilfe einer First-In-First-Out-Warteschlangenstruktur (First-In, First-Out, FIFO). Dieser Ansatz berücksichtigt keine unterschiedliche Aufgaben wichtigkeit.
Lösung
Prioritätswarteschlangen ermöglichen es Workloads, Aufgaben entsprechend ihrer Priorität zu verarbeiten, anstatt sie streng in der Reihenfolge ihres Eintreffens zu verarbeiten. Die Anwendung oder der Produzent , die eine Anforderung sendet, weist der Nachricht einen Prioritätswert zu, und Verbraucher verarbeiten die Nachrichten nach Priorität. Das Muster "Priority Queue" erfüllt die folgenden Anforderungen:
Behandelt Aufgaben mit unterschiedlicher Dringlichkeit und Wichtigkeit: Sie haben Aufgaben mit unterschiedlicher Dringlichkeit und Wichtigkeit und müssen sicherstellen, dass Sie kritischere Vorgänge vor weniger kritischen Vorgängen verarbeiten.
Unterstützt verschiedene SLAs: Sie bieten verschiedenen Kunden unterschiedliche SLAs an und müssen sicherstellen, dass Kunden mit hoher Priorität eine bessere Leistung und Verfügbarkeit erhalten.
Erfüllt unterschiedliche Workloadverwaltungsanforderungen: Sie verfügen über eine Arbeitsauslastung, die bestimmte Aufgaben sofort adressieren muss, während weniger dringende Aufgaben warten können.
Um das Muster der Prioritätswarteschlange zu implementieren, gibt es zwei Möglichkeiten:
Einzelne Warteschlange: Jeder Nachricht wird ein Prioritätswert zugewiesen, und alle Nachrichten verwenden dieselbe Warteschlange.
Mehrere Warteschlangen: Jeder Nachricht wird ein Prioritätswert zugewiesen, und Meldungen mit unterschiedlicher Priorität verwenden separate Warteschlangen.
Einzelne Warteschlange
Bei einem einzelnen Warteschlangenansatz weist die Anwendung jeder Nachricht eine Priorität zu und sendet alle Nachrichten an eine einzelne Warteschlange. Die Warteschlange ordnet die Nachrichten entsprechend ihrer Priorität an und gewährleistet damit, dass die Consumer zunächst die Nachrichten mit hoher Priorität verarbeiten und anschließend erst die Nachrichten, die eine geringere Priorität haben.
Mehrere Warteschlangen
Mehrere Warteschlangen trennen Nachrichten nach Priorität. Die Anwendung weist jeder Nachricht eine Priorität zu und leitet die Nachricht an die Warteschlange weiter, die ihrer Priorität entspricht, wobei Verbraucher die Nachrichten verarbeiten. Eine Lösung mit mehreren Warteschlangen kann entweder einen einzigen Pool von Verbrauchern oder mehrere Pools von Verbrauchern verwenden.
Ein einziger Consumer-Pool
In einer Einzelpool-Konfiguration nutzen alle Warteschlangen denselben Consumer-Pool. Verbraucher verarbeiten Nachrichten aus der Warteschlange mit der höchsten Priorität zuerst und verarbeiten Nachrichten aus Warteschlangen mit niedrigerer Priorität nur, wenn keine Nachrichten mit hoher Priorität mehr vorhanden sind. Daher verarbeiten einzelne Consumerpools immer Nachrichten mit höherer Priorität vor denen mit niedrigerer Priorität. Diese Einrichtung kann dazu führen, dass Nachrichten mit niedrigerer Priorität ständig verzögert und möglicherweise nie verarbeitet werden.
Verwenden Sie aus folgenden Gründen einen einzelnen Consumerpool:
Einfache Verwaltung. Verwenden Sie einen einzelnen Consumer-Pool, wenn eine einfache Einrichtung und Wartung im Vordergrund stehen. Ein einzelner Pool reduziert die Konfigurations- und Überwachungskomplexität.
Einheitliche Verarbeitungsanforderungen. Verwenden Sie einen einzelnen Consumer-Pool, wenn die eingehenden Aufgaben von ähnlichem Typ sind.
Mehrere Consumer-Pools
In einem Multi-Consumer-Pool verfügt jede Warteschlange über einen dedizierten Consumer-Pool. Warteschlangen mit höherer Priorität verwenden mehr Verbraucher oder höhere Leistungsstufen, um Nachrichten schneller zu verarbeiten als Warteschlangen mit niedrigerer Priorität.
Verwenden Sie aus folgenden Gründen mehrere Consumerpools:
Strenge Leistungsanforderungen. Verwenden Sie mehrere Consumerpools, wenn unterschiedliche Aufgabenprioritäten strenge Leistungsanforderungen aufweisen, die unabhängig voneinander erfüllt werden müssen.
Anforderungen an hohe Zuverlässigkeit. Verwenden Sie mehrere Consumerpools für Anwendungen, wenn Zuverlässigkeit und Fehlerisolation kritisch sind, und Probleme in einer Warteschlange dürfen sich nicht auf andere Warteschlangen auswirken.
Komplexe Anwendungen. Verwenden Sie mehrere Consumerpools für komplexe Anwendungen, bei denen unterschiedliche Verarbeitungsmerkmale und Leistungsgarantien erforderlich sind.
Probleme und Überlegungen
Beachten Sie die folgenden Punkte bei Ihrer Entscheidung, wie dieses Muster implementiert werden soll:
Allgemeine Empfehlungen
Definieren Sie die Prioritäten eindeutig. Legen Sie eindeutige und klare Prioritätsstufen fest, die für Ihre Lösung relevant sind. Sie können z. B. Nachrichten mit hoher Priorität als solche definieren, die innerhalb von 10 Sekunden Eine Verarbeitung erfordern. Identifizieren Sie die Verbraucheranforderungen für die Behandlung von Elementen mit hoher Priorität, und weisen Sie die erforderlichen Ressourcen entsprechend zu.
Richten Sie die Consumer-Pools dynamisch aus. Skalieren Sie die Größe von Consumer-Pools anhand der Länge der Warteschlange, die sie bedienen.
Überwachen Sie den Zustand der Warteschlange. Verfolgen Sie die Warteschlangentiefe, die Verarbeitungslatenz, die Anzahl der Übermittlungen und den Durchsatz, damit Sie Backlogs und Verlangsamungen erkennen können, bevor sie sich auf die Arbeit auswirken.
Verwenden Sie Dead-Letter-Queues. Verschieben Sie nicht verarbeitbare Nachrichten nach einer konfigurierbaren Anzahl von Zustellungsversuchen in eine Warteschleife, sodass eine ungültige Nachricht den Prioritätspfad nicht blockiert.
Weisen Sie den Serviceleveln Prioritäten zu. Führen Sie Prioritätswarteschlangen an, damit Sie geschäftlichen Anforderungen gerecht werden, die eine priorisierte Verfügbarkeit oder Leistung vorgeben. Kunden mit hoher Priorität können z. B. ein höheres Serviceniveau erhalten, sodass sie eine bessere Leistung und Verfügbarkeit erzielen.
Berücksichtigen Sie die Verarbeitung mit niedriger Priorität. Entscheiden Sie, ob alle Elemente mit hoher Priorität vor elementen mit niedrigerer Priorität verarbeitet werden müssen. Wenn möglich, erhöhen Sie die Priorität alter Nachrichten dynamisch, um sicherzustellen, dass Nachrichten mit niedriger Priorität schließlich verarbeitet werden.
Optimieren und Minimieren von Kosten. Stellen Sie sicher, dass kritische Aufgaben sofort von den verfügbaren Verbrauchern verarbeitet werden. Planen Sie Hintergrundaufgaben, die weniger wichtig sind, für Zeiträume mit geringerer Auslastung ein.
Wenn Sie eine einzelne Warteschlange verwenden, optimieren Sie die Kosten, indem Sie die Anzahl der Verbraucher zurückskalieren. Nachrichten mit hoher Priorität werden zuerst verarbeitet, aber möglicherweise langsamer, während Nachrichten mit niedrigerer Priorität möglicherweise längeren Verzögerungen ausgesetzt sind.
Schützen Sie Prozessoren vor Bedarfsspitzen. Wenn die Ankunftsrate des Herstellers die Verarbeitungskapazität der Verbraucher überschreiten kann, kombinieren Sie dieses Muster mit dem Warteschlangenbasierten Lastenausgleichsmuster. Bei diesem Ansatz werden Datenverkehrsbrüche gepuffert und verhindert, dass nachgelagerte Verarbeitungsressourcen überlastet werden.
Empfehlungen für mehrere Warteschlangen
Überwachen Sie die Geschwindigkeit der Verarbeitung. Um sicherzustellen, dass Nachrichten mit den erwarteten Raten verarbeitet werden, überwachen Sie kontinuierlich die Verarbeitungsgeschwindigkeit von Warteschlangen mit hoher und niedriger Priorität.
Implementieren Sie das Unterbrechen und das Aussetzen. Wenn Sie mehrere Warteschlangen mit einem einzelnen Consumerpool verwenden, implementieren Sie einen Algorithmus, der sicherstellt, dass Warteschlangen mit hoher Priorität immer vor Warteschlangen mit niedrigerer Priorität gewartet werden.
Denken Sie an die Kosten der Warteschlange. Achten Sie auf die finanziellen Kosten, die mit der Überprüfung und Verarbeitung von Warteschlangen verbunden sind. Einige Warteschlangendienste berechnen Gebühren für das Senden, Abrufen und Anfragen von Nachrichten. Diese Gebühren können mit der Anzahl der Warteschlangen erhöht werden.
Wann dieses Muster verwenden
Verwenden Sie dieses Muster in folgenden Fällen:
Sie müssen unterschiedliche Latenz- oder Dienstebenenziele für verschiedene Arbeitsklassen erfüllen, z. B. Premium- und Standardkundenanforderungen.
Arbeit fällt schubweise an, und Sie müssen kritische Abläufe schützen, indem Sie Nachrichten mit hoher Priorität zuerst verarbeiten, während Sie Aufgaben mit niedrigerer Priorität zurückstellen.
Dieses Muster ist möglicherweise nicht geeignet, wenn:
Alle Arbeitsaufgaben haben eine ähnliche geschäftliche Bedeutung, und die strenge FIFO-Verarbeitung ist wichtiger als die prioritätsbasierte Planung.
Aufgaben weisen starke Anordnungsabhängigkeiten auf Prioritätsebenen auf, und das Neuanordnen der Arbeit nach Priorität kann zu inkonsistenten Ergebnissen führen oder eine komplexe Koordinationslogik erfordern.
Arbeitslastgestaltung
Bewerten Sie, wie Sie das Prioritätswarteschlangen-Muster im Design einer Workload einsetzen, um die in den Säulen des Azure Well-Architected Framework behandelten Ziele und Prinzipien zu erfüllen. Die folgende Tabelle enthält Anleitungen dazu, wie dieses Muster die Ziele jeder Säule unterstützt.
| Säule | So unterstützt dieses Muster die Säulenziele |
|---|---|
| Zuverlässigkeitsdesignentscheidungen tragen dazu bei, dass Ihre Workload ausfallsicher wird und dass sie nach einem Ausfall wieder in einen voll funktionsfähigen Zustand zurückkehrt. | Durch die Trennung von Aufgaben auf der Grundlage der geschäftlichen Priorität können Sie Ihre Bemühungen um die Zuverlässigkeit auf die wichtigsten Aufgaben konzentrieren. - RE:02 Kritische Abläufe |
| Performance Efficiency hilft Ihrem Workload durch Optimierungen bei Skalierung, Daten und Code, die Anforderungen effizient zu erfüllen . | Die Trennung von Aufgaben nach geschäftlicher Priorität ermöglicht es Ihnen, die Leistungsbemühungen auf die zeitkritischsten Aufgaben zu konzentrieren. - PE:09 Kritische Flüsse |
Wenn dieses Muster Kompromisse innerhalb einer Säule einführt, sollten Sie sie gegen die Ziele der anderen Säulen berücksichtigen.
Beispiel
Das Musterbeispiel "Priority Queue" in GitHub veranschaulicht eine Implementierung des Musters "Prioritätswarteschlange", das Azure Service Bus Themen und Abonnements verwendet. Im Beispiel wird ein sicheres Speicherkonto, eine Application Insights-Ressource für die Überwachung und ein Service Bus Namespace bereitgestellt, um die Kommunikation zwischen absender- und Consumerfunktionen zu ermöglichen.
Die Bereitstellung umfasst drei Funktions-Apps: einen Sender und zwei Empfänger. Die Consumer-Apps verwenden unterschiedliche maximale Instanzenanzahl, um die Nachrichtenpriorisierung zu simulieren. Die funcPriorityQueueConsumerHigh Funktion kann auf 200 Instanzen skaliert werden, während die funcPriorityQueueConsumerLow Funktion auf 40 Instanzen beschränkt ist. Alle Funktions-Apps verwenden den Flex-Verbrauchsplan und sind mit Application Insights für Diagnose und Überwachung verbunden.
Rollenzuweisungen gewähren sicheren Zugriff auf Service Bus und Speicher mithilfe von verwalteten Identitäten. Alle Funktions-Apps verwenden dasselbe Speicherkonto und die Application Insights-Ressource. Diese Konfiguration bündelt Beobachtbarkeit und Protokollierung zentral.
Das folgende Diagramm zeigt die Architektur der Prioritätswarteschlange:
Im obigen Diagramm ist Folgendes zu sehen:
Antrag (Produzent). Die
PriorityQueueSenderAnwendung erstellt Nachrichten, weist jeder Nachricht eine benutzerdefinierte Anwendungseigenschaft zuPriorityund legt denPriorityWert aufHighoderLow.Nachrichtenbroker und Thema. Der Service Bus-Message Broker sendet Nachrichten an ein einziges Service Bus-Topic mit dem Namen
messages. Service Bus verwendet SQL-Filter, um jede Nachricht basierend auf ihremPriorityWert an das Abonnement mit hoher Priorität oder niedriger Priorität weiterzuleiten.Mehrere Verbraucherpools. Die
PriorityQueueConsumerHigh- undPriorityQueueConsumerLow-Consumerpools reagieren unter Verwendung von Azure Functions Service Bus-Triggern auf Nachrichten aus den Abonnements mit hoher oder niedriger Priorität.
| Rolle im Beispiel | Azure-Dienst im Beispiel | Name im Beispiel |
|---|---|---|
| Anwendung (Produzent) | Azure Functions App | PriorityQueueSender |
| Nachrichtenbroker | Azure-Servicebus | <Ihr Service Bus-Namespace> |
| Nachrichtenthema | Azure Service Bus-Thema | messages |
| Nachrichtenabonnements | Azure Service Bus-Abonnements | highPrioritylowPriority |
| Verbraucher | Azure Functions App |
PriorityQueueConsumerHigh PriorityQueueConsumerLow |
Nächste Schritte
- Service Bus Warteschlangen, Themen und Abonnements: Überprüfen Sie die Service Bus Entitäten und die Unterschiede zwischen Warteschlangen und Themen.
- Doppelte Erkennung: Erfahren Sie, wie Service Bus doppelte Nachrichten ablehnen können, wenn ein Absender nach einer unsicheren Übermittlung erneut wiederholt.
- Dead-Letter-Warteschlangen: Erfahren Sie, wie Service Bus Nachrichten, die nicht verarbeitet werden können, zur Untersuchung oder Neuverarbeitung in eine Dead-Letter-Warteschlange verschiebt.
- Was ist Azure Queue Storage?: Überprüfen Sie die Kernkonzepte von Azure Queue Storage, um sie mit Service Bus Warteschlangen zu vergleichen.
Verwandte Ressourcen
Die folgenden Muster sind möglicherweise hilfreich, wenn Sie dieses Muster implementieren:
Muster zur lastbasierten Nivellierung mit Warteschlangen: Verwenden Sie eine Warteschlange als Puffer zwischen der Entgegennahme von Anforderungen und deren Verarbeitung. Verwenden Sie es mit dem Priority-Queue-Muster, wenn Sie sowohl Schutz vor Lastspitzen als auch differenzierte Verarbeitung benötigen.
Muster der konkurrierenden Consumer: Implementieren Sie mehrere Consumer, die dieselbe Warteschlange abhören und Aufgaben parallel verarbeiten, um den Durchsatz zu erhöhen. Nur ein Verbraucher verarbeitet jeweils eine Nachricht.
Drosselungsmuster: Implementieren Sie die Drosselung mithilfe von Warteschlangen zum Steuern der Anforderungsrate. Verwenden Sie Prioritätsnachrichten, um Anforderungen von kritischen Anwendungen oder hochwertigen Kunden über weniger wichtige zu priorisieren.