初入职场,接触了不少企业常用的技术,与学校实训使用的技术有很大差异,在这里记录一下RPC、RMI与REST的区别。
概念
RPC(Remote Procedure Call,远程过程调用)
- 一种通过从远程计算机程序上请求服务,而无需了解底层网络技术的协议。
- 面向过程。解决分布式系统中,服务之间的调用问题。
- 远程调用时,像本地调用一样方便,调用者感觉不到远程调用的逻辑。
- 可以采用 TCP、UDP、HTTP、管道通信等技术去实现。
RMI(Remote Method Invocation,远程方法调用)
- 仅支持Java,由java.rmi包提供支持。
- 能够让一个Java程序去调用远程计算机上的Java对象的方法,调用的结果就像在本地调用一样。
- 是EJB(Enterprise JavaBeans)的支柱,是建立分布式Java应用程序的方便途径。
- 使用JRMP(Java Remote Messaging Protocol,Java远程消息交换协议)进行通信。JRMP是专为Java的远程对象制定的协议。
REST(Representational State Transfer,表述性状态传递)
- 一种软件架构风格,面向资源(URL)。
- 很好的利用了 HTTP 中已有的请求方法(PUT、POST、GET、DELETE)做操作形式的区分,以简化URL。
- 通过HTML协议使用JSON字符串传输数据。
区别
名称 | 适用范围 | 底层 | 优势/劣势 |
---|---|---|---|
RPC | 一种协议,可以跨语言实现 | 可以采用 TCP、UDP、HTTP、管道通信等实现 | 面向过程; 性能通常更高,因为实现更底层、封装的数据量更小 |
RMI | Java对象和基本数据类型 | JRMP协议 | 仅适用于Java,要求服务端和客户端均为Java开发 |
REST | 应用服务架构 | HTTP协议 | URL精简性、可读性高; 面向资源; 资源描述与视图的松耦合 |
- 一般后端使用RPC(性能高),前端使用REST(HTTP)。
- REST 基于 HTTP 协议,因此通常会有前端代理进行请求分发,这种前端代理层的水平扩展不太容易;但 RPC 服务借助注册中心可以轻易实现服务节点的增删和动态调整。