【GRPC 和 HTTP】设计目标和底层构建

news/2026/1/18 19:06:57/文章来源:https://www.cnblogs.com/gccbuaa/p/19498957

文章目录

      • 一、核心维度对比表
      • 二、关键差异拆解
        • 1. 序列化:JSON vs Protobuf(性能核心差距)
        • 2. 传输协议:HTTP/1.1 vs HTTP/2(并发能力差距)
        • 3. 通信模式:单向请求 vs 多模式流式
        • 4. 接口契约:松散 vs 强约束(开发效率差距)
      • 三、选型建议
      • 总结

若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com

GRPC 和 HTTP(通常指 HTTP/1.1 及 RESTful 风格)的核心差异源于设计目标和底层完成:HTTP 是通用的应用层协议,而 GRPC 是基于 HTTP/2 的高性能 RPC 框架(本质是“协议+工具链”的组合)。

在这里插入图片描述

一、核心维度对比表

对比维度HTTP(RESTful 为主,基于 HTTP/1.1)GRPC(基于 HTTP/2 + Protobuf)
本质定位通用应用层协议(无绑定框架)高性能 RPC 框架(协议+代码生成+工具链)
传输协议依赖支持 HTTP/1.1、HTTP/2、HTTP/3强制依赖 HTTP/2
序列化方式主流 JSON(文本格式),支持 XML/FormData强制 Protobuf(二进制格式)
通信模式以“请求-响应”为主(单向),支持 WebSocket 流式支持 4 种模式:Unary(请求-响应)、服务端流式、客户端流式、双向流式
接口契约松散约定(靠文档/Swagger 维护)强契约(通过 .proto 文件定义接口、参数、返回值)
代码生成无原生支持(需第三方应用如 OpenAPI Generator)原生支持跨语言代码生成(客户端/服务端 stub)
性能表现中等(JSON 解析慢、HTTP/1.1 队头阻塞)高性能(二进制序列化+HTTP/2 多路复用,低延迟、高吞吐量)
跨语言支持天然支持(基于 HTTP 协议),但接口一致性需手动保障原生跨语言(.proto 文件统一约束,生成对应语言代码)
可读性&调试高(JSON 文本可直接阅读,curl/Postman 调试便捷)低(二进制数据需解码,需专用工具如 grpcurl)
适用场景对外 API(浏览器/第三方集成)、简单 CRUD、需可读性的场景内部微服务通信、跨语言调用、实时流式传输(如聊天/监控)、高性能需求场景

二、关键差异拆解

1. 序列化:JSON vs Protobuf(性能核心差距)
  • HTTP(JSON):文本格式,人类可读,调试方便,但解析慢、数据体积大(比如一个对象的 JSON 表示比 Protobuf 大 30%-50%),不适合高并发场景。
  • GRPC(Protobuf):二进制格式,需通过 .proto 文件定义数据结构(如 message User { int32 id = 1; string name = 2; }),序列化/反序列化速度是 JSON 的 5-10 倍,数据体积小,带宽占用低。
  • 核心优势:Protobuf 是“强类型”的,编译时会校验字段类型,避免 JSON 中“字段类型不匹配”“缺字段”等运行时错误。
2. 传输协议:HTTP/1.1 vs HTTP/2(并发能力差距)
3. 通信模式:单向请求 vs 多模式流式
  • HTTP(REST):核心是“请求-响应”(比如 GET /user/1 → 返回用户数据),仅能通过 WebSocket 达成有限流式(需额外适配),不支持双向同时传输。
  • GRPC:原生支持 4 种通信模式,覆盖更多场景:
    • Unary:和 HTTP 一致(请求→响应);
    • 服务端流式:客户端发 1 个请求,服务端返回多个连续响应(如实时日志推送);
    • 客户端流式:客户端发多个连续请求,服务端统一返回响应(如批量上传文件);
    • 双向流式:客户端和服务端同时双向传输(如即时聊天、视频通话信令)。
4. 接口契约:松散 vs 强约束(创建效率差距)

三、选型建议

场景优先选 HTTP(REST)优先选 GRPC
对外提供 API(浏览器/第三方调用)✅ (可读性强、调试方便、生态成熟)❌ (二进制不可读,第三方适配成本高)
内部微服务通信❌ (性能不足,契约易乱)✅ (高性能、强契约、跨语言友好)
实时流式传输(日志/聊天/监控)❌ (需额外适配 WebSocket,作用有限)✅ (原生协助多模式流式,低延迟)
跨语言调用(如 Go→Java→Python)❌ (需手动保障接口一致性)✅ (.proto 统一约束,自动生成代码)
简单 CRUD 接口(如管理后台)✅ (开发快,curl/Postman 调试便捷)❌ (配置成本高,没必要)

总结

两者并非对立:很多系统会“对外用 HTTP REST,对内用 GRPC”,兼顾易用性和性能。

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

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

相关文章

小白也能学会!AI大模型完整学习路线图,建议收藏_自学AI大模型学习路线推荐

本文提供了AI大模型的完整自学路线,涵盖数学与编程基础、机器学习入门、深度学习、大模型探索、进阶应用及社区资源六个阶段。从线性代数、Python等基础知识开始,到Transformer架构理解和实战项目实践,最后强化学习和社区参与。文章还推荐了各…

