RSS

gRPC 语言栈可视化

以下是 gRPC 栈的高级概述。gRPC 支持的每种默认10种语言都具有多层,允许您自定义应用程序中所需的各个组件。

gRPC 中有三个主要栈:C-core、Go 和 Java。大多数语言都是基于 C 的 gRPC 核心库的薄封装

封装语言

gRPC Core Stack

例如,Python 应用程序会调用生成的 Python stub。这些调用会通过拦截器,进入封装库,在那里调用被转换为 C 调用。gRPC C-core 会将 RPC 编码为 HTTP/2,可选地使用 TLS 加密数据,然后将其写入网络。

gRPC 的优点之一是您可以替换这些组件。例如,您可以改用 C++,并使用进程内(In-Process)传输。这将使您无需一直下到操作系统网络层。另一个例子是尝试 QUIC 协议,它允许您快速打开新的连接。能够在各种基于环境的传输上运行,使得 gRPC 非常灵活。

对于每种封装语言,默认的 HTTP/2 实现都内置在 C-core 库中,因此无需包含外部实现。但是,正如您所见,可以自带实现(例如使用 Cronet,即 Chrome 网络库)。

Go

gRPC-Go 中,栈要简单得多,因为无需支持那么多配置。以下是 Go 栈的高级概述

gRPC Go Stack

这里的结构略有不同。由于只有一种语言,栈从顶层到底层的流程更线性。与封装语言不同,gRPC Go 可以使用自己的 HTTP/2 实现,也可以使用 Go 的 net/http 包。

Java

以下是 gRPC-Java 栈的高级概述

gRPC Java Stack

同样,结构略有不同。Java 支持 HTTP/2、QUIC 和进程内(In Process),类似于 C-core。但与 C-core 不同的是,应用程序通常可以绕过生成的 stub 和拦截器,直接与 Java 核心库通信。每种结构根据 gRPC 各语言实现的需要略有不同。此外,与封装语言不同,gRPC Java 将 HTTP/2 实现分离到可插拔库中(例如 Netty、OkHttp 或 Cronet)。