Auswählen einer nachrichtenbasierten Zustellung mit Warteschlangen

Abgeschlossen

Angenommen, Sie planen die Architektur für Ihre Anwendung zur gemeinsamen Nutzung von Musik. Dabei möchten Sie sicherstellen, dass Musikdateien zuverlässig in die Web-API der mobilen App hochgeladen werden. Anschließend möchten Sie die Details zu neuen Titeln direkt an die App übermitteln, sobald ein Künstler seiner Sammlung neue Musik hinzufügt. In diesem Szenario eignet sich ein nachrichtenbasiertes System besonders gut. Azure bietet dafür zwei Lösungen:

  • Azure Queue Storage
  • Azure Service Bus

Was ist Azure Queue Storage?

Bei Queue Storage handelt es sich um einen Dienst, der Azure Storage verwendet, um eine große Menge von Nachrichten zu speichern, auf die von überall auf der Welt über eine einfache REST-basierte Schnittstelle zugegriffen werden kann. Warteschlangen können Millionen von Nachrichten enthalten. Die Anzahl an gespeicherten Nachrichten wird nur durch das jeweilige zugewiesene Speicherkonto begrenzt.

Was sind Azure Service Bus-Warteschlangen?

Service Bus ist ein Brokersystem für Nachrichten, das auf Unternehmensanwendungen ausgerichtet ist. Diese Apps verwenden häufig mehrere Kommunikationsprotokolle, verfügen über verschiedene Datenverträge, weisen höhere Sicherheitsanforderungen auf und können sowohl lokale Dienste als auch Clouddienste umfassen. Service Bus unterstützt dedizierte Infrastrukturen für Nachrichten, die genau für solche Szenarios konzipiert sind.

Beide Dienste basieren auf der Idee einer Warteschlange, die so lange mehrere gesendete Nachrichten enthält, bis der Empfänger bereit ist, diese zu empfangen.

Was sind Azure Service Bus-Themen?

Azure Service Bus-Themen ähneln Warteschlangen, aber Sie können mehrere Abonnenten haben. Wenn eine Nachricht an ein Thema anstatt an eine Warteschlange gesendet wird, können mehrere Komponenten ausgelöst werden, um ihre Arbeit zu erledigen. Stellen Sie sich beispielsweise vor, dass jemand sich einen Song in einem Musikportal anhört. Die mobile App kann eine Nachricht an das Thema senden, das „angehört“ wurde. Dieses Thema wird über ein Abonnement für „UpdateUserListenHistory“ und ein anderes Abonnement für „UpdateArtistsFanList“ verfügen. Jede dieser Funktionen wird von einer anderen Komponente behandelt, die eine eigene Kopie der Nachricht empfängt.

Themen verwenden intern Warteschlangen. Wenn Sie eine Nachricht für ein Thema veröffentlichen, wird sie kopiert und in der Warteschlange für jedes Abonnement abgelegt. Die Warteschlange bedeutet, dass die Nachrichtenkopie verfügbar bleibt, um von jedem Abonnementbranch verarbeitet zu werden, auch wenn die Komponente, die dieses Abonnement verarbeitet, zu beschäftigt ist, um mit dem Nachrichteneingang Schritt zu halten.

Vorteile von Warteschlangen

Warteschlangeninfrastrukturen können viele erweiterte Funktionen unterstützen, wodurch sie in vielerlei Hinsicht nützlich sind:

Höhere Zuverlässigkeit

Warteschlangen werden von verteilten Anwendungen als temporärer Speicherort für Nachrichten verwendet, deren Zustellung an eine Zielkomponente noch aussteht. Die Quellkomponente kann eine Nachricht zu der Warteschlange hinzufügen, und die Zielkomponenten können die Nachrichten nacheinander aus der Warteschlange abrufen, um sie zu verarbeiten. Warteschlangen erhöhen die Zuverlässigkeit des Nachrichtenaustauschs, da in Zeiten hoher Nachfrage Nachrichten warten können, bis eine Zielkomponente zu ihrer Verarbeitung bereit ist.

Übermittlungsgarantien für Nachrichten

Warteschlangensysteme garantieren in der Regel die Zustellung jeder Nachricht in der Warteschlange an eine Zielkomponente. Allerdings können dabei unterschiedliche Ansätze verfolgt werden:

  • At-Least-Once-Übermittlung: Bei diesem Ansatz wird jede Nachricht an mindestens eine der Komponenten übermittelt, die Nachrichten aus der Warteschlange abrufen. Unter Umständen ist es jedoch möglich, dass dieselbe Nachricht mehrfach zugestellt wird. Wenn beispielsweise zwei Instanzen einer Webanwendung Nachrichten aus einer Warteschlange abrufen, geht jede Nachricht in der Regel nur an eine dieser Instanzen. Wenn eine Instanz jedoch viel Zeit zum Verarbeiten der Nachrichten benötigt und ein Timeout abläuft, wird die Nachricht ggf. an die andere Instanz gesendet. Behalten Sie diese Möglichkeit im Hinterkopf, wenn Sie Ihren Web-App-Code entwickeln.

  • At-Most-Once-Übermittlung: Bei diesem Ansatz wird nicht garantiert, dass jede Nachricht übermittelt wird. Es besteht daher die geringe Wahrscheinlichkeit, dass eine Nachricht nicht ankommt. Allerdings kann es anders als bei der „At-Least-Once-Übermittlung“ nicht vorkommen, dass Nachrichten mehrmals zugestellt werden. Dies wird mitunter auch als automatische Duplikaterkennung bezeichnet.

  • First-In-First-Out (FIFO): In den meisten Messagingsystemen verlassen Nachrichten die Warteschlange in der Reihenfolge, in der sie hinzugefügt wurden. Allerdings sollten Sie überprüfen, ob diese Zustellung garantiert wird. Wenn Ihre verteilte Anwendung verlangt, dass Nachrichten genau in der richtigen Reihenfolge verarbeitet werden, müssen Sie ein Warteschlangensystem mit FIFO-Garantie verwenden.

