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

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 在流式传输方面的支持相对较弱。
相关推荐
FfHUCisI2 小时前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
我不会起名字3223 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
susplus3 小时前
【HTTP协议】HTTP介绍及基础【C语言爬虫实现】
c语言·爬虫·http·万维网
gsls2008084 小时前
告别 Vault 的复杂度:用 Go 标准库给 Windows 凭据管理器装上 MCP
windows·golang·mcp
xieliyu.4 小时前
计算机网络:Fiddler 抓包工具使用教程 + HTTP 协议报文格式详解
java·笔记·计算机网络·测试工具·http·java-ee·fiddler
程序员夏洛4 小时前
HTTP 2.0 和 3.0 有什么区别?
网络·网络协议·http
名字还没想好☜5 小时前
Go 时间格式化为什么用 2006-01-02:time.Format/Parse 的参考时间、时区与解析踩坑
开发语言·后端·golang·go
FfHUCisI18 小时前
Golang Map 哈希表实现
golang·哈希算法·散列表
驭渊的小故事19 小时前
网络原理04(http协议详细解析3)(2000详细解析HTTPS的工作原理)
网络·网络协议·http
源代码•宸19 小时前
前置准备:定时微服务背景和现状
开发语言·经验分享·后端·微服务·云原生·架构·golang