post-image

Messaging: Eigenschaften von Amazon SQS und Amazon SNS


Dieser Beitrag zeigt die grundlegenden Eigenschaften und Einsatzszenarien für Amazon Simple Queue Service (Amazon SQS) und Amazon Simple Notification Service (Amazon SNS) auf, um schnell und einfach in der Cloud mit einer Messaging-Lösung zu starten. Die Verwaltung der zugehörigen Dienste mit dem Amazon Web Service Command Line Interface (AWS CLI) und ein Beispiel zur Verwendung der Dienste mit Java werden in separaten Beiträgen vorgestellt.

Anwendungsszenarien

Zur Kommunikation in verteileten Systemen wie Microservices, Ereignigesteuerten Architekturen (Event-driven architecture) und Service-orientierten Architekturen (SOA) werden Nachrichtendienste zur losen Kopplung von einzelnen Diensten und Prozessen benötigt. Dies erlaubt zum einen die unabhängige Skalierung von Diensten und auch die Zuverlässigkeit der Kommunikationskanäle zu erhöhen. Hierfür werden sog. Message Broker eingesetzt. Die Zuverlässigkeit und Skalierbarkeit wird dann durch die Fähigkeiten des Message Brokers bestimmt. Ein Message Broker erfordert daher die entsprechende Infrastruktur und den zugehörigen Administrationsaufwand, um diese Eigenschaften sicherzustellen. Von der Zuverlässigkeit und Skalierbarkeit des Message Brokers hängt die auch die der Kommunikationskanäle ab. Daher ist es wichtig den Message Broker mit erforderlicher Infrastruktur und Administration zu versorgen. Durch Anbieter von Öffentlichen Clouds (public cloud provider), gibt es die Möglichkeit entsprechende Dienste, komplett verwaltet mit einem nutzungsabhängigen Preis “von der Stange” zu beziehen.

Point-to-Point

Bei der Point-to-Point Kommunikation werden Nachrichten über einen Nachrichtenkanal von einem Dienst (Sender) an einen anderen Dienst (Empfänger) gesendet und zugestellt.

Point-to-point messaging

Hierbei ist es auch möglich das auf der Empfänger-Seite mehrere Empfänger Nachrichten aus demselben Nachrichtenkanal empfangen. Hierbei stellt der Nachrichtenkanal dann sicher, dass nur ein Empfänger die Nachricht erhält.

Hier finden Sie einen Beitrag mit der Beschreibung zur Einrichtung von Point-to-Point Kommunikation per AWS CLI.

Publish/Subscribe

Beim Publish/Subscribe ist das Ziel eine Nachricht des Senders an mehrere (oder evtl. keinen) Empfänger zuzustellen. D.h. eine Nachricht wird potentiell von mehreren Prozessen/Diensten parallel bearbeitet.

Publish/Subscribe messaging

Hier finden Sie einen Beitrag mit der Beschreibung zur Einrichtung von Publish/Subscribe per AWS CLI.

Möglichkeit zur Umsetzung dieser Szenarien mit AWS

Amazon Web Services (AWS) bietet zu einen mit Amazon MQ für Apache ActiveMQ einen verwalteten Dienst an, um den Umzug bestehender Applikationen auf eine Cloud-Infrastruktur zu erleichtern. Darüber hinaus werden Amazon Simple Queue Service (Amazon SQS) und Amazon Simple Notification Service (Amazon SNS) angeboten, um für neue Anwendungen einen schnellen Start in der Cloud zu ermöglichen.

Amazon SQS

Amazon SQS wird bereits seit 2004 von Amazon im Rahmen von Amazon Web Services (AWS) bereit gestellt. Der Dienst wird mit einem kostenlosen Kontigent von 1 Mio. Anfragen pro Monat zur Verfügung gestellt. Darüber hinaus werden Gebühren erhoben. Es können zusätzliche Kosten durch die Verwendung mit anderen AWS-Diensten oder die Datenübertragung ins Internet entstehen. Details können mit dem Preiskalkulator von Amazon ermittelt werden.

Amazon SQS bietet zwei Arten von Warteschlangen (Queues): Standard-Queues und FIFO-Queues. Nachrichten müssen aus diesen Warteschlangen abgeholt werden (pull). Veröffentlichen von Nachrichten ist als Einzelnachricht oder im Stapel (batch) möglich.

Standard-Queues

Diese Art von Queues bietet:

  • Mindestens einmalige Zustellung der Nachricht (at-least-once)
  • Keine Einhaltung der Nachrichtenreihenfolge
  • Senden von Nachrichten mit individueller Verzögerung
  • Nachrichten werden für eine konfigurierte Zeitspanne in der Queue persistiert (retention period, maximal 14 Tage)

FIFO-Queues

Diese Art von Queues bietet:

  • Erhaltung der Nachrichtenreihenfolge (FIFO)
  • Garantierte einmalige Zustellung der Nachricht (exactly-once)
  • Senden von Nachrichten mit einer Warteschlangen-abhängigen Verzögerung
  • Nachrichten werden für eine konfigurierte Zeitspanne in der Queue persistiert (retention period, maximal 14 Tage)

Verarbeitung von Nachrichten

Wird eine Nachricht vom Sender erfolgreich an SQS übergeben, so muss der Empfänger die Nachricht nach der Entnahme aus der Queue löschen, um die Verarbeitung zu bestätigen. Ein Empfänger kann bis zu 10 Nachrichten aus einer Queue entnehmen. Wird eine Nachricht nicht gelöscht, so wird sie immer wieder zur Verarbeitung herangezogen.

