gRPC 和 RPC 区别

在本文中,我们探讨了 gRPC 和 RPC 协议之间的差异,解释了它们的独特功能和用例。

用 Apifox,节省研发团队的每一分钟

gRPC 和 RPC 区别

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

什么是 RPC?

什么是 RPC 呢?

RPC 的全称是 Remote Procedure Call Protocol,中文名是远程过程调用协议

其实你可以这么理解:

  • RPC 是一种协议
  • RPC 是一种 Client/Server 的传输模式

官方的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

RPC 分为三层:

  • 用户和服务器(负责处理业务逻辑,调用本地 Stub)
  • Stub 处理客户端和服务端约定好的语法、语义的封装和解封装
  • RPCRuntime 负责最底层的网络传输

我们看下面的图,是不是很像平时咱们开发中的场景:前端请求后端接口

RPC 解决了什么问题?

  • 协议约定问题: 比如 0 代表是,1 代表否,你怎么让前后端共同遵守这个约定
  • 传输协议问题: 在网络发生错误、重传、丢包或者有性能问题时怎么办
  • 服务发现问题: 如何知道服务端有哪些服务可以调用,从哪个端口访问?服务端可能实现多个远程调用,在不同的进程上,随机监听端口,客户端要怎么才能知道这些端口呢?

RPC 的应用场景

一般用在这两个场景:

  • 实时聊天
  • 微服务系统

RPC 的传输过程是怎么样的?

  • 调用者(客户端 Client)以本地调用的方式发起调用;
  • Client stub(客户端存根)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体;
  • Client stub将消息体通过网络发送给服务端;
  • Server stub(服务端存根)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数;
  • Server stub 根据方法名和参数进行本地调用;
  • 被调用者(Server)本地调用执行后将结果返回给 server stub;
  • Server stub 将返回值打包编码成消息,并通过网络发送给客户端;
  • Client stub 收到消息后,进行拆包解码,返回给 Client;
  • Client 得到本次 RPC 调用的最终结果。

RPC HTTP 的对比

其实 RPC 跟 HTTP 不是一个层级的东西,RPC 应该是跟 HTTP + RestFul 进行对比,才比较合适~

传输协议

RPC 可以基于 HTTP 或者 TCP 进行传输,而 HTTP 只能基于 HTTP

传输效率

RPC 包含了 HTTP2 的优点,所以他的传输效率比 HTTP1 更高~

性能消耗

RPC 包含 HTTP2 的优点,比如二进制传输、头部压缩等,所以性能消耗自然比 HTTP1 低~

负载均衡

RPC 基本都自带负载均衡策略,而 HTTP 需要配置 Nginx/HAProxy 来完成

服务治理

RPC 能做到自动通知,不影响上游,而 HTTP 需要事先通知,修改 Nginx/HAProxy 配置

什么是 gRPC

是什么

你可以理解为,gRPC 是基于 RPC 封装的一个开源框架,是基于 HTTP2 设计的~所以 gRPC 的优点自然也包含了HTTP2 的优点:

  • 数据传输二进制分帧
  • 多路复用
  • 服务端推送
  • 头部压缩

是怎么传输的?

传输图

从上图和文档中可以看出,用 gRPC 来进行远程调用服务,客户端( client ) 仅仅需要 gRPC Stub (为啥叫存根?) ,通过 Proto Request 向 gRPC Server 发起服务调用,然后 gRPC Server 通过 Proto Response(s) 将调用结果返回给调用的 client。

JSON-RPC 接口

JSON-RPC 是一种轻量级的 RPC (远程过程调用)协议,可以使用 HTTP 协议进行通信,并以 JSON 格式传输数据。Postman 是一个流行的 API 开发工具,可以轻松地使用它来测试和调用 JSON-RPC 接口。

使用 Postman 发送 JSON-RPC 接口

以下是使用 Postman 调用 JSON-RPC 接口的步骤:

  • 第一步:打开 Postman,创建一个新的 HTTP 请求
  • 第二步:在请求面板中,选择 HTTP 方法为 POST
  • 第三步:输入 JSON-RPC 接口的 URL 地址
  • 第四步:在 Body 中选择 raw - JSON,然后输入以下 JSON 格式的数据:
{
   "jsonrpc": "2.0",
   "method": {{要调用的方法名称}},
   "params": {{方法所需的参数}},
   "id": {{请求的唯一标识符}}
}
  • 第五步:单击 Send 按钮发送请求。如果一切正常,您将在响应面板中看到 JSON 格式的响应数据。
Postman

在这个例子中,我们调用名为 echo 的方法,并提供一个对象作为参数。请求的唯一标识符为 123。

使用 Apifox 调试 gRPC

Apifox 支持基于 .proto 文件的 gRPC 调试,包括一元调用和流式调用。在创建项目时「选择 gRPC 项目」-->「导入 .proto 文件」,无需写代码即可直接调用 gRPC 接口。

创建 gRPC

在调试 gRPC 接口之前,也需要先导入作为 API 定义的 .proto 文件。如果一个 .proto 文件依赖于其他 .proto 文件,那么需要手动添加依赖关系目录。

添加 Proto

一元调用

只需要在地址栏填写 URL 后点击「调用」按钮,即可发起一元调用。

一元调用

流式调用

流式调用包含服务端流、客户端流、双向流

在发起调用之后,你可以在 Message 标签下撰写消息并发送。Apifox 提供了一个时间线视图,按照时间顺序集中展示调用状态、发送的消息、收到的消息。点击消息之后,可以非常方便地查看消息的详情。

流式调用

关于 Apifox

Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。 简化了你的 API 工作流,并确保了前端、后端和测试人员之间的高效协作。

Apifox 接口调试工具

知识扩展: