Wann sind RPC-ische Ansätze geeigneter als REST?

33

Nachdem ich mir diesen Vortrag von Steve Vinoski über REST, Wiederverwendung und Serendipity angesehen habe, frage ich mich, ob es in Greenfield- Projekten Business Cases für (XML-) RPC-basierte Setups gibt, die REST nicht besser lösen könnte.

Einige RPC-Probleme erwähnt er:

  • Konzentrieren Sie sich auf die Sprache (passen Sie das verteilte System an die Sprache an, nicht umgekehrt)
  • "Lokal aussehen lassen" (und Fehler und Latenz als Ausnahmen und nicht als Regel behandeln)
  • soll sprachunabhängig sein, hat aber immer noch sprachübergreifende "Funktionsaufrufe" als Hauptbestandteil
  • IDL Kesselschild
  • Illusion der Typensicherheit
  • und noch ein paar mehr ...

Um es ein wenig zu dramatisieren, einige Google Instant-Ergebnisse für RPC vs REST:

RPC

SICH AUSRUHEN

Miku
quelle

Antworten:

20

Im Allgemeinen bietet RPC weitaus mehr Sprachintegration als REST. Wie Sie bereits erwähnt haben, gibt es eine Reihe von Problemen in Bezug auf Skalierung, Fehlerbehandlung, Typensicherheit usw., insbesondere wenn ein einzelnes verteiltes System mehrere Hosts umfasst, auf denen in mehreren Sprachen geschriebener Code ausgeführt wird. Nachdem ich jedoch Geschäftssysteme geschrieben habe, die RPC, REST und sogar beide gleichzeitig verwenden, habe ich festgestellt, dass es in bestimmten Fällen gute Gründe gibt, RPC vor REST zu wählen.

Hier sind die Fälle, in denen ich festgestellt habe, dass RPC besser zu mir passt:

  • Enge Kupplung. Die (verteilten) Komponenten des Systems sind so konzipiert, dass sie zusammenarbeiten, und eine Änderung wird sich wahrscheinlich auf alle anderen auswirken. Es ist unwahrscheinlich, dass die Komponenten in Zukunft für die Kommunikation mit anderen Systemen angepasst werden müssen.
  • Zuverlässige Kommunikation. Die Komponenten kommunizieren entweder vollständig auf demselben Host oder in einem Netzwerk, bei dem Latenzprobleme, Paketverlust usw. unwahrscheinlich sind. (Dies bedeutet jedoch weiterhin, dass Sie Ihr System für diese Fälle entwerfen müssen.)
  • Einheitliche Sprache. Alle (oder fast alle) Komponenten werden in einer einzigen Sprache geschrieben. Es ist unwahrscheinlich, dass in Zukunft zusätzliche Komponenten in einer anderen Sprache hinzugefügt werden.

In Bezug auf IDL müssen Sie in einem REST-System auch Code schreiben, der die Daten in den REST-Anforderungen und -Antworten in die von Ihnen verwendete interne Datendarstellung konvertiert. IDL-Quellen (mit guten Kommentaren) können auch als Dokumentation der Schnittstelle dienen, die für eine REST-API separat geschrieben und verwaltet werden muss.

Die oben genannten drei Elemente treten häufig auf, wenn Sie eine Komponente eines größeren Systems erstellen möchten. Nach meiner Erfahrung handelt es sich bei diesen Komponenten häufig um Komponenten, bei denen ihre Subsysteme in der Lage sein müssen, unabhängig voneinander auszufallen, und nicht den vollständigen Ausfall anderer Subsysteme oder der gesamten Komponente verursachen müssen. Viele Systeme sind in Erlang geschrieben, um diese Ziele zu erreichen. In einigen Fällen ist Erlang möglicherweise die bessere Wahl, als ein System in einer anderen Sprache zu schreiben und RPC zu verwenden, um diese Vorteile zu nutzen.

Wie bei den meisten technischen Problemen gibt es keine einzige Lösung für das Problem der prozessübergreifenden Kommunikation. Sie müssen sich das System ansehen, das Sie entwerfen, und die beste Wahl für Ihren Anwendungsfall treffen.

ndm
quelle
1

REST bietet einige wesentliche Vorteile, wenn Produkte über ein Rechenzentrum skaliert werden und Sie hohe Verfügbarkeit und Lastenausgleich durchführen.

Denken Sie jedoch an ein kleineres Projekt. Benötigen Sie einen Webservice mit einigen hundert Anfragen pro Stunde? WCF kümmert sich um alle Transportfragen. Verfügt über eine praktische Schnittstelle zum Senden von Objekten über das Netzwerk und ermöglicht die Konfiguration, Verschlüsselung und Zertifizierung der Netzwerkverbindung ohne Programmierung mit nur der Datei application.config.

Michael Shaw
quelle
1

Sie können tatsächlich beides haben. Plugins wie RestRPC for Grails bieten Annotationen, die Aufrufe Ihrer Methoden abfangen und sie in Ruhe verarbeiten, während Sie so viele haben können, wie Sie möchten (was sehr RPC-ähnlich wäre).

orubel
quelle