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 在流式传输方面的支持相对较弱。
相关推荐
handsomestWei16 小时前
Docker引擎API接入配置
运维·http·docker·容器·api
Wenweno0o17 小时前
Eino - 错误处理与稳定性
golang·智能体·eino
王码码203518 小时前
Go语言中的Elasticsearch操作:olivere实战
后端·golang·go·接口
Tomhex18 小时前
Go语言import用法详解
golang·go
Tomhex20 小时前
Golang空白导入的真正用途
golang·go
Wenweno0o1 天前
Eino - 从0到1跑通大模型调用
golang·大模型·智能体·eino
不会写DN1 天前
IPv4 与 IPv6 的核心区别
计算机网络·面试·golang
Flandern11111 天前
Go程序员学习AI大模型项目实战02:给 AI 装上“大脑”:从配置解包到流式生成的深度拆解
人工智能·后端·python·学习·golang
大數據精準工單獲取1 天前
【数据抓取】 编写爬虫基本请求:使用爬虫框架发送 HTTP 请求,获取网页内容
爬虫·网络协议·http
时空自由民.1 天前
HTTP协议和MQTT协议区别
网络·网络协议·http