gRPC 是一项进程间通信技术,可以用来连接、调用、操作和调试分布式异构应用程序。就像调用本地函数一样,整个过程操作起来很简单。

在每个 gRPC 发布版本中,字母 g 的含义都不同。比如 1.1 版本的 g 代表 good(优秀),1.2版本的 g 代表 green(绿色)。——译者注

在开发 gRPC 应用程序时,先要定义服务接口,其中应包含如下信息:消费者消费服务的方式、消费者能够远程调用的方法以及调用这些方法所使用的参数和消息格式等。在服务定义中所使用的语言叫作接口定义语言(interface definition language,IDL)。

借助服务定义,可以生成服务器端代码,也就是服务器端骨架 ,它通过提供低层级的通信抽象简化了服务器端的逻辑。同时,还可以生成客户端代码,也就是客户端存根,它使用抽象简化了客户端的通信,为不同的编程语言隐藏了低层级的通信。就像调用本地函数那样,客户端能够远程调用我们在服务接口定义中所指定的方法。底层的 gRPC 框架处理所有的复杂工作,通常包括确保严格的服务契约、数据序列化、网络通信、认证、访问控制、可观察性等。

这里的“骨架”和“存根”都是代理。服务器端代理叫作“骨架”(skeleton),客户端代理叫作“存根”(stub)。——编者注

为了理解 gRPC 的基本概念,我们来看一个使用 gRPC 实现微服务的实际场景。假设我们正在构建一个在线零售应用程序,该应用程序由多个微服务组成。如图 1-1 所示,假设我们要构建一个微服务来展现在线零售应用程序中可售商品的详情(第 2 章会从零开始构建该场景)。将ProductInfo 服务建模为 gRPC 服务,通过网络对外暴露。

图 1-1:基于 gRPC 的微服务及其消费者

服务定义是在 ProductInfo.proto 文件中声明的,服务器端和客户端都会使用该文件来生成代码。这里假设 ProductInfo 服务使用 Go 语言来实现,消费者使用 Java 语言来实现,两者之间的通信则通过 HTTP/2 来进行。接下来深入了解 gRPC 通信的细节。构建 gRPC 服务的第一步是创建服务接口定义,其中包括该服务暴露的方法及其输入参数和返回类型。下面介绍服务定义的细节。

文档更新时间: 2023-09-02 03:19   作者:Minho