天天看点

RPC与RMI、REST区别

RPC 和 RMI 的区别

RPC 更像一种协议,可以跨语言实现,而 RMI 仅支持 Java,需要双方都运行在 JVM 中

RPC 通过传入 class 和 methodName 的形式利用反射和代理类调用该方法;RMI 需要依靠方法签名去 lookUp,找到了该方法之后调用它

RMI 可以 Java 对象和基本数据类型,而 RPC 通常借助不同的序列化协议来进行网络传输,有编解码的过程

REST 和 RPC 的区别

看了上述的应用场景后,你可能觉得易用的 RESTful API 不也是差不多的么,也是调用一个地址,传入参数,返回结果,而且简单易用,为什么还要有 RPC 框架呢?

回答这个问题不太容易,因为其中的概念很绕。一般来说,在企业级应用中,外部请求进入系统通常使用 RESTful API 的形式,例如用户在 APP 端点击推荐列表;请求在内部系统间处理,服务之间的调用通常采用 RPC 的方式,例如根据算法返回该用户的推荐列表数据。

RPC 和 REST 的区别

REST 基于 HTTP 传输协议,RPC 的传输协议可以不基于 HTTP,可以采用 TCP、UDP、HTTP、管道通信等技术去实现

后端服务间调用 RPC 性能通常更高,因为实现更底层、封装的数据量更小;而前端请求则通常采用 REST,因为一定要走 HTTP 协议

采用 REST 风格的 API,如果一旦要新增一个删除书籍的方法,那么 URL 地址依据不变,变化的仅是请求方法改为 DELETE;而 RPC 如果要增加这个方法,那么必须新建一个 deleteBook(int bookId) 的方法,客户端需要调用这个新方法达成功能

但是因为 REST 基于 HTTP 协议,因此通常会有前端代理进行请求分发,这种前端代理层的水平扩展不太容易;但 RPC 服务借助注册中心可以轻易实现服务节点的增删和动态调整

rpc