Um zu vermeiden, dass Nachrichten, die nicht durch den Empfänger verarbeitet werden können, die Verarbeitung weiterer Nachrichten verhindern, ist es möglich die Nachrichten durch SQS in eine Queue für nicht-verarbeitbare Nachrichten verschieben zu lassen (Dead Lettering). Die Dead-Letter-Queue einer FIFO-Queue muss ebenfalls eine FIFO-Queue sein.

Nachrichten, die bereits durch einen Prozess aus der Queue entnommen wurden, können nicht parallel von anderen Prozessen entommen werden, da sie für einen vom Empfänger angegebenen Zeitraum für andere Empfänger nicht sichtbar sind. Bei einer erfolgreichen Verarbeitung der Nachricht muss der Empfänger sicherstellen, dass die Nachricht for Ablauf der Zeit aus der Queue gelöscht wird, um eine doppelte Verarbeitung zu verhindern.

Eigenschaften von Nachrichten

Eine Nachricht besteht aus einer Nutzlast (message body) und zusätzlichen Metadaten (message attributes). Attribute sind Schlüssel-Wert-Paare, bei denen der Wert vom Typ String, Number oder Binary sein kann.

Die Größe von Nachrichten wird als Eigenschaft der Queue festgelegt und kann zwischen 1 bis 256 KB liegen. Für größere Nachrichten ist es möglich die Nutzlast als eine Referenz auf Amazon S3 zu verwenden.

Es können bis zu 10 Metadaten (message attributes) angehängt werden.

Amazon SNS

Amazon SNS wird seit 2010 von Amazon im Rahmen von Amazon Web Services (AWS) angeboten. Der Dienst wird mit einem kostenlosen Kontigent von 1 Mio. Anfragen pro Monat zur Verfügung gestellt. Darüber hinaus werden Gebühren erhoben. Es können zusätzliche Kosten durch die Verwendung mit anderen AWS-Diensten oder die Datenübertragung ins Internet entstehen. Details können mit dem Preiskalkulator von Amazon ermittelt werden.

Amazon SNS bietet die Möglichkeit Nachrichten über sog. Themen (Topics) zu veröffentlichen. Die für ein Thema bereit gestellten Nachrichten, werden dann an alle registrierten Empfänger zugestellt. Die Zustellung erfolgt durch Amazon SNS an einen vom Empfänger bereit gestellten Endpunkt (push). Hierzu können unterschiedliche Protokolle verwendet werden (HTTP(S), Email, SMS, etc.), für diesen Beitrag ist aber die Zustellung an Amazon SNS Queues relevant.

Amazon SNS garantiert eine zuverlässige Zustellung der Nachrichten an die jeweiligen Endpunkte, sobald die Nachricht erfolgreich an das Topic zugestellt wurde und vorausgesetzt, die Endpunkte sind verfügbar. Die Nachrichten werden an verfügbare Endpunkte mindestens einmal zugestellt (at-least-once). Dabei wird die Reihenfolge der Nachrichten nicht eingehalten.

Ist der Endpunkt zum Empfang einer Nachricht nicht verfügbar, wird nach einer vierphasigen Wiederholungsrichtlinie (delivery policy) die Nachricht von Amazon SNS verworfen oder sofern konfiguriert in eine Queue für unzustellbare Nachrichten übermittelt (Dead-Letter Queue). Die 4 Phasen der erneuten Zustellung unterscheiden sich durch die jeweils geltende Verzögerung bis zum erneuten Zustellversuch.

Für die Zustellung an eine Amazon SQS Queue sehen die 4 Phasen wie folgt aus:

  1. 3 Zustellversuche ohne Verzögerung
  2. 2 Zustellversuche mit 1 Sek. Verzögerung
  3. 10 Zustellversuche mit exponentieller Verzögerung (1 - 20 Sek.)
  4. 100.000 Zustellversuche mit 20 Sek. Verzögerung

Dies ergibt 100.015 Versuche über einen Zeitraum von 23 Tagen.

Empfänger von Nachrichten können Filter verwenden, um Nachrichten anhand bestimmter Kriterien zu empfangen.

Eigenschaften von Nachrichten

Amazon SNS Nachrichten können bis zu 256KB groß sein und mit Attributen versehen werden. Attribute sind Schlüssel-Wert-Paare, bei denen der Wert vom Typ String, Number oder Binary sein kann.

Mögliche Endpunkte für Amazon SNS Themen (Topics)

Amazon SNS kann Nachrichten an unterschiedliche Endpunkte über verschiedene Protokolle zustellen:

  • Email
  • SMS
  • HTTPS
  • Amazon SQS
  • AWS Event Fork Pipelines
  • AWS Lambda Functions

Nächste Schritte

In weiteren bald erscheinenden Beiträgen zeigen wir, wie die AWS-Dienste SQS und SNS eingerichtet und mit Hilfe von Java genutzt werden können.

  1. Einrichtung von Point-to-Point Messaging mit Amazon SQS
  2. Einrichtung Publish/Subscribe mit AWS SQS und AWS SNS
  3. Amazon SQS und Amazon SNS mit Java nutzen

Hinweis

Amazon Web Services, das “Powered by AWS” Logo, Amazon SQS, Amazon SNS, AWS Lambda, AWS Event Fork Pipelines, Amazon MQ sind Marken der Amazon.com, Inc. oder Ihrer verbundenen Unternehmen in den USA und/oder anderen Ländern.

Zurück