Microservices REST oder AMQP, in welchem ​​Fall

15

Ich habe viele Artikel über Microservices-Architektur gelesen und mich gefragt, wann ich AMQP oder REST verwenden soll.

Ich habe gelesen, dass eine lose Kopplung zwischen Diensten eine gute Sache ist und AMQP in diesem Fall eine gute Wahl zu sein scheint. Wenn wir jedoch AMQP verwenden, brauchen wir keine REST-Endpunkte mehr (aber wir verlieren das HATEOAS-Konzept).

Aber ist REST wirklich eine gute Möglichkeit, meine Services aufzubauen? Weil ich keine Endpunkte verwende ... In welchem ​​Fall ist einer besser als der andere?

Wann sollte ich das eine oder andere verwenden?

Thomas Thomas
quelle

Antworten:

9

Durch das Verwerfen von REST verlieren Sie viel mehr als nur HATEOAS. Wenn Ihre Microservices öffentlich sind (und es eine gute Idee ist, dass sie öffentlich sind oder zumindest dazu tendieren, eines Tages öffentlich zu sein¹), ist die Verwendung von etwas anderem als REST und SOAP problematisch:

  • Einige Entwickler haben noch nie AMQP verwendet.

  • Einige haben AMQP verwendet, sind aber häufig mit REST und SOAP besser vertraut.

  • AMQP-Bibliotheken für einige Sprachen sind nicht besonders einfach.

  • Das manuelle Experimentieren mit dem Dienst ist sehr begrenzt: Ich kann CURL verwenden, um alle Anforderungen an Amazon S3 zu richten. Was muss ich auf meinem Computer installieren , wenn ich mit einer AMQP-Variante von S3 spielen möchte?

  • Das Debuggen von REST und SOAP ist einfach. Ich verfolge nur den HTTP-Austausch und analysiere ihn. Ich bin nicht sicher, mit welchen Tools ich AMQP-Austausche debuggen soll.

AMQP ist großartig, wird jedoch für einen ganz bestimmten Zweck des Austauschs auf der Grundlage von Ereignissen durchgeführt. Obwohl es technisch möglich ist, RPC mit AMQP zu erstellen, ist dies nicht der primäre Zweck.

Der asynchrone Aspekt ist ebenfalls wichtig. Manchmal ist es ein Vorteil: Ich möchte die Benutzeroberfläche einer App nicht blockieren, während Anfragen an Server gestellt werden. Manchmal macht es die Dinge nur schwieriger, als sie sein müssen: Wenn ich eine Dateisicherung von Amazon S3 wiederherstellen muss, weil die lokale beschädigt war, und dann die Sicherung wiederherstellen möchte, benötigt meine Batchdatei unbedingt CURL, um ihren Job zu beenden, bevor ich fortfahre. und ein synchroner Betrieb (mit einer bestimmten Zeitüberschreitung) ist vollkommen sinnvoll.

Behalten Sie REST für primäre Operationen bei:

  • Ein Produkt bekommen,

  • Speichern einer Rechnung,

und verwenden Sie AMQP für die Aufgaben, bei denen Messaging tatsächlich Sinn macht:

  • Verarbeitung aller Rechnungen ab September und Benachrichtigung der App, wenn der Bericht angezeigt werden kann (da der Vorgang normalerweise zwei bis zehn Minuten dauert),

    Der Vorteil von AMQP ist hier der asynchrone Aspekt. Bei einer seit zehn Minuten anstehenden HTTP-Anforderung besteht eine gute Wahrscheinlichkeit, dass eine Zeitüberschreitung und andere Probleme auftreten.

  • Versenden der Informationen, dass die Sicherungen beschädigt wurden, an alle Interessenten, z. B. Supportmitarbeiter, Datenbankadministratoren, Überwachungsteams, Entwickler der Anwendung, die diese Datenbank verwendet, usw.

    Der Vorteil von AMQP besteht unter anderem in der Möglichkeit, die Abonnenten hinzuzufügen, ohne die Anwendung zu ändern, die Sicherungen verfolgt und die Warnung auslöst, wenn eine beschädigte Anwendung gefunden wird.


