概念
HTTP是应用层协议,是唯一标准的,业界通用的协议。
RPC是远程过程调用,它是调用方式,对应的是本地调用。
那什么是RPC协议呢,它其实是基于TCP、UDP、甚至HTTP2改造后的自定义协议。
请求流程
编解码层:网络传输前,需要结构体转为二进制数据 =>序列化
- HTTP
- 序列化协议:JSON
- 优点:直观,一看就懂,请求头、请求体等
- 缺点:JSON占用空间比较大开销大,且没有类型
- RPC
- 序列化协议:以gPRC为代表的Protobuf(pb),其他也类似
- 优点:直观,体积小传输效率高,编解码速度快
通信协议约定:基于TCP传输,都会有消息头和消息体,区别在于消息头
- HTTP
- 优点:非常灵活,可以自定义很多字段
- 缺点:包含了许多为了适应浏览器的冗余字段,这些内部服务是用不到的
- RPC
- 可定制化,自定义必要字段即可。
- 可摒弃很多HTTP Header中的字段
网络传输层:本质都是基于Socket通信
- HTTP1.1
- 建立一个TCP长连接,设置Keep-alive长时间复用这个连接
- 框架中会引入成熟的网络库,给HTTP加连接池,保证不只有一个TCP连接可用
- RPC
- 建立TCP连接池,框架也会引入成熟网络库来提高传输性能
- gRPC基于HTTP/2,拥有多路复用、优先级控制、头部压缩等优势
RPC和HTTP的使用场景
- 微服务架构下,多个内部服务调用频繁和服务跨语言的情况下,适合用RPC
- 对外服务、单体服务、为前端提供的服务,适合用HTTP,特别是HTTP/2