RPC框架


RPC(远程过程调用),需满足一下三个条件才可称为RPC
1、网络协议及网络IO模型对其透明(不依赖与具体网络协议及不依赖传输协议TCP还是依赖应用协议HTTP)
2、信息格式对其透明。
3、提供服务放不依赖具体开发语言。

作者:程序员小小
链接:https://www.zhihu.com/question/298707085/answer/1251041927
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先来解释一下什么是RPC和HTTP,RPC的中文意思是远程过程调用,HTTP是一种应用层传输协议。二者不是一个层面的东西,所以我们一般会称呼RPC为框架,HTTP为协议,在RPC框架中可以选择HTTP作为传输协议。RPC,远程过程调用可能让人感觉到一头雾水,无法很直观的感受到这是个什么东东。其实,说的简单一点,远程过程调用其实描述的是一件事儿,一件客户端如何调用服务端的事儿。在这件事儿里,包括了很多内容,例如:序列化和反序列化协议怎么弄,传输协议选什么等等。说到这里,把RPC称做调用调用远程过程是不是更合适一点。下面来简单介绍2个常见的RPC框架吧。

  1. Dubbo 国产RPC框架
    先扯一句题外话。有不少同学会把Dubbo和Spring Cloud都归纳为微服务体系下的框架,但是我认这样表述稍微有点不妥。微服务是一种架构思想,其中涉及到的远远不止RPC这么一件事儿,而Dubbo除了RPC和简单的服务治理外,并没有更多的可以服务于微服务的东西;而Spring Cloud被大家成为全家桶,那是因为在Spring Cloud为微服务提供了近乎完整组件(虽然SpringCloud把自己称为搬运工,但是大家还是喜欢用全家桶来称呼他)。作为RPC框架,Dubbo还是很厉害的,在序列化、传输上都提供了丰富的选择。我个人认为Dubbo做的比其他RPC框架好的一点是,引入了注册中心的概念,从此开发小哥就摆脱了疯狂配置的工作;此外,在大厂影响力的加持下,在过去的某一段时间里,Dubbo被炒的沸沸扬扬,在国内的软件行业中占有相当大的比重。在Dubbo默认的配置中,传输层并没有使用HTTP协议,而是使用了传统的TCP协议。我现在负责的系统中就有使用Dubbo作为RPC框架的。
    2. HttpInvoker Spring的亲儿子
    这个没啥好说的了,Spring的亲儿子,优势就是在Spring体系中使用非常简单,缺点是效率不行。从HttpInvoker的名字,我们都可以发现,在HttpInvoker的传输层,也是使用了HTTP协议。
    3. Feign 微服务中最常见的RPC框架
    题主问题中的RPC框架,说的应该就是Feign了吧。Feign是Spring Cloud全家桶中推荐使用的RPC框架,但是Feign也是使用了HTTP作为传输层协议的。上文介绍了RPC,并且列举了一些常见的RPC框架。总的来说,RPC和HTTP二者并不是一个层面的东西,在RPC框架中可以选择使用HTTP作为其传输层协议,而在微服务体系中,无论使用Feign还是使用RestTemplate,传输层都是基于HTTP协议进行传输的。