何时使用RPC-ish方法比REST更合适?


33

看这次谈话后的休息,再利用和缘分由史蒂夫Vinoski的,我不知道是否有商业案例在新建项目(基于XML)RPC十岁上下的设置,即REST不能以更好的方式解决。

他提到了一些RPC问题:

  • 专注于语言(使分布式系统适应该语言,而不是相反)
  • “使它看起来是本地的”(并将失败和延迟作为例外而不是规则来处理)
  • 旨在独立于语言,但仍将跨语言的“函数调用”作为主要成分
  • IDL样板
  • 类型安全的错觉
  • 还有更多...

只是为了生动起见,RPC vs REST的一些Google Instant结果:

RPC

休息

Answers:


20

通常,RPC提供的语言集成远超过REST。如您所提到的,这在规模,错误处理,类型安全性等方面存在许多问题,尤其是当单个分布式系统涉及多个主机并运行以多种语言编写的代码时。但是,在编写了使用RPC,REST甚至同时使用RPC和REST的业务系统之后,我发现在某些情况下有很多理由选择RPC而不是REST。

在以下情况下,我发现RPC更适合:

  • 紧耦合。系统的(分布式)组件旨在协同工作,更改其中的一个组件可能会影响其他所有组件。将来不太可能必须修改组件才能与其他系统通信。
  • 可靠的通讯。这些组件将完全在同一主机上或不太可能出现延迟问题,数据包丢失等的网络上相互通信。(这仍然意味着您需要设计系统来处理这些情况。)
  • 语言统一。所有(或几乎所有)组件都将用一种语言编写。将来不太可能添加使用其他语言编写的其他组件。

关于IDL,在REST系统中,您还必须编写将REST请求和响应中的数据转换为您正在使用的任何内部数据表示形式的代码。IDL源代码(带有良好的注释)也可以用作接口的文档,对于REST API,必须单独编写和维护该接口。

当您要构建较大系统的一个组件时,通常会发生以上三个项目。以我的经验,这些组件通常是其子系统需要能够独立发生故障且不会导致其他子系统或整个组件完全故障的组件。许多系统也是用Erlang编写的,也可以实现这些目标,在某些情况下,与使用另一种语言编写系统并使用RPC以获得这些好处相比,Erlang可能是更好的选择。

像大多数工程问题一样,进程间通信问题也没有单一的解决方案。您需要查看正在设计的系统,并为用例做出最佳选择。


1

当跨数据中心扩展产品并且您正在执行高可用性和负载平衡时,REST有一些主要优点。

但是,考虑一个较小规模的项目。是否需要一个每小时需要处理数百个请求的Web服务?WCF处理所有运输问题。具有方便的接口,可用于跨网络发送对象,并允许仅使用application.config文件使用零编程来配置,加密和认证网络连接。


1

您实际上可以同时拥有两者。诸如RestRPC for Grails之类的插件提供了注释,这些注释将拦截对您方法的调用并对其进行妥善处理,同时允许您拥有所需的任意数量(这非常类似于RPC)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.