目录
这里先声明,这里RPC对比的是HTTP1和HTTP1.1,不包括HTTP2,因为HTTP2做了一部分改动,性能相比于HTTP1.1已经得到了提升。
1. 概念不一样
HTTP是应用层协议。
RPC是远程调用方式,它是调用方式,对应的是本地调用。
所谓的RPC协议,实际上是基于TCP,UDP甚至HTTP2改造后的自定义协议。所以有时候说它是一个协议也不能算错,很多公司都有自己自定义的RPC协议。
2. 请求流程不一样
2.1 编(解)码层
网络传输前,需要结构体转化成二进制数据——>序列化
在HTTP1.1中,序列化协议是JSON。优点:非常的直观;缺点:占的空间大,传输速率较慢。
在RPC中,序列化协议是protobat。优点:数据包小, 传输速率快,序列化与反序列化效率快。
2.2 协议层
HTTP和RPC都是基于TCP传输,都会有消息头和消息体,区别在于消息头。
HTTP1.1
优点:灵活,可以定义很多字段。
缺点:包含许多为了适应浏览器的冗余字段,这些字段在内部服务其实是用不到的。
RPC
优点:可定制化,自定义必要字段即可;所以可以摒弃HTTP Header中的冗余字段,比如浏览器的各种行为。
2.3 网络传输层
HTTP和RPC本质都是基于Socket通信。
HTTP1.1
建立一个TCP长连接,设置keep-alive长时间服用这个连接。
框架中会引入成熟的网络库,给HTTP加连接池,保证不只有一个TCP连接可用。
RPC
建立TCP连接池,框架也会引入成熟的网络库来提高性能。
gRPC基于HTTP2,拥有多路复用,优先级控制,头部压缩等优势。
3. RPC的优势与不足
优点:
(1)相较于HTTP1.1,数据包更小,序列化更快,传输速率很高。
(2)基于TCP或HTTP2的自定义RPC协议,网络传输性能比HTTP1.1更快。
(3)适用于微服务架构,微服务集群下,每个微服务指责单一,有利于多团队的分工合作。
缺点:
(1)RPC协议本身无法解决微服务集群的问题,例如:服务发现,服务治理等,需要工具来保障服务的稳定性。
(2)调用方对服务端的RPC接口有很强的依赖性,需要有自动化工具,版本管理工具来保证代码级别的强依赖性。例如,stup桩文件需要频繁更新,否则接口调用方式可能会出错。
4. RPC和HTTP的使用场景
微服务架构下,多个内部微服务调用频繁,使用RPC。
对外服务,单体服务,为前端提供的服务,适用于HTTP,特别是HTTP2性能也很好。