2016-07-21 22 views
2

Kann mir jemand den Vorteil oder Nachteil der Verwendung von SNS -> Lambda vs. SNS -> SQS -> Lambda erklären.AWS Pub/Sub Nachrichten Muster

Ich bin auf der Suche nach einer Architektur für Pub/Sub-Service-Messaging, aber eine Warteschlange vor jedem Lambda scheint übermäßig.

Antwort

4

Es sei denn, etwas hat sich verändert, die Frage, ob es sinnvoller ist, SNS → Lambda oder SNS → SQS → Lambda, ist mit einem erheblichen Fehler auf einer Prämisse zu implementieren basiert.

Wie in Supported Event Sources in der Lambda-Dokumentation angegeben, Lambda Ereignisse können von S3, DynamoDB, Kinesis, SNS, SES, Cognito, Cloudformation, Cloudwatch & Events (einschließlich Geplante Ereignisse), AWS Config, Amazon Echo bezogen werden, und API-Gateway.

Und natürlich können Sie sie direkt aufrufen.

SQS ist jedoch keine unterstützte Lambda-Ereignisquelle.

+0

Sie sind richtig und ich entschuldige mich für Miss Aussage über direkte Trigger, Lambda im Falle der Warteschlange würde Abfrage mit einem Zeitplan Lambda erfordern. Aber ich denke, ich suche, wie erhalten Sie mindestens einmal Lieferung mit SNS zu Lambda – tafaju

+1

@ tafaju SNS wird immer eine abonnierte Lambda-Funktion aufrufen. Wenn Ihre Lambda-Funktion nicht erfolgreich abgeschlossen wird, wird sie bis zu zweimal wiederholt. Aber deine Lambda-Funktion wird immer mindestens einmal aufgerufen. Mit SNS zu Lambda ist der Nachteil, dass es kein Konzept für eine Warteschlange für nicht zustellbare Nachrichten gibt. Wenn Ihre Lambda-Funktion dreimal für dieselbe SNS-Nachricht abläuft, haben Sie diese Daten einfach auf den Boden fallen lassen. Keine Möglichkeit, sich zu erholen. – idbehold

+0

@idbehold ist richtig. Eine Umgehungslösung zur Vermeidung von Datenverlusten, wenn Three-Sikes-Fehler die Verarbeitung der Ereignisse verhindern, besteht darin, dass ein SNS-Thema sowohl an Lambda als auch an SQS weitergeleitet wird und die Nachrichten normalerweise einfach ablaufen und automatisch aus der SQS-Warteschlange gelöscht werden, sofern keine Lambda-Fehler vorliegen protokolliert. In diesem Fall könnte ein Bereinigungsprozess die eingereihten Nachrichten überprüfen. Ich habe ein S3> SNS> Lambda-Setup, das dies tut. Die Lambda-Funktion gibt manchmal Fehler aus, wenn S3 während einer großen Anzahl von Überschreibungen vorhandener Objekte eine der "möglicherweise konsistenten" Stimmungen ist. Dies ist also mein Fallback-Plan. –

2

Amazon SQS ist ein Nachrichtenwarteschlangendienst, der von verteilten Anwendungen zum Austausch von Nachrichten über ein Abrufmodell verwendet wird und zum Entkoppeln von Sende- und Empfangskomponenten verwendet werden kann, ohne dass jede Komponente gleichzeitig verfügbar sein muss. Durch die gemeinsame Verwendung von Amazon SNS und Amazon SQS können Nachrichten an Anwendungen gesendet werden, die eine sofortige Benachrichtigung über ein Ereignis erfordern, und auch in einer Amazon SQS-Warteschlange für andere Anwendungen, die zu einem späteren Zeitpunkt verarbeitet werden.

Bis Sie keine sendenden und empfangenden Komponenten entkoppeln wollen und nur Ihren Anwendungsfall in der Frage erreichen wollen, funktioniert es in beiden Fällen SNS-Lambda und SNS-SQS-Lambda.

+0

Ich stimme zu, beide sind erreichbar, nur auf der Suche nach bestimmten Vor-und Nachteile im Zusammenhang mit dem Aufbau einer zuverlässigen Nachrichtenplattform. Das einzige Problem, das ich sehen kann, ist die Zuverlässigkeit, die im Zusammenhang mit SNS -> Lambda fehlen würde, da SQS zuverlässige Verarbeitungs- und Wiederholungsversuche bieten würde. – tafaju

+0

Und Haltbarkeit auch, wie es wird sicherstellen, dass jede Nachricht an Lambda atleast einmal – error2007s

+0

Sie mit SQS in der Mischung richtig sagen geliefert wird? – tafaju