这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
什么是gRPC
所谓gRPC(remote procedure call远程过程调用)。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。在服务器端,服务器实现了这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中简称为客户端),它提供与服务器相同的方法。
gRPC 客户端和服务器可以在各种环境中运行和相互通信,并且可以用任何 gRPC 支持的语言编写。因此,例如,您可以轻松地使用 Java、Go、Python 或 Ruby 中的客户端创建一个 gRPC 服务器。
gRPC vs Restful API
| 功能 | gRPC | 具有 JSON 的 HTTP API |
|---|---|---|
| 协议 | HTTP 2.0 | HTTP版本不定 |
| 协议类型 | 必须是.proto文件 | 可选 |
| 传输类型 | protobuf | JSON、XML等 |
| 规定 | 严格规范 | 宽松。 任何 HTTP 均有效。 |
| 流式处理 | 客户端、服务器、双向 | 客户端、服务器 |
| 浏览器支持 | 无(需要grpc-web) | 支持 |
| 安全性 | 传输(TLS) | 传输(TLS) |
| 客户端代码生成 | 有 | 无 |
推荐使用gRPC的场景
gRPC非常适合以下场景:
- 微服务 -
gRPC设计为低延迟和高吞吐量通信。gRPC非常适用于效率至关重要的轻型微服务。 - 点对点实时通信 -
gRPC对双向流媒体提供出色的支持。gRPC服务可以实时推送消息而无需轮询。 - 多语言混合开发环境 -
gRPC工具支持所有流行的开发语言,使gRPC成为多语言开发环境的理想选择。 - 网络受限环境 - 使用
Protobuf(一种轻量级消息格式)序列化gRPC消息。gRPC消息始终小于等效的JSON消息。
不建议使用gRPC的场景
在以下场景中,建议使用其他框架而不是gRPC:
- 浏览器可访问的API - 浏览器不完全支持
gRPC。gRPC-Web可以提供浏览器支持,但它有局限性并引入了服务器代理。 - 广播实时通信 -
gRPC支持通过流媒体进行实时通信,但不存在向已注册连接广播消息的概念。 - 进程间通信 - 进程必须承载
HTTP/2服务才能接受传入的gRPC调用。对于Windows,进程间通信管道是一种快速,轻量级的通信方法。