gRPC学习笔记1 - 简单介绍

0. 背景

gRPC 是谷歌开源的轻量级 RPC 通信框架,在微服务架构中经常用到。

1. gRPC 简介

gRPC 是谷歌开源的轻量级 RPC 通信框架,其中的通信协议基于二进制数据流,使得 gRPC 具有优异的性能。

gRPC 支持 HTTP 2.0 协议,使用二进制帧进行数据传输,还可以为通信双方建立持续的双向数据流。

基础概念

在gRPC中,客户端应用程序可以直接调用不同机器上服务器应用程序上的方法,就好像它是本地对象一样,这使创建分布式应用程序和服务变得很容易。

分解介绍:

  • (1) 定义一个服务:gRPC基于定义服务的思想,指定可以使用参数和返回类型远程调用的方法。
  • (2) 服务器端实现服务:服务器实现此接口并运行gRPC服务器来接收客户端调用。
  • (3) 客户端通过存根调用:客户端有一个存根,它提供与服务器相同的方法,执行时就像调用了服务端的方法。
image.png

gRPC使得客户机和服务器可以在不同环境中运行和相互通信,比如分布在不同地区,物理环境。和支持各种开发语言进行开发。

2. gRPC 使用 protobuf 作为通信协议

两个微服务之间通过基于 HTTP 2.0 二进制数据帧通信,使用 gRPC 内置的 protobuf 协议,其 DSL 语法 可清晰定义服务间通信的数据结构

对应 开发语言中的 struct 和 函数, gRPC 通过 protobuf 通信协议来描述(定义)序列化的数据的结构和服务调用方法。

下面分别描述:

  • 定义数据结构
  • 定义服务方法

2.1 定义数据结构

protobuf 中 ,用 message 表示传输的 数据结构实体对象,示例:

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

它描述了传输过程中的消息的数据结构,protobuf 提供了序列化和反序列化的方法。protobuf 提供了编译和生成代码的工具,通过 protoc 工具生成基于各个开发语言的源代码。可以参考我的另一篇文章Go 语言中使用 Protocol Buffers

2.2 定义服务方法

就像开发语言中的函数,方法,服务定义 可以定义和描述 数据访问方法,描述了方法名称,调用参数,和返回参数等,示例:

// 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;
}

这里定义的服务方法,也可以借助 protobuf 生成源代码。然后它作为服务端和客户端之间的调用方法约定。

3. 四类服务方法

gRPC 允许你定义四类服务方法:

3.1 普通RPC调用

即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。

rpc SayHello(HelloRequest) returns (HelloResponse){
}

3.2 服务端流式 RPC

即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止。

rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){
}

3.3 客户端流式 RPC

即客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等待服务端读取这些消息并返回应答。

rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse) {
}

3.4 双向流式 RPC

即两边都可以分别通过一个读写数据流来发送一系列消息。

rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){
}

4. 其他概念

4.1 超时时间

gRPC 允许客户端在调用一个远程方法前指定一个最后期限值。

4.2 终止/取消 RPC 调用

客户端或者服务端都可以再任何时间取消一个 RPC 调用

4.2 RPC 生命周期

一个简单的 RPC 形式:客户端发出单个请求,获得单个响应。

  • (1) 客户端通过桩(Stub)调用一个方法,服务端会得到相关通知 ,通知包括客户端的元数据,方法名,允许的响应期限(如果可以的话)
  • (2) 服务端既可以在任何响应之前直接发送回初始的元数据,也可以等待客户端的请求信息,到底哪个先发生,取决于具体的应用。
  • (3) 服务端获得客户端的请求信息后,处理消息和组装响应消息内容。如果执行成功的话,它的响应会和包含状态码,可选的状态信息,可选的追踪信息一起返回给客户端 。
  • (4) 假如状态是 OK 的话,客户端会得到应答,则束客户端调用。

5. 参考

quickstart
https://www.grpc.io/docs/quickstart/go/

基本概念
https://www.grpc.io/docs/guides/concepts/

指南
https://www.grpc.io/docs/guides/

https://www.grpc.io/docs/guides/concepts/

gRPC 官方文档中文版
http://doc.oschina.net/grpc?t=57966

END

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,492评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,048评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,927评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,293评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,309评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,024评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,638评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,546评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,073评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,188评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,321评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,998评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,678评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,186评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,303评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,663评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,330评论 2 358

推荐阅读更多精彩内容

  • 1.简介 在gRPC中,客户端应用程序可以直接调用不同计算机上的服务器应用程序上的方法,就像它是本地对象一样,使您...
    第八共同体阅读 1,884评论 0 6
  • gRPC 是一个高性能、通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的...
    小波同学阅读 19,497评论 6 19
  • 原文出处:gRPC gRPC分享 概述 gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远...
    小波同学阅读 7,233评论 0 18
  •  gRPC 学习笔记,记录gprc一些基本概念.  gRPC正如其他 RPC 系统,gRPC 基于如下思想:定义一...
    Jancd阅读 1,988评论 1 7
  • 阳春三月,正是春暖花开、春回大地的日子。杭城的花正在陆续绽放,西湖龙井的新芽呼之欲出,青山远黛,杨柳依依,加上难得...
    许馒头阅读 409评论 2 3