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 在流式传输方面的支持相对较弱。
相关推荐
豆浆whisky2 小时前
Go并发模式选择指南:找到最适合你项目的并发方案|Go语言进阶(19)
开发语言·后端·golang
百***480712 小时前
【Golang】slice切片
开发语言·算法·golang
q***925112 小时前
Windows上安装Go并配置环境变量(图文步骤)
开发语言·windows·golang
阿珊和她的猫13 小时前
HTTP 状态码 301 和 302 的区别与使用场景
网络·网络协议·http
6***941518 小时前
报错The default superclass, “jakarta.servlet.http.HttpServlet“(已经配置好tomcat)
http·servlet·tomcat
稚辉君.MCA_P8_Java1 天前
通义 Go 语言实现的插入排序(Insertion Sort)
数据结构·后端·算法·架构·golang
源代码•宸1 天前
GoLang写一个简单版生命游戏模拟器
经验分享·笔记·学习·游戏·golang
q***01771 天前
Linux 下安装 Golang环境
linux·运维·golang
稚辉君.MCA_P8_Java1 天前
Gemini永久会员 Go 实现动态规划
数据结构·后端·算法·golang·动态规划
记得记得就1511 天前
【Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装】
前端·nginx·http