gRPC - 简介

843 阅读2分钟

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战

什么是gRPC

所谓gRPCremote procedure call远程过程调用)。在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。在服务器端,服务器实现了这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中简称为客户端),它提供与服务器相同的方法。

image.png

gRPC 客户端和服务器可以在各种环境中运行和相互通信,并且可以用任何 gRPC 支持的语言编写。因此,例如,您可以轻松地使用 JavaGoPythonRuby 中的客户端创建一个 gRPC 服务器。

gRPC vs Restful API

功能gRPC具有 JSON 的 HTTP API
协议HTTP 2.0HTTP版本不定
协议类型必须是.proto文件可选
传输类型protobufJSONXML
规定严格规范宽松。 任何 HTTP 均有效。
流式处理客户端、服务器、双向客户端、服务器
浏览器支持无(需要grpc-web)支持
安全性传输(TLS)传输(TLS
客户端代码生成

推荐使用gRPC的场景

gRPC非常适合以下场景:

  • 微服务 - gRPC设计为低延迟和高吞吐量通信。gRPC非常适用于效率至关重要的轻型微服务。
  • 点对点实时通信 - gRPC对双向流媒体提供出色的支持。gRPC服务可以实时推送消息而无需轮询。
  • 多语言混合开发环境 - gRPC工具支持所有流行的开发语言,使gRPC成为多语言开发环境的理想选择。
  • 网络受限环境 - 使用Protobuf(一种轻量级消息格式)序列化gRPC消息。gRPC消息始终小于等效的JSON消息。

不建议使用gRPC的场景

在以下场景中,建议使用其他框架而不是gRPC

  • 浏览器可访问的API - 浏览器不完全支持gRPCgRPC-Web可以提供浏览器支持,但它有局限性并引入了服务器代理。
  • 广播实时通信 - gRPC支持通过流媒体进行实时通信,但不存在向已注册连接广播消息的概念。
  • 进程间通信 - 进程必须承载HTTP/2服务才能接受传入的gRPC调用。对于Windows,进程间通信管道是一种快速,轻量级的通信方法。