gRPC

protobuf和gRPC

protobuf 是一个平台无关,语言无关,可扩展的,用来序列化结构化数据的一个机制(想一下XML,但是更小,更快,更简单)。
gRPC是一个高性能的RPC框架,默认使用protobuf作为接口定义语言(IDL)和底层信息交换格式。可以让client像调用本地方法一样调用远程server,让创建分布式应用和服务更容易。gRPC的思想是:定义一个服务,指定可以被调用的方法,及方法的参数和返回。

gRPC可以轻松构建不同应用之间的通信

核心概念、架构和生命周期

  1. 定义服务,生成.proto文件。gRPC有四种service方法定义:
    1. 单项RPC,客户端发送一个消息,服务器接收一个消息。
      rpc FindOne(FindOneRequest) returns(FindOneResponse);
    2. 服务端流式RPC,客户端发送一个请求到服务端,可获取一个数据流读取返回的消息。客户端从返回的数据流里一直读取知道没有更多消息为止。gRPC保证单个RPC调用中的消息顺序。
      rpc List(ListRequest) returns(stream ListResponse);
    3. 客户端流式RPC,客户端使用写入流写入数据并发送一系列数据给服务端。一旦客户端完成了消息的写入,它就等待服务器读取消息并返回响应。同样,gRPC保证了单独RPC调用中的消息顺序。
      rpc InsertMany(stream InsertManyRequest) returns(InsertManyResponse);
    4. 双向流RPC,两端分别拥有读写数据流发送数据和接收数据。两个数据了操作是互相独立的,客户端和服务器可以按照自己的方式任意顺序读写,每个消息流里的顺序会被保持.
      rpc BidiList(stream BigListRequest) returns(stream BigListResponse);
  2. 使用API
    gRPC为protobuf提供了编译器插件,可以生成客户端和服务端端的代码,客户端调用API,服务端实现API。
    • 服务端实现服务接口,运行gRPC服务器处理客户端请求。gRPC底层解码请求,执行服务方法,编码请求返回。
    • 客户端有一个stub,实现了服务端同样的方法。客户端可以在本地上调用这个方法,用适合的protobuf 消息类型封装参数——gRPC发送请求到服务器并接受服务器返回的protobuf响应。
  3. 同步vs异步
    同步RPC调用会一直阻塞直到服务器结果返回,这是rpc最希望的抽象过程调用。另一方面,网络本身是异步的,在许多情况下,能够启动rpc而不阻塞当前线程是非常有用的。
  4. RPC声明周期
    • 单项RPC
      1. 客户端调用stub method,服务端会获得相关通知,这个通知包括客户端元数据、方法名、允许的响应期限(如果可以的话)
      2. 服务器可以直接发送自己的初始元数据(必须在任何响应之前发送),或者等待客户端的请求信息,具体哪个先发生,要看具体应用。
      3. 一旦服务器接收到客户端的请求信息,就会执行方法创建和组装对应的响应。如果成功的话,这个响应会包含状态码、可选的状态信息等状态信息和可选的跟踪信息等。
      4. 如果响应状态为OK,则客户端获得响应,将结束客户端的调用。
    • 服务端流式RPC
      服务端流式 RPC 除了在得到客户端请求信息后发送回一个应答流之外,与我们的简单例子一样。
    • 客户端流式RPC
      客户端流式 RPC 也基本与我们的简单例子一样,区别在于客户端通过发送一个请求流给服务端,取代了原先发送的单个请求。
    • 双向流RPC
      双向流式 RPC ,调用由客户端调用方法来初始化,而服务端则接收到客户端的元数据,方法名和截止时间。服务端可以选择发送回它的初始元数据或等待客户端发送请求。
      下一步怎样发展取决于应用,因为客户端和服务端能在任意顺序上读写 - 这些流的操作是完全独立的。例如服务端可以一直等直到它接收到所有客户端的消息才写应答,或者服务端和客户端可以像"乒乓球"一样:服务端后得到一个请求就回送一个应答,接着客户端根据应答来发送另一个请求,以此类推。

参考文档:https://grpc.io/docs/what-is-grpc/introduction/

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

推荐阅读更多精彩内容

  • gRPC 是一个高性能、通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的...
    小波同学阅读 19,492评论 6 19
  • 本文转载自用Golang构建gRPC服务[https://zhuanlan.zhihu.com/p/8550838...
    雪域迷影阅读 1,953评论 0 0
  • grpc 整理(nodejs) gRPC 是什么? 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台...
    秋枫残红阅读 1,737评论 0 2
  • 原文出处:gRPC gRPC分享 概述 gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远...
    小波同学阅读 7,219评论 0 18
  • RPC(Remote Procedure Call) RPC(Remote Procedure Call)— 远程...
    wavesnow阅读 34,528评论 0 4