美文网首页
gRPC 基本概念

gRPC 基本概念

作者: 找不到工作 | 来源:发表于2021-01-01 21:50 被阅读0次

本文基于视频:gRPC课程,涵盖了 1 到 5 集内容。

该视频比较短小精悍,小哥口音有点奇怪,但是还算吐字清楚。

1. The motivation of gRPC

gRPC 试图解决应用之间的 通信 问题。通常,前端和后端程序用不同的语言编写,微服务可能也是用不同的语言编写。他们间需要一个共同的协议来处理:

  • 通信方式:如 Basic,SOAP,消息队列
  • 认证机制:如 Basic,OAuth,JWT
  • 消息载荷类型:如 JSON,XML,binary
  • 数据模型
  • 错误处理

该协议应该非常效率,因为:

  • 微服务间的信息交换非常多
  • 手机网络带宽限制

gRPC 就在这些需求下应运而生。

2. gRPC 是什么

gRPC 是一个开源的多功能 RPC 框架。

RPC 指 Remote Procedure Call,是一种调用其他主机上运行的程序的协议,之前在做 MIT 6.824 时已经有接触,使用 RPC 就像可以直接从客户端调用服务端的代码。

gRPC client and server

如上图所示,client 有一个自动生成的 "Stub" 提供 server 端的可调用函数。"Stub" 会调用 gRPC 框架并管理通信上的细节。

生成 Stub

gRPC 默认使用 protocol buffers 来生成 Stub。这是一种接口定义语言(Interface Definition Language, IDL)。

首先,定义 RPC 使用的服务和消息类型,protocol buffer 是一种强类型的协议,因此它要求指定参数、返回值的类型。

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

之后, protocol buffer compiler 可以利用这些定义生成指定语言的代码(golang, cpp, java, etc)。

3. gRPC 的优势

使用 http2

gRPC 使用 http2 作为底层通信协议。
http2 是 2015 年面世的新版本,相较于 1997 年的 http1.1,它的主要特色是:

  • 使用二进制而非文本

    • 更好的性能
    • 传输更轻量级,解码更安全
    • 与 protocol buffer 兼容性好
  • 使用HPACK 压缩 header

    • 更少的 overhead,更优性能
  • 多路复用

    • 可以通过一个 TCP 连接 并行 发送多个请求/回复
    • 降低延迟,提高网络利用率
  • 服务器推送

    • 客户端发送一个请求后,服务器预判客户端需要什么资源,并主动发送响应。表现为一个请求,多个响应。
    • 减少 round-trip 延迟
HTTP/2 HTTP/1.1
Transfer Protocol binary text
Headers compressed plain text
Multiplexing yes no
Request per connection Multiple 1
Server push Yes No

这个网站可以测试 http2 的性能,我的结果是相比 http1.1 加载时间减少了50%以上。

gRPC v.s. REST

Feature gPRC REST
协议 HTTP/2 HTTP/1.1
有效载荷 Protobuf (二进制, 小巧) JSON(文本, 冗长)
API .proto(强类型) OpenAPI(宽松)
代码生成 内置的 protoc 第三方工具,如 swagger
安全性 TLS/SSL TLS/SSL
双向的 只能客户端发起
浏览器支持 需要 gRPC-web 在 HTTP/1 和 HTTP/2 之间做转换 支持

可以看出,gRPC 在除了浏览器支持外都有更好的表现。因此 gRPC 特别适合用于:

  • 微服务(低延迟、高网络流量、强 API 合约)

  • 多语言环境

    • gRPC 有原生的代码生成工具
  • 点对点实时通信

    • gRPC 支持双向流
  • 网络资源有限的系统(如手机)

    • gRPC 有轻量级的消息格式

相关文章

  • gRPC 学习笔记

     gRPC 学习笔记,记录gprc一些基本概念.  gRPC正如其他 RPC 系统,gRPC 基于如下思想:定义一...

  • gRPC入门------gRPC简介

    gRPC基本概念 什么是 gRPC? gRPC 是一种新式的高性能框架,它通过 RPC (远程过程调用) [htt...

  • gRPC 基本概念

    声明 本篇文章是在学习gRPC框架的过程中翻译的官方文档,非作者原创,官方文档参考gRPC,学习gRPC过程中,有...

  • gRPC 基本概念

    本文基于视频:gRPC课程[https://www.bilibili.com/video/BV1Xv411t7h5...

  • gRPC之基本概念

    基于google的官方文档,附带一些自己的思考 服务(service) gRPC可以定义四种服务 简单的reque...

  • grpc-源码-网络模型

    golang 的grpc库是 https://github.com/grpc/grpc-go grpc serve...

  • gRPC 4种rpc定义方法与3种stub介绍

    gRPC 有关gRPC官方介绍(https://www.grpc.io/docs/what-is-grpc/int...

  • gRPC安装与编译

    1.安装gRPC grpc与protobuf版本对照表:https://github.com/grpc/grpc/...

  • grpc 2022-11-28

    grpc[https://grpc.io/docs/what-is-grpc/introduction/] In ...

  • gRPC简介

    本文翻译自gRPC简介[https://grpc.io/docs/what-is-grpc/introductio...

网友评论

      本文标题:gRPC 基本概念

      本文链接:https://www.haomeiwen.com/subject/drfgnktx.html