Transaktionsunterstützung

Einige eng verwandte Nachrichtengruppen können Probleme verursachen, wenn bei der Übermittlung einer Nachricht in der Gruppe ein Fehler auftritt.

Nehmen Sie als Beispiel eine E-Commerce-Anwendung. Bei Auswahl der Schaltfläche Kaufen werden möglicherweise mehrere Nachrichten generiert und an verschiedene Ziele zur Verarbeitung gesendet:

  • Eine Nachricht mit den Details zur Bestellung wird an das Versandzentrum gesendet.
  • Ein Nachricht mit den Informationen zu Gesamtsumme und Zahlungsweise wird an einen Dienst zur Verarbeitung von Kreditkarteninformationen gesendet.
  • Eine Nachricht mit den Rechnungsinformationen wird an eine Datenbank gesendet, damit eine Rechnung für den Kunden generiert werden kann.

In diesem Fall soll sichergestellt werden, dass entweder alle Nachrichten oder keine verarbeitet werden. Wir wären nicht sonderlich lange im Geschäft, wenn die Nachricht zu den Kreditkarteninformationen nicht übermittelt wird und alle Bestellungen zwar versandt, aber nicht bezahlt werden. Solche Probleme können Sie vermeiden, indem Sie die beiden Nachrichten in einer Transaktion zusammenfassen. Nachrichtentransaktionen sind genauso wie bei Datenbanken immer als eine einzige Einheit erfolgreich oder nicht erfolgreich. Wenn die Übermittlung der Kreditkartendaten fehlschlägt, gilt dasselbe für die Nachricht mit den Details zur Bestellung.

Welcher Dienst eignet sich für mich?

Nachdem Sie verstanden haben, dass die Kommunikationsstrategie für diese Architektur eine Nachricht sein sollte, müssen Sie auswählen, ob Sie Azure Storage-Warteschlangen oder Azure Service Bus verwenden. Sie können beide Technologien zum Speichern und Übermitteln von Nachrichten zwischen Ihren Komponenten verwenden. Beide weisen geringfügig unterschiedliche Funktionsmerkmale auf. Das heißt, Sie können sich für einen Dienst entscheiden oder beide verwenden. Welche Dienste Sie auswählen, hängt von dem zu lösenden Problem ab.

Verwenden Sie Service Bus-Warteschlangen, wenn Folgendes zutrifft:

  • Sie benötigen eine Garantie für die At-Most-Once-Übermittlung.
  • Sie benötigen eine FIFO-Garantie.
  • Sie müssen Nachrichten in Transaktionen gruppieren.
  • Sie möchten Nachrichten empfangen, ohne die Warteschlange abzufragen.
  • Sie müssen ein rollenbasiertes Zugriffsmodell für die Warteschlange bereitstellen.
  • Sie müssen Nachrichten mit einer Größe von 64 KB bis 100 MB verarbeiten. Die unterstützte maximale Nachrichtengröße beträgt beim Standard-Tarif 256 KB und beim Premium-Tarif 100 MB.
  • Die Größe der Warteschlange übersteigt 1 TB nicht. Die maximale Warteschlangengröße beträgt beim Standard-Tarif 80 GB und beim Premium-Tarif 1 TB.
  • Sie möchten Nachrichtenbatches veröffentlichen und nutzen.

Verwenden Sie Service Bus-Themen, wenn Folgendes zutrifft:

  • Alle Features, die von Service Bus-Warteschlangen bereitgestellt werden, sind erforderlich. Implementieren Sie darüber hinaus ein Veröffentlichung/Abonnement-Muster, in dem Nachrichten an eines von mehreren Abonnements weitergeleitet werden können, jeweils mit eigenen unabhängigen Empfängern

Queue Storage ist nicht ganz so reich an Features, aber wenn Sie keine dieser Features benötigen, kann diese Lösung die einfachere Wahl sein. Er stellt außerdem die bessere Lösung dar, wenn Ihre App eine der folgenden Anforderungen hat.

Verwenden Sie Queue Storage, wenn Folgendes zutrifft:

  • Sie benötigen ein Überwachungsprotokoll aller Nachrichten, die die Warteschlange durchlaufen.
  • Sie gehen davon aus, dass die Größe der Warteschlange 1 TB überschreitet.
  • Sie möchten den Verarbeitungsfortschritt einer Nachricht innerhalb der Warteschlange nachverfolgen.

Eine Warteschlange ist ein einfacher temporärer Speicherort für Nachrichten, die zwischen Komponenten einer verteilten Anwendung gesendet werden. Mit Warteschlangen können Sie Nachrichten organisieren und unvorhersehbare Nachfragespitzen bewältigen.

Verwenden Sie Storage-Warteschlangen, wenn Sie ein einfaches und leicht zu programmierendes Warteschlangensystem wünschen. Nutzen Sie für anspruchsvollere Anforderungen Service Bus-Warteschlangen. Wenn Sie mehrere Ziele für eine einzelne Nachricht haben, aber ein einer Warteschlange ähnliches Verhalten benötigen, verwenden Sie Service Bus-Themen.