使用 Python 测试 Mermaid 与 Graphviz 图表生成(支持中文)

在数据分析、系统建模或关系可视化场景中,我们常常需要将实体关系以图表形式展示。Python 社区中有两种流行的方案: Mermaid:基于文本生成流程图、时序图、关系图,常用于文档和网页。Graphviz:功能强大的图形可视化工…

完整教程:Python3:Fifteenth 类型注解(Type Hints)

完整教程:Python3:Fifteenth 类型注解(Type Hints)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

从零开始成为AI大模型产品经理:这份超全指南,建议立即收藏_AI模型产品经理学习路线

文章提供AI大模型产品经理七阶段学习路线:从计算机基础、编程语言、数学知识到机器学习、深度学习、NLP等核心技术,再到产品思维培养、数据驱动决策、技术选型与API集成,最后通过实战演练和软实力提升,帮助零基础人士系统掌握&quo…

告别代码!我用Trae氛围编程的方式,开发了一款公众号文章同步插件!

大家好,我是编程乐趣。我利用周末时间,没有写任何一行代码,用Trae氛围编程的方式,完成一个浏览器插件的开发。最大的感受是,未来编程方式,对阅读代码、代码语法、编程语言等能力变得不再重要,懂得与AI对方才是最…

AI大模型学习完整路线图:AI大模型学习全攻略,程序员必备的五阶段学习路线图

文章提供AI大模型学习的五阶段路线图:基础准备、机器学习核心、深度学习核心、专精方向和实践进阶。采用三步走战略:打好基础、深入核心、专精方向,强调实践与理论结合,并提供了具体学习资源和时间规划建议,帮助小白或…

TDengine C# 语言连接器进阶指南

本指南面向已完成“能连通、能读写”的开发者,补齐高级用法与易踩坑点。 1. 连接参数进阶与调优 WebSocket 连接增强参数 WebSocket 连接除基础参数外,还支持: connTimeout:连接超时(默认 1 分钟)readT…

Node.js和包管理工具

Node.js 和 npm 是现代 JavaScript 开发中两个密切相关但功能不同的工具。下面分别解释它们的定义以及它们之间的关系。 一、什么是 Node.js? Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的运行时环境(Runtime Environment)&#xff…

人工智能之数据分析 Pandas:第二章 Series - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

为什么大多数 LLM 在金融和医疗中会“系统性偏保守”

一个常见误解很多人认为:“模型在高风险场景中偏保守,是因为安全对齐或合规要求。”这只是表象。真正原因:执行态被风险信号劫持在缺乏执行态约束的系统中:风险词情绪词责任暗示会直接触发模型进入:防御 / 回避 / 模糊…

WSL2 Win11 Ubuntu22.04 D盘安装 参考的教程记录

主要参考这个教程下载:https://kwanwaipang.github.io/WSL/ 怎样移动到D盘:https://zhuanlan.zhihu.com/p/23313784318

企业内部模型上线前,必须补上的一项测试:执行态稳定性

一个现实问题很多企业在模型上线前,会测试:准确率延迟成本幻觉率但几乎不测试:执行态是否稳定为什么这是一个严重缺口因为事故往往不是:完全错误而是:执行态不一致上线前最小 Gate 清单(简化版)…

通用 LLM 执行态稳定性标准(Draft v1.0)Universal LLM Execution State Stability Standard · U-ESS v1.0 发布

好,这一步我会完全按 CSDN 的“工程师可读 不被当成情绪输出 不显得在挑事”的发布逻辑来做。 下面是 可直接发布到 CSDN 的成稿版本,不是草稿、不是概要,你复制即可发。通用 LLM 执行态稳定性标准(Draft v1.0)——高…

调色板示例颜色数据获取-基于 Flutter × OpenHarmony

文章目录调色板示例颜色数据获取-基于 Flutter OpenHarmony前言背景Flutter Harmony OpenHarmony 跨端开发介绍开发核心代码代码解析心得总结调色板示例颜色数据获取-基于 Flutter OpenHarmony 前言 在移动端开发中,颜色调色板是 UI 设计和视觉一致性的核心元素…

【多智能体控制】多智能体点对点转移的分布式模型预测控制【含Matlab源码 14976期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

UE 增强输入(2)

(10) (11) 谢谢

dify制作的工作流如何通过API调用

大家在基于dify开发Workflow和Agent,一般都是通过dify提供app功能直接提供使用,或者通过嵌入到其他页面中使用,但是还有一种情况,特别是针对各种数据处理的Workflow,需要通过程序调用,返回数据供其他app使用。该如何做呢?本文主要基于dify,将通过工作流发布的API,通过…

(5-2)UCLASS(..) 的参数

(12) (13) 谢谢

远程Ubantu Mysql安装 + 本地Windows Navicat连接

远程Ubantu Mysql安装 + 本地Windows Navicat连接安装过程 Mysql安装配置过程Mysql在ubantu安装直接使用apt命令安装sudo apt-get install mysql-server mysql-client -y启动mysql服务sudo systemctl start mysql使用r…

CCF T3

CCF T3 没什么太特殊的,注意到全局旋转操作复杂度太高,考虑打个懒标记进行局部旋转。(别忘了对翻转标记进行旋转,因为这么一个唐诗问题调了2h我也是神人了) #include<bits/stdc++.h> using namespace std; …