gRPC - 简介



在深入了解 gRPC 之前,让我们简要了解一下远程过程调用 (RPC),这是 gRPC 的工作原理。

什么是远程过程调用?

远程过程调用看起来像是普通的/本地函数调用,但不同之处在于远程函数调用的执行通常发生在不同的机器上。但是,对于编写代码的开发者来说,函数调用和远程调用之间的区别很小。这些调用通常遵循客户端-服务器模型,其中执行调用的机器充当服务器。

为什么我们需要远程过程调用?

远程过程调用提供了一种在另一台机器上执行代码的方法。在大型复杂的产品中,单台机器无法承载产品正常运行所需的所有代码,因此远程过程调用至关重要。

在微服务架构中,应用程序被分解成小的服务,这些服务通过消息队列和 API 相互通信。所有这些通信都通过网络进行,不同的机器/节点根据它们承载的服务提供不同的功能。因此,在分布式环境中工作时,创建远程过程调用就成为一个关键方面。

为什么选择 gRPC?

Google 远程过程调用 (gRPC) 提供了一个执行远程过程调用的框架。但是,还有一些其他的库和机制可以在远程机器上执行代码。那么,是什么让 gRPC 与众不同呢?让我们来看看。

  • 语言无关性 - gRPC 在内部使用 Google Protocol Buffer。因此,可以使用多种语言,例如 Java、Python、Go、Dart 等。Java 客户端可以进行过程调用,而使用 Python 的服务器可以做出响应,从而有效地实现语言无关性。

  • 高效的数据压缩 - 在微服务环境中,由于多个通信通过网络进行,因此我们发送的数据越简洁越好。我们需要避免任何冗余数据,以确保数据的快速传输。由于 gRPC 在内部使用 Google Protocol Buffer,因此它具有此优势。

  • 高效的序列化和反序列化 - 在微服务环境中,由于多个通信通过网络进行,因此我们尽可能快速地序列化和反序列化数据至关重要。由于 gRPC 在内部使用 Google Protocol Buffer,因此它确保了数据的快速序列化和反序列化。

  • 简单易用 - gRPC 已经拥有一个库和插件,可以自动生成过程代码(我们将在接下来的章节中看到)。对于简单的用例,它可以像本地函数调用一样使用。

gRPC 与使用 JSON 的 REST 的比较

让我们看看其他通过网络传输数据的方式与 Protobuf 相比如何。

特性 gRPC 使用 JSON/XML 的 HTTP
语言无关性
HTTP 版本 HTTP/2 HTTP 1.1
指定域模式 .proto 文件(Google Protocol Buffer)
序列化数据大小 最小 高(XML 更高)
人类可读 否,因为它使用单独的编码模式 是,因为它使用基于文本的格式
序列化速度 最快 较慢(XML 最慢)
数据类型支持 更丰富。支持复杂数据类型,如 Any、oneof 等。 支持基本数据类型
支持演进模式
广告