当前位置: 首页 > news >正文

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

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/2gRPC
定义语言无关的数据序列化协议(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

相关文章:

  • 项目QT+ffmpeg+rtsp(一)——Qt的安装和rtsp的测试
  • python中集合的操作
  • Python 中的 typing.ClassVar 详解
  • 会议分享|高超声速流动测量技术研讨会精彩探析
  • windows下authas调试tomcat
  • 青少年ctf平台应急响应-应急响应1
  • 基于 nvitop+Prometheus+Grafana 的物理资源与 VLLM 引擎服务监控方案
  • 自学嵌入式 day19-数据结构 链表
  • 二水平设计的单次重复
  • 阳台光伏+储能:安科瑞智能计量仪表来助力
  • 学习海康VisionMaster之直方图工具
  • uniapp+vue3页面滚动加载数据
  • 现代计算机图形学Games101入门笔记(十四)
  • 电磁兼容性优化设计在汽车电子芯片中的实践
  • 在 VSCode 中运行 Vue.js 项目
  • 动态范围调整(SEF算法实现)
  • 不清楚的点
  • Visual Studio旧版直链
  • “光伏+储能+智能调控”,CET中电技术分布式智能微网方案如何实现?
  • 从技术视角解构 Solana Meme 币生态
  • 工人日报:应对“职场肥胖”,健康与减重同受关注
  • 张巍任中共河南省委副书记
  • 上海老字号卖黄金,与动漫IP联名两周销售额近亿元
  • 租车订单时隔7年从花呗免密扣费?“GoFun出行”引质疑
  • 广西等地旱情缓解,水利部针对甘肃启动干旱防御Ⅳ级响应
  • 全国人大常委会今年将初次审议检察公益诉讼法