【gRPC】HTTP/2协议,HTTP/1.x中线头阻塞问题由来,及HTTP/2中的解决方案,RPC、Protobuf、HTTP/2 的关系及核心知识点汇总

发布于:2025-05-17 ⋅ 阅读:(17) ⋅ 点赞:(0)

HTTP/2协议特点

gRPC基于HTTP/2协议,原因:

  • 多路复用:允许在同一个TCP连接上并行传输多个请求和响应,即多个gRPC调用可以通过同一个连接同时进行,避免了HTTP/1.x中常见的线头阻塞问题,减少了连接建立和关闭的开销,提高了性能和连接利用率。
  • 二进制分帧:HTTP/2将数据分割二进制帧,每个帧都有自己的类型、标志和内容。gRPC利用这种机制可以更高效地传输数据,使数据的传输更加有序可靠,并且能够在应用层对数据进行更细粒度的管理
  • 流控制:HTTP/2提供了流控制机制,允许客户端和服务器控制数据流的速率,以防止发送方发送过快导致接收方缓冲区溢出。gRPC借助这一机制来管理数据的传输速率,确保通信的稳定性和可靠性。
  • 头部压缩:HTTP/2使用HPACK算法等对头部进行压缩,减少了头部信息的传输大小,提高了传输效率。对于gRPC来说,这有助于减少元数据的传输开销,特别是在频繁进行RPC调用时,可以显著降低网络带宽占用。

菜鸟教程总结版

多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1 一样只能一个一个地处理。
这样可以减少延迟,提高效率,提高网络吞吐量。

二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。
二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。

头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。

服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。

改进的安全性:HTTP/2 默认使用 TLS(Transport Layer Security)加密传输数据,提高了安全性。

兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1 共存,服务器可以同时支持 HTTP/1.1 和 HTTP/2。
如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。

HTTP/1.x中线头阻塞在HTTP/2中被解决

产生原因
  • 同一个 TCP 连接上的请求必须按顺序发送,服务器也会按顺序处理请求并返回响应。
  • HTTP/1.1 虽引入 长连接,允许复用 TCP 连接,但浏览器默认对同一域名仅建立 6-8 个并发连接(不同浏览器策略不同)
  • 当页面需要加载大量资源(如图片、CSS、JS 等)时,大量请求会被分配到有限的连接中,导致每个连接上的请求队列过长,加剧阻塞问题。

所以解决思路大致有两条线:1. 改变接收硬性顺序规定,实现并行;2. 压缩数据大小

HTTP/2解决方案
  • 引入 多路复用

    • 同一 TCP 连接中并行处理多个请求,响应
    • 请求和响应被拆分为独立的 二进制帧,并且由于这里二进制分帧都含有自己的标识,可以实现混乱传输,最后到达时重新组装

gRPC、Protobuf、HTTP/2 的关系及核心知识点汇总表:

技术维度 Protobuf (Protocol Buffers) HTTP/2 gRPC
定义 语言无关的数据序列化协议(Google 开发) HTTP 协议 高性能开源 RPC 框架(Google 开发)
核心功能 结构化数据的高效序列化/反序列化(生成二进制消息 二进制分帧、多路复用、头部压缩、流控制 远程过程调用(定义服务接口 & 自动生成代码)
数据格式 二进制格式(体积小、解析快) 二进制协议(帧结构) 基于 Protobuf 消息(默认)或其他格式
传输协议 不依赖特定传输层(可与任何协议结合) 基于 TCP,支持 TLS 加密 强制基于 HTTP/2(利用其所有特性)
主要用途 跨语言数据交换、存储(如微服务间通信) 通用 Web 通信(替代 HTTP/1.x) 构建高性能分布式系统(API、微服务)
关键优势 1. 序列化效率极高(比 JSON/XML 快 3-10 倍)
2. 自动生成强类型代码
3. 向后兼容(支持字段增删)
1. 多路复用(彻底解决线头阻塞
2. 头部压缩(HPACK
3. 二进制分帧
4. 流控制
1. 基于 HTTP/2 的高性能传输
2. 自动生成客户端/服务器代码
3. 支持流式通信
4. 丰富的拦截器机制
典型应用场景 1. 微服务间数据交换
2. 移动应用与后端通信
3. 缓存数据存储
1. 现代 Web 应用(如 SPA)
2. API 网关
3. 推送通知系统
1. 跨语言微服务通信
2. 边缘计算(低延迟需求)
3. 设备与云端通信
关系 gRPC 默认使用 Protobuf 定义服务接口消息格式 HTTP/2 是 gRPC 的底层传输协议 gRPC = Protobuf(接口定义 + 消息序列化) + HTTP/2(网络传输)

总结逻辑

  1. Protobuf 是数据格式层,负责高效序列化。
  2. HTTP/2 是传输协议层,提供高性能通信能力。
  3. gRPC 是应用框架层,整合两者并提供完整 RPC 解决方案。

https://github.com/0voice


网站公告

今日签到

点亮在社区的每一天
去签到