rpc和http的区别,为啥golang使用grpc 不使用http?

news/2025/2/22 6:18:42

RPC 和 HTTP 的区别

概念层面
  • RPC(Remote Procedure Call,远程过程调用):是一种允许程序调用另一个地址空间(通常是共享网络上的另一台机器)中的过程或函数的技术,就像调用本地函数一样自然。它屏蔽了底层网络通信的细节,使得开发人员可以更专注于业务逻辑。
  • HTTP(Hypertext Transfer Protocol,超文本传输协议):是用于传输超文本的协议,主要用于在客户端和服务器之间传输网页、图片等资源。它是一种应用层协议,基于请求 - 响应模型。
  • 数据格式
    • RPC:通常使用自定义的二进制协议或一些高效的序列化协议(如 Protobuf、Thrift 等),这些协议可以将数据进行高效的编码和解码,减少数据传输量,提高传输效率。
    • HTTP:常见的数据格式有 JSON、XML 等文本格式,相对二进制格式来说,文本格式的数据传输量较大,解析和序列化的效率也相对较低。
性能层面
  • 通信效率
    • RPC:由于使用了高效的序列化协议和自定义的传输协议,在数据传输和处理上通常具有更高的效率,尤其在内部系统之间的通信中,能够更快地完成数据交互。
    • HTTP:由于其通用性和文本格式的特点,在传输效率上相对较低,尤其是在处理大量数据时,会消耗更多的带宽和处理时间。
  • 连接方式
    • RPC:可以根据具体需求选择长连接或短连接,长连接可以减少连接建立和断开的开销,提高通信效率。
    • HTTP:早期的 HTTP 1.0 主要使用短连接,每次请求都需要建立和断开连接,开销较大;HTTP 1.1 支持持久连接,但在高并发场景下,连接管理仍然相对复杂。

Go 语言使用 gRPC 而非 HTTP 的原因

高性能
  • 序列化效率高:gRPC 使用 Protocol Buffers 作为默认的序列化协议,它是一种高效的二进制序列化协议,能够将数据压缩成很小的体积,并且在编码和解码过程中具有很高的性能。相比之下,HTTP 常用的 JSON 格式在数据量较大时,传输和解析的效率较低。
  • 传输效率高:gRPC 基于 HTTP/2 协议,HTTP/2 具有二进制分帧、多路复用、头部压缩等特性,能够更高效地利用网络带宽,减少延迟,提高通信效率。
强类型和接口定义
  • 明确的接口定义:gRPC 使用 Protocol Buffers 的 .proto 文件来定义服务接口和消息结构,这种方式提供了明确的接口规范,使得服务的提供者和调用者之间的交互更加清晰和可维护。
  • 类型安全:在编译时,gRPC 会根据 .proto 文件生成对应的 Go 代码,保证了类型的安全性,减少了因类型不匹配而导致的错误。
多语言支持
  • 跨语言调用:gRPC 支持多种编程语言,包括 Go、Java、Python 等。这使得不同语言编写的服务之间可以方便地进行交互,在构建分布式系统时具有很大的优势。
流式传输
  • 双向流式通信:gRPC 支持客户端和服务器之间的双向流式通信,这在需要实时数据传输或大数据量传输的场景中非常有用,例如实时监控、文件传输等。而 HTTP 在流式传输方面的支持相对较弱。

http://www.niftyadmin.cn/n/5861769.html

相关文章

【Pandas】pandas Series sample

Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…

MySQL 插入更新语句(insert…on duplicate key update语句 )

我们日常在使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,当遇到这种情况时,MySQL默认的反应是报错并停止执行后续的语句,为了避免这种情况,你有3种选择: 使用insert ignore…

【中间件开发】kafka使用场景与设计原理

文章目录 前言一、MessageQueue1.1 定义1.2 使用消息队列的场景1.2.1 异步处理1.2.2 流量控制1.2.3 服务解耦1.2.4 发布订阅1.2.5 高并发缓冲1.3 基本概念和原理1.3.1 点对点消息队列模型 -- 线程池1.3.2 发布订阅消息模型-Topic --上课通知1.3.3 消息的ACK确认机制 二、Kafka2…

卷积与动态特征选择:重塑YOLOv8的多尺度目标检测能力

文章目录 1. YOLOv8的网络结构概述2. 添加注意力机制2.1 为什么添加注意力机制?2.2 如何将注意力机制集成到YOLOv8中?2.3 效果分析 3. C2f模块的集成3.1 C2f模块简介3.2 如何在YOLOv8中集成C2f模块?3.3 效果分析 4. 卷积操作的优化4.1 卷积操…

ABAP数据库表的增改查

数据表的增改查 接到一个任务,是对数据库表的增改查,增和查现在已经比较熟练了,关键是改,还有一个要求是要求系统能自动更新修改人和修改日期以及时间。 找到数据库表,新增这三个字段 这里另提一句,一般数…

【C/C++】合并两个有序链表 (leetcode T21)

核心考点预览:链表 (双指针) 技巧:虚拟头结点 题目描述: 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入输出示例1l1 [1,2,4], l2 [1…

3D全景沉浸式看车:虚拟现实重构汽车消费新体验

在传统的汽车消费模式中,消费者往往需要亲自前往展厅,花费大量时间和精力去挑选心仪的车型。这一过程不仅成本高,而且信息的透明度也常常受到质疑。面对琳琅满目的车型,消费者往往难以在短时间内做出决策,而车企则面临…

windows上vscode cmake工程搭建

安装vscode插件: 1.按装fastc(主要是安装MinGW\mingw64比较方便) 2.安装C,cmake,cmake tools插件 3.准备工作完成之后,按F1,选择cmake:Quick Start就可以创建一个cmake工程。 4.设置Cmake: G…