gRPC 问答

以下是一些常见问题。希望您在这里找到答案:-)

什么是 gRPC??

gRPC 是一个现代的开源远程过程调用(RPC)框架,可以在任何地方运行。它使 client 和 server 应用程序能够透明地通信,并使构建连接系统变得更容易。
阅读更长的 动机和设计原则 文章,了解我们创建gRPC的背景。

gRPC代表什么?

gRPC Remote Procedure Calls, of course!

gRPC 远程过程调用!

我为什么要使用 gRPC?

主要使用场景:

  • 低延迟、高度可扩展的分布式系统。
  • 开发与云 server 通信的移动客户端。
  • 设计一个新的协议,需要准确、高效和语言无关。
  • 分层设计,支持扩展,如身份验证、负载平衡、日志记录和监控等。

谁在用这个,为什么?

gRPC 是一个 云原生计算基金会 (CNCF)项目。
长期以来,谷歌一直在 gRPC 中使用许多底层技术和概念。当前的实现正在 Google 的一些云产品和面向外部的 API 中使用。它也被 Square, Netflix, CoreOS, Docker, CockroachDB, Cisco, Juniper Networks 和许多其他组织和个人使用。

支持哪些编程语言?

请参阅 官方支持的语言和平台

如何开始使用gRPC?

您可以按照 此处 的说明开始安装 gRPC。或者转到 gRPC GitHub org page,选择您感兴趣的运行时或语言,并按照自述说明进行操作。

gRPC使用哪种许可证?

所有实现都在 Apache 2.0 下获得许可。

我该如何贡献?

Contributors 非常受欢迎,存储库托管在 GitHub 上。我们期待社区反馈、添加和错误。个人贡献者和公司贡献者都需要签署我们的 CLA。如果您有关于 gRPC 项目的想法,请阅读指南并在 此处.提交。我们在 GitHub 上的 gRPC Ecosystem 生态系统组织下有越来越多的项目。

文档在哪里?

查看 grpc.io 上的 文档

路线图是什么?

gRPC 项目有一个 RFC 流程,通过该流程设计并批准实施新功能。它们在该 存储库中被跟踪。

gRPC 版本支持多长时间?

gRPC 项目不进行 LTS 发布。鉴于上述滚动发布模型,我们支持当前、最新版本和之前的版本。这里的支持意味着错误修复和安全修复。

gRPC 版本控制政策是什么?

请参阅此处的 gRPC 版本控制策略。

最新的 gRPC 版本是什么?

最新版本标签为v1.46.3。

gRPC 何时发布?

gRPC 项目在主分支尖端始终稳定的模型中工作。该项目(跨各种运行时)的目标是在尽力而为的基础上每6周发布一次检查点版本。请参阅此处的发布时间表。

如何报告 gRPC 中的安全漏洞?

要报告 gRPC 中的安全漏洞,请遵循 此处记录的流程。

我可以在浏览器中使用它吗?

gRPC-Web 项目通常可用。

我可以用我最喜欢的数据格式(JSON、Protobuf、Thrift、XML)使用gRPC吗?

对 gRPC 被设计为可扩展的,以支持多种内容类型。初始版本包含对 Protobuf 的支持,以及对其他内容类型(如FlatBuffers 和 Thrift)的外部支持,其成熟度不同。

我可以在 service mesh 中使用 gRPC 吗?

对 gRPC 应用程序可以像任何其他应用程序一样部署在 service mesh 中。gRPC 还支持 xDS APIs ,它支持在 service mesh 中部署 gRPC 应用程序,而无需 sidecar 代理。 此处列出了 gRPC 支持的 proxyless service mesh 功能。

gRPC 如何帮助移动应用程序开发?

gRPC 和 Protobuf 提供了一种简单的方法来精确定义服务,并为 iOS、Android 和提供后端的 server 自动生成可靠的客户端库。客户端可以利用先进的流和连接功能,这有助于节省带宽,通过更少的 TCP 连接完成更多工作,并节省 CPU 使用和电池寿命。

为什么 gRPC 优于 HTTP/2 上的任何 binary blob?

这在很大程度上是 gRPC 正在进行的工作。然而,gRPC 也是一组库,可以跨平台一致地提供普通 HTTP 库通常不具备的更高级别功能。这些特征的示例包括:

  • 与应用层的 flow-control
  • call-cancellation 取消
  • load balancing & failover

为什么 gRPC 比 REST 更好/更差?

gRPC 在很大程度上遵循 HTTP/2 上的 HTTP 语义,但我们明确允许全双工流。我们与典型的 REST 约定不同,因为我们在调用调度期间出于性能原因使用静态路径,因为从路径、查询参数和有效负载体解析调用参数会增加延迟和复杂性。我们还形式化了一组错误,我们认为这些错误比 HTTP status code 更直接适用于 API 用例。

gRPC 怎么发音?

Jee-Arr-Pee-See.