概念 HTTP,首先回顾一下计算机的七层协议:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,tcp属于传输层协议,http是建立在tcp之上的应用层协议 RPC,即 Remote Procedure Call(远程过程调用),一种进程间的通信方式,允许像调用本地服务一样调用远程服务(rpc就像方法之间调用一样,很简单)
1、灵活性 RPC,要求服务器和客户端都采用相同的框架,相同语言 HTTP,跨语言、跨平台,更加灵活
2、传输协议 RPC,可以基于TCP协议,也可以基于HTTP、UDP等协议 HTTP,基于HTTP协议
3、性能消耗,主要在于序列化和反序列化的耗时 RPC,可以基于thrift实现高效的二进制传输 HTTP,大部分是通过json来实现的,字节大小和序列化耗时都比thrift要更消耗性能
4、网络开销 RPC,长链接,不必每次通信都要像http一样去3次握手什么的,减少了网络开销 HTTP,短链接
补充说明:
- 短连接: 指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接,即每次连接只完成一项业务的发送
- 长连接( keep-alive ): 指在一个连接上可以连续发送多个 数据包 ,在连接保持期间,如果没有数据包发送,需要双方发链路检测包
- 通俗的讲:
(1)长连接就像是一通不挂机的电话:双方一直在线,随时可以通话,当然前提是你有足够的话费 (2)短连接就相当于日常电话:当你有事的时候就给对方打电话,没有事情则及时挂断,下次有事情则重新打电话
参考: link
5、负载均衡 RPC,基本都自带了负载均衡策略(封装了“服务发现”,“负载均衡”,“熔断降级”一类面向服务的高级特性) HTTP,需要配置Nginx,HAProxy来实现
6、服务治理(下游服务新增,重启,下线时如何不影响上游调用者) RPC,能做到自动通知,不影响上游 HTTP,需要事先通知,修改Nginx/HAProxy配置
总结:
RPC,主要用于公司内部的服务调用,性能消耗低,传输效率高,服务治理方便(RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作) HTTP,主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等
|