2017-04-11 5 views
4

Was ist die bessere Option, um Aufgaben zwischen Microservices zu koordinieren?AWS SNS vs. AWS Step Funktionen

Wenn ich beispielsweise einen Microservice habe, der Kundeninformationen verarbeitet und andere Microservices benachrichtigen muss, ist es besser, einen Workflow (AWS-Schritte) zwischen Microservices zu erstellen oder einen SNS zu verwenden?

Ich denke, AWS Steps wird meine Lambda-Funktionen und SNS nicht koppeln.

Antwort

4

AWS Schrittfunktionen ist eine Schrittmaschine, die AWS Lambda-Funktionen ausführt. Wenn Ihre Aufgabe "Tun Sie dies, dann diese" Aktivitäten, dann könnte Schrittfunktionen eine gute Option sein. Es enthält eine Logik zur Bestimmung des nächsten Schritts und behandelt automatisch Wiederholungsversuche. Es ist die moderne Version von Amazon Simple Workflow (SWF).

Amazon Simple Notification Service (SNS) kann auch Lambda-Funktionen auslösen, aber weder die Logik noch die Wiederholungen. Es eignet sich besonders gut für entkoppelte Dienste, insbesondere für Fan-outs, bei denen mehrere Teilnehmer die gleiche Nachricht von einem Thema erhalten - zum Beispiel zum Auslösen mehrerer Lambda-Funktionen oder zum Senden mehrerer Benachrichtigungen. Es ist im Grunde ein öffentlicher Dienst, von dem Lambda einer der Abonnententypen ist.

Die Auswahl hängt von Ihrem speziellen Anwendungsfall ab. Wenn Sie die Funktionen für die Verwendung von Schrittfunktionen nicht neu gestalten möchten, senden Sie Benachrichtigungen über SNS. Wenn Sie manchmal Benachrichtigungen (z. B. E-Mails) senden, anstatt nur Lambda-Funktionen auszulösen, verwenden Sie SNS.

Momentan ist Schrittfunktionen nicht in jeder Region verfügbar, während SNS überall vorhanden ist, was auch Ihre Wahl beeinflussen kann.

4

Es hängt davon ab, welche Art von Koordination Sie wollen. Synchron oder asynchron.

Wenn es synchron ist und wenn Sie wirklich etwas Koordination zwischen ihnen wollen, dann Amazon Simple Notification Service (SNS) würde nicht helfen, und AWS Schritt Funktionen wäre der Weg zu gehen.

Aber wenn die Anforderung asynchron ist und Sie nur die Microservices benachrichtigen/aufrufen möchten, dann wäre SNS besser geeignet.

Wie ich aus Ihrer Frage lesen kann "müssen andere Microservices benachrichtigen" Ich nehme an, es ist nur über sie zu informieren (im Gegensatz zu ihnen zu koordinieren) und jeder würde wissen, was weiter zu tun, ohne auf andere Microservices. Und wenn das stimmt, passt SNS gut.