【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/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

相关推荐
黑十44 分钟前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
我就是全世界2 小时前
OpenCode Go 套餐划算吗:先看你用哪个模型
开发语言·后端·golang
updayday8543 小时前
客户附件不该发往旧邮箱,如何在发送前拦截 - Ping64 邮件安全管控
大数据·网络·数据库·安全·智能路由器
其实防守也摸鱼3 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
小茬粥3 小时前
QEMU 宿主机网卡实例发现与采集脚本(标准 Linux / Proxmox VE 适配版)COLT_CMDB_QEMU_IFACE.sh
网络
见合八方4 小时前
借助半导体光放大器实现功率预算超31dB的112.5Gbit/s长距无源光网络
网络·5g·soa·光通信·激光雷达·半导体光放大器
夜雪一千5 小时前
锐捷天蝎路由器WiFi优化设置教程:解决邻居WiFi干扰、远距离卡顿
网络·智能路由器
2301_780789665 小时前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
小杨互联网5 小时前
Go 现代 CLI 工具离线镜像合集
开发语言·后端·golang·开源·go·命令行
lazy H5 小时前
【计算机网络】第 15 篇:Java BIO、NIO 与高并发网络通信——从 Socket 理解 I/O 模型
网络·后端·tcp/ip·计算机网络·nio·408