grpc和http区别

gRPC和HTTP的主要区别在于它们的传输协议、序列化和反序列化方法、性能特性以及使用场景。具体如下:

  • 传输协议不同。gRPC使用基于二进制的HTTP/2作为传输协议,支持多路复用、头部压缩和服务器推送等功能,提高了性能和效率,而HTTP通常使用文本协议,基于HTTP/1.1或HTTP/2,HTTP/1.1是基于请求-响应模式的协议,每次请求都需要建立新的连接,HTTP/2引入了多路复用和头部压缩等功能。
  • 序列化和反序列化方法不同。gRPC使用Protocol Buffers(protobuf)作为默认的接口定义语言(IDL),用于描述数据结构和服务接口,protobuf是一种高效的二进制序列化格式,可以提供更小的数据包大小和更快的序列化/反序列化速度,而HTTP使用普通文本格式进行数据交换,通常使用JSON或XML作为数据的表示格式。
  • 性能特性不同。gRPC在性能方面优于HTTP,由于使用了二进制格式,因此传输速度更快、更稳定,而且gRPC通过使用连接池,实现客户端与服务端的长连接机制,使得延迟较低,在高网络带宽时表现更好,而HTTP设计目标是作为一种通用的、可扩展的协议,用于在客户端和服务器之间传输超文本数据,广泛用于Web应用程序和浏览器之间的通信。
  • 使用场景不同。gRPC通常用于服务之间的通信,特别是分布式系统中,例如微服务框架等,具有高性能、低延迟、易扩展等特点,是一个理想的分布式系统通信协议,而HTTP主要用于Web中浏览器和服务器之间的交互,在Web应用程序中非常常见。

1.grpc底层用的什么协议?

http2.0

2.http2.0和1.1的区别?

  1. 多路复用: 1.1每个请求必须是独立的TCP请求, 2.0采用多路复用, 一个TCP连接可以进行多次请求, 大大提升性能
  2. 数据传输: 2.0引入数据流的概念, 允许不同请求在同一连接交错发送
  3. 头部处理: 2.0 采用HPACK算法对头部数据进行压缩, 降低数据大小和网络开销
  4. 二进制协议: http/1.1报文头信息必须是文本, 数据体可以是二进制,也可是文本。2.0 头信息和数据体都是二进制, 更加高效的处理数据
  5. 错误处理: 1.1处理错误需要关闭连接, 2.0引入可以在不关闭连接的情况下处理错误

3.gRPC有几种请求模式?

  1. 简单模式: 客户端发起请求, 等待服务端响应. (例如普通的grpc定义message, 一次请求一次响应)
  2. 服务端流式(长连接): 客户端发送请求, 服务端返回一个流, 客户端持续监听这个流, 反序列化其中的内容, 返回给用户,适用于客户端需要向服务端发送大量数据的情况, 如文件上传
  3. 客户端流式(长连接): 客户端创建一个流, 将请求参数以流的方式给服务端, 服务端再返回单个响应, 适合服务端向客户端发送大量数据的情况, 例如实时数据传输
  4. 双向流式: 允许客户端和服务端同时读写数据. 双方都可以随时开始和结束数据的发送. 适合双向数据传输模式

传统的http连接时短连接, 一次请求一次响应后, 连接就断开了, 然而, 客户端流式RPC和服务端流式RPC模式基于TCP长连接, 用于多次数据交换.

4.protobuf了解过吗? 和有什么区别? 对比json有什么优势? 压缩率对比json来说能达到多少?

和json的对比:

  1. protobuf使用二进制格式, json为文本格式, 所以protobuf的序列化和反序列化更加高效
  2. 由于使用二进制传输, protobuf的体积通常更小
  3. protobuf是强类型的, 定义数据结构时必须指定每个字段的类型, 可以减少解析时的错误, json是弱类型的, 不强制字段的类型