RPC框架和HTTP框架的区别

RPC框架和HTTP框架的区别

有了HTTP协议,为什么还需要RPC远程过程调用协议?

由于RPC直接通过自定义TCP协议实现通信,而HTTP服务通过Http协议(Http在TCP之上),相当于多了一层,所以RPC的效率高于Http。http是超文本传输协议,包含的信息比较臃肿,网关之前一般使用http,服务之间的调用采用rpc。

一方面是因为RPC框架的效率比较高,还有一个原因是RPC包含了重试机制、路由策略、负载均衡策略、高可用策略、流量控制策略,使用http无法完成上述功能

我们通常采用的原则为:**向系统外部暴露采用HTTP,向系统内部暴露调用采用RPC方式。** 也就是说前后端之间(网关之前)用http,各个服务之间用rpc

区别:

RPC主要用于系统内部服务调用,传输效率高(基于tcp),性能消耗小(高效的二进制传输)

http一般用在网关之前来提供系统与系统的通信(http包含的臃肿信息),性能

1、传输协议

  • RPC框架:基于TCP协议,亦可以基于http协议(google的grpc基于http2实现)
  • HTTP框架:基于http协议

由于RPC直接通过自定义TCP协议实现通信,而HTTP服务通过Http协议(Http在TCP之上),相当于多了一层,所以RPC的效率高于Http。

2、性能损耗

  • RPC:高效的二进制传输
  • HTTP:大部分基于json实现,字节大小和序列化比较耗时。

3、服务调用功能

  • RPC:自带了负载均衡机制、流量控制等
  • HTTP:需要增加ngnix来提供负载均衡。

4、使用

  • RPC:经过配置,可以直接调用,像调用本地接口一样调用其他服务的接口
  • HTTP:需要拼接http请求的url,然后发起请求。

项目中每次使用HTTP都需要拼接url,不是很方便,而且在服务运行中,当资源所在的服务器改变了我们需要修改源码,然后编译打包、部署,比较麻烦。

个人见解:

http协议就是为了系统与系统之间通信(Client<—>Server)出现的,所以需要设置一些额外的信息:通信的协议,请求的方法、请求的参数等等。而RPC顾名思义远程过程调用,就是用在服务之间的调用所使用的,所以不需要想http一样引入过多的信息,因此RPC协议比较小,并且RPC使用二进制传输,而http使用json要在网络中传输需要进行序列化,RPC效率也就比较高。RPC还提供了一些针对服务之间调用的机制:负载均衡、流量控制等等。

猜你喜欢

转载自blog.csdn.net/qq_50876039/article/details/127137908