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还提供了一些针对服务之间调用的机制:负载均衡、流量控制等等。