关于 gRPC

谁在使用 gRPC 以及原因

gRPC 是一个现代化的开源高性能远程过程调用(RPC)框架,可以在任何环境下运行。它可以高效地连接数据中心内部和跨数据中心的服务,并对负载均衡、跟踪、健康检查和身份验证提供插件式支持。它同样适用于分布式计算的“最后一英里”,将设备、移动应用和浏览器与后端服务连接起来。

主要使用场景

  • 在微服务架构中高效连接各种编程语言编写的服务
  • 将移动设备、浏览器客户端连接到后端服务
  • 生成高效的客户端库

核心功能亮点

  • 支持 11 种语言的惯用客户端库
  • 传输效率高,且拥有简单的服务定义框架
  • 基于 HTTP/2 传输的双向流式传输
  • 可插拔的身份验证、跟踪、负载均衡和健康检查

谁在使用 gRPC 以及原因?

许多公司已经在其环境中使用 gRPC 来连接多个服务。使用案例从连接少量服务到连接跨本地或云环境中各种语言的数百个服务不等。以下是部分早期采用者的详细介绍和感言。

来看看大家是怎么说的。

在 Square,我们一直与 Google 合作,以便我们能够将所有自定义 RPC 解决方案的使用迁移到 gRPC。我们决定转向 gRPC,是因为它对多平台的开放支持、已证实的协议性能,以及针对我们网络进行定制和调整的能力。Square 的开发人员期待能够利用流式 API 进行开发,并计划在未来将 gRPC 推向网络边缘,以实现与移动客户端和第三方 API 的集成。

在我们最初使用 gRPC 的过程中,我们能够轻松地对其进行扩展,使其融入我们已有的生态系统。此外,我们通过 Pull Request 以及与管理该项目的 Google 团队互动,成功地对 gRPC 进行了直接改进。我们预期,采用 gRPC 将显著提升开发效率,并支持使用非 JVM 语言进行开发。

我们从自研 RPC 系统到 gRPC 的切换非常顺畅。我们很快利用了流级别的流量控制,实现了对大体积 RPC 和小体积 RPC 在同一连接上的更好调度。

凭借对高性能双向流、基于 TLS 的安全性和多种编程语言的支持,gRPC 是模型驱动配置和遥测的理想统一传输协议。

gRPC 构建于 HTTP/2 传输之上,这为我们带来了原生的双向流能力和请求头中灵活的自定义元数据。前者对于大数据量交换和网络遥测场景非常重要,而后者使我们能够扩展并包含包括(但不限于)各种网络元素认证机制在内的功能。此外,gRPC/proto3 带来的广泛语言绑定支持,使我们能够为内部和外部消费者提供灵活且快速的开发环境。最后但同样重要的一点是,虽然有多种网络通信协议用于配置、操作状态获取和网络遥测,但 gRPC 为我们提供了一个统一且灵活的协议和传输层,简化了客户端/服务器的交互。

gRPC 背后的故事

gRPC 最初由 Google 创建,Google 使用一种名为 Stubby 的通用 RPC 基础架构,十多年来一直用于连接其数据中心内及跨数据中心运行的大量微服务。2015 年 3 月,Google 决定构建 Stubby 的下一个版本并将其开源。最终成果就是 gRPC,它现在被 Google 以外的许多组织所使用,支持从微服务到计算“最后一英里”(移动、Web 和物联网)的各种应用场景。

有关我们为何创建 gRPC 的更多背景信息,请参阅 gRPC 博客上的 gRPC 动机与设计原则