¹ Ein öffentlicher Webdienst wird nicht unbedingt von Benutzern außerhalb eines Unternehmens verwendet. In großen oder mittelgroßen Unternehmen wird Ihr Service oft von anderen Abteilungen desselben Unternehmens genutzt und hat die gleichen Anforderungen wie derjenige, der von Dritten genutzt wird: Er sollte jedem Anruf misstrauen (der Tatsache, dass jemand Ihnen nie begegnet Wenn Sie erfahren, wer Ihren Service in der gleichen Firma anruft, die Sie auch haben, bedeutet dies nicht, dass er seine Sicherheitsprobleme nicht ausnutzt. Es sollte ordnungsgemäß dokumentiert werden (da derselbe Inder nicht unbedingt Ihre Telefonnummer kennt und auch nicht unbedingt Englisch sprechen usw.

Arseni Mourzenko
quelle
Was ist mit dem Laden von abhängigen Objekten mit AMQP? Wie der Benutzer in Bezug auf einen Abrechnungsdienst (in einer massiven Mikroservice-Architektur), der Asynchronität gegenüber REST-Hass-Zugriffen (synchroner Zugriff) wünscht?
Thomas Thomas 11.
5

Verwende beide.

JSON - Webdienste im REST - Stil eignen sich hervorragend für die Interoperabilität mit Javascript, iOS usw

AMQP eignet sich hervorragend für lang laufende Prozesse, Ereignisse und die Orchestrierung von Microservices.

Beide sind jedoch nur Kommunikations-Wrapper für den eigentlichen Dienst. Sie können denselben Dienst auf verschiedene Arten verfügbar machen und sollten dies wahrscheinlich tun.

AMPQ kann über Websockets, die einem REST-Endpunkt ähneln, wenn Sie darauf blinzeln, gut belichtet werden.

Ewan
quelle
1
"Wenn du es anschaust" lol, war das großartig.
Iain Duncan
0

REST ist eine Standardtechnologie, die sich besonders für die Interoperabilität zwischen Komponenten eignet. Dies ist der Schlüssel, der sich hervorragend dazu eignet, einen Webdienst zu erstellen, den andere nutzen können. Es leidet jedoch an den üblichen Problemen einer solchen Interoperabilität, da es weniger effizient ist als ein benutzerdefiniertes Protokoll.

Wenn Sie eine Back-End-Architektur schreiben, bei der die Dienste nur von Ihnen selbst genutzt werden, können Sie jedes gewünschte Protokoll verwenden. Sie müssen kein so interoperables Protokoll mehr verwenden. Sie können ein MQ oder etwas enger gekoppeltes und performantes verwenden. Welchen Sie verwenden, hängt von Ihrem Anwendungsfall ab. Ein Nachrichtenbus eignet sich sehr gut für verteilte Dienste, die Daten verarbeiten, bei denen es dem Client egal ist, wer die von ihm gesendeten Nachrichten erhält.

gbjbaanb
quelle
2
Ich stimme nicht zu, soweit es mich betrifft, haben sie unterschiedliche Zwecke; Sie sollten AMQP (im Allgemeinen) nicht über das öffentliche Internet zugänglich machen. Zum einen gibt es viel weniger Authentifizierungsmöglichkeiten, und in der Regel möchten öffentliche Internetnutzer Antworten von ihren Aktivitäten erhalten. Aus diesem Grund ist REST ideal für die öffentliche Internetnutzung geeignet. Der größte Unterschied ist aber, dass AMQP asynchron ist (synchrone wie Verhaltensweisen sind möglich, aber es ist nicht das, was MQs ist) und REST ist synchron (ja Rückkehr 202Asynchronität diktiert, aber warum haben Sie REST verwenden dann? Wahrscheinlich , weil es die Öffentlichkeit.)
Jimmy Hoffa
Nebenbei bemerkt ist es ein Grund, AMQP für die Websocket-Nutzung freizugeben, damit Benutzer Echtzeit-Pushs erhalten, anstatt abfragen zu müssen. aber nochmal: Cross purpose, du machst kein REST, damit die Konsumenten Pushs bekommen können. Dies ist ein weiteres Szenario, in dem du AMQP für etwas verwendest, was REST nicht kann.
Jimmy Hoffa
@JimmyHoffa Ich dachte, er fragt, was er verwenden soll, um seine Webserver oder Clients oder was auch immer mit seinen Microservices in einem internen LAN zu verbinden, nicht über das Web - daher meine ich, dass REST dafür gut ist, aber wenn alles, was Sie verwenden, unter Ihrer Kontrolle steht Kontrolle, können Sie verwenden, was Sie wollen.
gbjbaanb
Ja, das macht auf jeden Fall Sinn. Ich habe seine Frage jedoch anders gelesen: Es scheint, dass er über die Idee von Microservices gelesen hat und die relevanten Gründe für die Entscheidung zwischen AMQP und REST nicht versteht. Intern können Sie alles verwenden, was Sie möchten, aber es gibt immer noch bestimmte Gründe, AMQP im Vergleich zu REST auch intern zu verwenden. Dienste, die Asynchronität wünschen, sollten AMQP intern verwenden, Dienste, die synchron sind (denken Sie an einen reinen Verarbeitungsdienst: Rohdaten ein -> Verarbeitete Daten aus), sollten REST sein. Beide IPC-Techniker haben unterschiedliche Vor- und Nachteile. Sie kennen sie und sollten sie in Ihrer Antwort aufführen! :)
Jimmy Hoffa
0

AMQP unterstützt auch die Punkt-zu-Punkt-Kommunikation (siehe beispielsweise das python-qpid-protonLernprogramm). Damit könnten Sie eine RESTful-Schnittstelle implementieren, da REST !=HTTP.

AMQP bietet auch eine viel bessere Leistung als HTTP.

Cochise Ruhulessin
quelle