Designed by 77
加载资源 ......
感谢 ♥ 作者
先不感谢了

rpc、rmi和rest的概念

这里简单梳理下RPC、RMI和REST的概念。

RPC的概念

RPC(Remote Procedure Call)翻译过来叫做远程过程调用。根据维基百科的解释,RPC是指在分布式的环境下,一个计算机程序能够调用另一个不同地址空间里的方法(不同地址空间通常指局域网下的另一台计算机),但是编码的形式就像调用一个本地方法一样,调用者不用去关心背后的细节。

为什么要有RPC呢?因为你的代码所依赖的服务可能部署在不同的服务器上,而你的程序需要通过网络调用另一台服务器中的某个方法得到结果。在分布式系统中这种场景很常见,微服务的兴起也使得程序之间的调用链变得十分复杂,RPC就是为了解决这种问题而诞生的。

常见的RPC框架

目前流行的RPC框架有阿里的Dubbo,微博开源的Motan,Google开源的gRPC,百度开源的bRPC,蚂蚁金服开源的sofa-RPC等。而且Github上还有数不清的由个人自己实现的简单的RPC框架,虽然说没有什么企业级利用价值,但是对于想要了解RPC框架原理的新手来说是很宝贵的学习资料。

RPC和RMI的区别

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

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

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

REST和RPC的区别

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

一般来说,在企业级的应用中,外部请求进入系统通常是使用RESTful API的形式,例如用户在APP端点击推荐列表;而请求在内部系统之间处理、服务之间调用通常采用RPC的方式,例如根据算法返回该用户的推荐列表数据。

REST风格

REST是一种架构风格,面向资源(由一个URL唯一确定),主要是名词,它很好地利用了HTTP中以有的请求方法(PUT/POST/GET/DELETE)作为操作形式的区分。要注意的是,REST并不是一种技术,而更多的是一种规范。

RPC

PRC主要是动词组成,面向方法,例如方法名为queryAllBooks,通过客户端与服务端共有的一个方法来进行调用,编码的时候可以像使用本地方法一样,使编码效率更高。

两者的区别

1.REST是基于HTTP传输协议,而RPC的传输协议可以不局限于HTTP,还可以采用TCP、UDP、管道通信等技术去实现。

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

3.采用REST风格的API,如果一旦要新增一个删除书籍的方法,那么URL地址的依据可以不变,变化的仅是请求方法(DELETE);而RPC如果要新增一个方法,必须新建一个deleteBook(int id)的方法,客户端需要调用这个新方法才能实现功能。

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

 

"如果有一天你难过到不想说话,我会到你身边静静地陪着你。"

posted @ 2020-03-14 00:04  yanggb  阅读(584)  评论(0编辑  收藏  举报