web-dev-qa-db-fra.com

Quand les approches RPC-ish sont-elles plus appropriées que REST?

Après avoir regardé cette conférence sur REST, Reuse and Serendipity par Steve Vinoski, je me demande s'il y a des analyses de rentabilisation dans greenfield projets pour (XML-) Configurations RPC-ish, que REST ne pouvait pas résoudre mieux.

Quelques problèmes RPC qu'il mentionne:

  • Se concentrer sur la langue (adapter le système distribué à la langue, et non l'inverse)
  • "Faites en sorte qu'il paraisse local" (et faites face aux échecs et à la latence comme exceptions plutôt que comme règle)
  • destiné à être indépendant de la langue, mais a toujours des "appels de fonction" à travers les langues comme ingrédient principal
  • IDL passe-partout
  • Illusion de sécurité de type
  • et quelques autres ...

Juste pour le dramatiser un peu, certains résultats instantanés de Google pour RPC vs REST:

RPC

REST

34
miku

En général, RPC offre beaucoup plus d'intégration linguistique que REST. Comme vous l'avez mentionné, cela pose un certain nombre de problèmes en termes d'échelle, de gestion des erreurs, de sécurité des types, etc., en particulier lorsqu'un système distribué unique implique plusieurs hôtes exécutant du code écrit dans plusieurs langues. Cependant, après avoir écrit des systèmes d'entreprise qui utilisent RPC, REST et même les deux simultanément, j'ai trouvé qu'il y avait de bonnes raisons de choisir RPC plutôt que REST dans certains cas.

Voici les cas où j'ai trouvé que RPC était mieux adapté:

  • Couplage étroit. Les composants (distribués) du système sont conçus pour fonctionner ensemble, et en changer un aura probablement un impact sur tous les autres. Il est peu probable que les composants devront être adaptés pour communiquer avec d'autres systèmes à l'avenir.
  • Communication fiable. Les composants communiqueront entre eux soit entièrement sur le même hôte, soit sur un réseau peu susceptible de rencontrer des problèmes de latence, de perte de paquets, etc. (cela signifie toujours que vous devez concevoir votre système pour gérer ces cas, cependant.)
  • niform language. Tous (ou presque tous) les composants seront écrits dans une seule langue. Il est peu probable que des composants supplémentaires écrits dans une langue différente soient ajoutés à l'avenir.

En ce qui concerne l'IDL, dans un système REST, vous devez également écrire du code qui convertit les données dans les demandes et réponses REST) en fonction de la représentation des données internes que vous Les sources IDL (avec de bons commentaires) peuvent également servir de documentation de l'interface, qui doit être écrite et maintenue séparément pour une API REST.

Les trois éléments ci-dessus se produisent souvent lorsque vous cherchez à construire un composant d'un plus grand système. D'après mon expérience, ces composants sont souvent ceux où leurs sous-systèmes doivent pouvoir échouer indépendamment et ne pas provoquer la défaillance totale des autres sous-systèmes ou du composant entier. De nombreux systèmes sont écrits en Erlang pour atteindre ces objectifs également, et dans certains cas, Erlang peut être un meilleur choix que d'écrire un système dans une autre langue et d'utiliser RPC juste pour obtenir ces avantages.

Comme la plupart des problèmes d'ingénierie, il n'y a pas de solution unique au problème de la communication interprocessus. Vous devez examiner le système que vous concevez et faire le meilleur choix pour votre cas d'utilisation.

20
ndm

Vous pouvez réellement avoir les deux. Des plugins comme RestRPC pour Grails fournissent des annotations qui intercepteront les appels à vos méthodes et les géreront de manière reposante tout en vous permettant d'en avoir autant que vous le souhaitez (ce qui serait très semblable à RPC).

1
orubel

Il existe certains avantages majeurs de REST lorsque les produits sont mis à l'échelle dans un centre de données et que vous effectuez une haute disponibilité et un équilibrage de charge.

Cependant, pensez à un projet à plus petite échelle. Besoin d'un webservice qui aura quelques centaines de requêtes par heure? La WCF s'occupe de toutes les questions de transport. A une interface pratique pour envoyer des objets à travers le réseau, et permet à la connexion réseau d'être configurée, chiffrée et certifiée sans programmation en utilisant uniquement le fichier application.config.

1
Michael Shaw