【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCIe Switch 问题点

系列文章目录 文章目录 系列文章目录完善PCIe Retimer Overview Document OutlineSwitch 维度BroadComMicroChipAsmedia 祥硕Cyan其他 完善 Functional block diagram,功能框图Key Features and Benefits,主要功能和优点Fabric 链路Multi-root PCIe Re…

vue复杂数据类型多层嵌套的监听

vue复杂数据类型多层嵌套的监听 本来看前辈的做法是watch的嵌套,遇到这种复杂的数据结构还是不多,分享一下前辈的做法 let stopChildWatchList [] // 用于存放每个子监听器watch(() > data,(val) > {// 清除旧监听stopChildWatchList.forEach(…

来一个复古的技术FTP

背景 10年前的老代码,需要升级springboot框架,在升级过程中,测试业务流程里,有FTP的下载业务,不管测试环境如何测试,都没有成功,最后只能自己搭建一个FTP服务器,写一个ftp-demo来测试…

MyBatis-Flex配置Druid(德鲁伊数据库连接池):Spring Boot 3 集成 MyBatis-Flex 配置 Druid 连接池指南

Spring Boot 3 集成 MyBatis-Flex 配置 Druid 连接池指南 前言 本文详细讲解在 Spring Boot 3 项目中集成 MyBatis-Flex 框架后,如何正确配置 Druid 数据库连接池。针对开发者常见的配置缺失导致启动失败的场景,提供完整的解决方案和原理分析。 前置知识…

安全生产调度管理系统的核心功能模块

安全生产调度管理系统是运用现代信息技术构建的智能化管理平台,旨在实现生产安全风险的全面管控和应急资源的优化调度。该系统通过整合物联网、大数据、人工智能等前沿技术,建立起覆盖风险监测、预警预测、指挥调度、决策支持的全链条安全管理体系。 一…

桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题

目录 环境 现象 原理及解决办法 环境 PC:windows11 安卓:Android14 例程使用的是HID Keyboard,板子使用的是91870CQ的开发板,DB870CC1A 现象 连接安卓手机时并不会出现该现象,两个开发板都可以当做键盘给手机发按…

JavaScript - JavaScript 运算符之圆括号运算符与方括号运算符(圆括号运算符概述、圆括号运算符用法、方括号运算符概述、方括号运算符用法)

一、圆括号运算符概述 圆括号运算符(())主要用于函数调用、表达式分组、多种语法结构登 二、圆括号运算符用法 调用函数 function greet() {console.log("Hello!"); }greet();# 输出结果Hello!当箭头函数有多个参数或零个参数时需要括号 c…

AG-UI 协议:重构多模态交互,开启智能应用新纪元

一、协议诞生的时代背景:填补 AI 生态最后一块拼图 在人工智能技术飞速发展的今天,AI 代理(Agent)作为能够主动执行复杂任务的智能实体,正从实验室走向生产环境,重塑各个行业的工作流程。然而,…

嵌入式学习的第二十天-数据结构-调试+链表的一般操作

一、调试 1.一般调试 2.找段错误 二、链表的一般操作 1.单链表的修改 int ModifyLinkList(LinkList*ll,char*name,DATATYPE*data) {DATATYPE * tmp FindLinkList(ll, name);if(NULL tmp){return 1;}memcpy(tmp,data,sizeof(DATATYPE));return 0; } 2.单链表的销毁 int D…

如何同时管理不同平台的多个账号?

在当今数字营销、电商运营、跨境贸易盛行的时代,同时管理多个平台的账号几乎成了从业者的标配。无论是做社媒营销的广告主,还是操作亚马逊、eBay、Shopee 等平台的跨境卖家,多账号运营都是提升曝光、分散风险、扩大收益的重要方式。 然而&am…

STM32外设AD/DA-基础及CubeMX配置

STM32外设AD/DA-基础及CubeMX配置 一,什么是AD/DA二,基础概念1,模拟 vs 数字2,AD转换1,分辨率 (Resolution)2,参考电压 (Reference Voltage, Vref)3,采样率 (Sampling Rate) 3,DA转换…

【软考 霍夫曼编码的文档压缩比】

霍夫曼编码的文档压缩比计算基于字符频率的最优编码分配,以下是详细步骤及相关案例: 一、压缩比计算公式 [ \text{压缩比} \frac{\text{压缩前总比特数}}{\text{压缩后总比特数 编码表存储开销}} ] 通常以 比率(如 3:1) 或 百分…

关闭VSCode 自动更新

参考:关闭VSCode 自动更新_vscode关闭自动更新-CSDN博客 vscode的设置 Update: Mode Update: Enable Windows Background Updates Extensions: Auto Check Updates Extensions: Auto Update

Flask框架搭建

1、安装Flask 打开终端运行以下命令: pip install Flask 2、创建项目目录 在Windows上: venv\Scripts\activate 执行 3、创建 app.py 文件 可以在windows终端上创建app.py文件 (1)终端中创建 使用echo命令 echo "fr…

5G-A和未来6G技术下的操作系统与移动设备变革:云端化与轻量化的发展趋势

目录 5G技术带来的革命性变革 云端化操作系统的实现路径 完全云端化模式 过渡性解决方案 未来操作系统的发展方向 功能架构演进 安全机制强化 移动设备的形态变革 终端设备轻量化 物联网设备简化 实施挑战与应对策略 技术挑战 商业模式创新 总结与展望 5G技术作为…

【漫话机器学习系列】261.工具变量(Instrumental Variables)

工具变量(Instrumental Variables)通俗图解:破解内生性困境的利器 在数据建模与因果推断过程中,我们经常遇到一个棘手问题:内生性(Endogeneity)。它会导致模型估计产生偏差,进而误导…

CSS:颜色的三种表示方式

文章目录 一、rgb和rgba方式二、HEX和HEXA方式(推荐)三、hsl和hsla方式四、颜色名方式 一、rgb和rgba方式 10进制表示方法 二、HEX和HEXA方式(推荐) 就是16进制表示法 三、hsl和hsla方式 语法:hsl(hue, satura…

支付宝授权登录

支付宝授权登录 一、场景 支付宝小程序登录,获取用户userId 二、注册支付宝开发者账号 1、支付宝开放平台 2、点击右上角–控制台,创建小程序 3、按照步骤完善信息,生成密钥时会用到的工具 4、生成的密钥,要保管好&#xff…

涂色不踩雷:如何优雅解决 LeetCode 栅栏涂色问题

文章目录 摘要描述例子: 题解答案(Swift)题解代码分析动态规划核心思路初始条件 示例测试及结果示例 1:示例 2:示例 3: 时间复杂度空间复杂度总结实际场景联系 摘要 在用户体验和界面设计中,颜…

GEE计算 RSEI(遥感生态指数)

🛰️ 什么是 RSEI?为什么要用它评估生态环境? RSEI(遥感生态指数,Remote Sensing Ecological Index) 是一种通过遥感数据计算得到的、综合反映区域生态环境质量的指标体系。 它的设计初衷是用最少的变量&…