gRPC 基本概念

2021-01-01  本文已影响0人  找不到工作

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

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

1. The motivation of gRPC

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

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

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,它的主要特色是:

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 特别适合用于:

上一篇 下一篇

猜你喜欢

热点阅读