天天看点

RPC和HTTP对比1、 OSI七层网络模型2、优缺点3、总结

文章目录

  • 1、 OSI七层网络模型
  • 2、优缺点
  • 3、总结

无论是微服务还是SOA(面向服务的架构),都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

常见的远程调用方式有以下2种:RPC和Http。其中Http大家很熟悉不多说,RPC是什么呢?

RPC基础概念

RPC就是远程过程调用协议,其作用就是客户端与服务端之间的远程调用,就像本地自己调用一样,让服务端进行服务化

1、 OSI七层网络模型

在说RPC和HTTP的区别之前,需要了解一下计网基础的OSI七层网络结构模型。

应用层:定义了用户在网络中进行通信和传输数据的接口,一般情况下应用都是直接和应用层进行交互的。

表示层:定义不同系统中数据的传输格式,编码和解码规范等,用于多系统下的传输。

会话层:管理者用户的会话,控制用户间的逻辑连接的建立和中断;

传输层:管理者网络中设备间如何传数据。

网络层:定义网络设备间如何传输数据

链路层:将上面的网络层的数据封装成帧,便于物理层进行传输。

物理层:这一层主要就是传输这些二进制数据。

在实际的应用过程中是没有表示层和会话层的,应该说他们已经和应用层合并了,我们应该将重点放在应用层和传输层这两个层面。因为HTTP是应用协议,而TCP是传输协议。HTTP是基于应用层的,RPC是基于传输层的。这也是RPC比HTTP速度快的原因。

2、优缺点

主要阐述HTTP和RPC的异同,在何种情况下应该选择何种方案。

2.1 传输协议

RPC:可以基于TCP协议,也可以基于HTTP协议。

HTTP:基于HTTP协议

2.2 传输效率

RPC:使用自定的TCP协议,可以让请求报文的体积更小,提高传输效率。

HTTP: 基于HTTP1.1的协议,请求中会包含很多无用信息。如果基于HTTP2.0,那么可以简单的封装一下,作为RPC使用。

2.3 性能消耗

RPC:基于thrift实现高效的二进制传输。

HTTP:大部分通过Json字符串实现,字节大小和序列化的耗时都比thrift更加消耗性能。

2.4 负载均衡

RPC:基本都自带了负载均衡策略。

HTTP:需要Nginx,HAProxy来实现。(要使用代理去访问)

2.5 服务治理

RPC: 能做到自动通知,不影响上游。(参考资料:Zookeeper的服务治理)

HTTP: 需要事先通知,修改Nginx/HAProxy。(负载均衡不考虑已下线服务器,或者增加上线服务器)

3、总结

  • RPC:Remote Produce Call(远程过程调用),类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表
  • Http:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念

现在热门的Rest风格,就可以通过http协议来实现。

如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。

相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么SpringCloud搭建微服务是不二之选。在我们的项目中,我们会选择SpringCloud套件,因此我们会使用Http方式来实现服务间调用。

继续阅读