粉丝1492获赞8731




每天一条,讲清一个技术底层逻辑。今天分享 grpc 从可选到核心。你有没有想过这个问题,为什么百万 qps 时, restful 和 grpc 都能胜任,但到了千万 qps, 大 厂几乎都选择 grpc? 答案藏在一个惊人的数据里,二十八千兆比特每秒的宽带差异首先,我们要明白 http 一 点一的结构性问题,它是一个文本协议,每个请求都要携带完整头部。看这个例子,一个简单的内部查询,头部信息占了四百字节,而实际业务数据只有五十字节。 grpc 是 怎么做的呢?它基于 h t t p 二,结合 protobot 系列化,头部用 pack 压缩到二十至五十字节,再和用 protobot 压缩到十五字节左右, 单个请求从四百字节降到五十字节,开销降低了八倍。你可能觉得这没什么,但放到千万 qps 的 场景下, http 一 点一需要消耗三十二千兆比特每秒,待宽 g r p c 只需要四千兆比特每秒,节省了整整二十八千兆比特每秒。这就是协议开销的量变引起质变。 第二个关键差异在连接模型。 h t t p。 一 点一虽然支持 people life, 但本质上是请求响应的串行模型,为了提高病发,你需要维护大量连接。算一笔账,服务 a 有 一百个实力服务, b 有 五十个实力 连接总数是一百乘以五十,等于五千个。当服务网格扩展到数百个服务时,连接数成迪卡尔基式增长。 grpc 基于 h t t p 二的多路复用,单个 tcp 连接可以承载多个并发流,请求和响应可以交错传输,互不阻塞。实际部署中,每对实力只需要一至两个连接, 刚才的五千连接降低到一百至二百个,连接数降低了二十五倍。实际系统引进中, grpc 的 引入是渐进的, 在十万 qps 级别, http 一 点一加 jsn 简单通用,生态完善,协议开销占比很小,无需过度优化。到了百万 qps, 部分高频调用路径开始感受到压力, 典型做法是识别调用频率最高的服务,比如用户服务、订单服务,这些核心服务之间迁移到 grpc。 对 外 api 和低频调用还是保持 restful。 当系统达到千万 qps, g r p c 通常成为内部调用的默认选择。服务间调用全面采用 g r p c 边缘网关负责 http 到 g r p c 的 协议转换。这就是一个典型的三阶段引进路径。 但 g r p c 不是 银弹,采用时需要考虑以下因素。首先是适合的场景,高频内部调用,服务间调用量大,延迟敏感,流式通信需要双向流或服务端推送,但也有需要权衡的地方, 对外 api、 浏览器和移动端对 g r p c 支持有限,调试便利性,二进制协议不如 j s o n。 直观 团队学习成本, protobf 和 g r p c。 生态需要投入。所以典型的千万 q p s 系统会采用 y h t t p 内 g r p c。 的 架构模式, 用户通过 http 访问 api 网关网关进行协议转换,内部服务之间全部用 g r p c 通信。这里要强调一点, g r p c 的 收益主要体现在内部高频调用对于调用频率低或再何大的服务,协议选择的影响会相应减小。 技术选型应该基于实际的调用模式和性能瓶颈,而不是盲目追求先进技术。总结一下, g r p c 在 千万 q p s 下成为核心选择, 本质是协议效率的量变引起质变,头部压缩加二进制序列化,节省大量带宽连接多路附用,降低系统资源消耗,强类型约束,提供更好的接口治理。但记住,选择技术要基于实际场景,而不是追求所谓的先进。这么长的视频你都看完了,点个关注吧!

面试官, exos 是 否可以取消请求?怎么实现后选人可以用 cancel token? 面试官,好,那 cancel token 和 apple control 的 区别是什么?实际项目里为什么会出现取消失败? 重复请求怎么用?取消解决后选人这道题从基础到实战,百分之九十的人都栽在第二位,烦死了 啊。今天面一个前端开发简历上写着精通 actos 网络请求封装。我问他, exos 是 否可以取消请求, 他可以用 cancel token。 我 点了点头,那你说说两种取消方案的区别。他,呃,都是取消请求?好像差不多。我追问,那你写一个取消重复请求的封装给我看看?他写的磕磕绊绊,逻辑混乱。 我接着问,取消请求会报错吗?怎么补货?不影响正常流程?他会报错,但怎么补货我记不清了。我再问,切换页面时如何自动取消上一页的所有请求?他开始犹豫,呃, 需要在路由首位里处理?怎么存请求标识?我忘了。最后这个问题他没能完整答出来。这个回答就是典型的 备 api 还行,一封装就露馅了。 exuse 取消请求是前端网络优化高频题,也是面试官的最爱。 想答好你要从三个维度讲,能否取消两种方案。实战封装。如果这道题目你也不会回答的话。我整理了让大厂 hr 沉默的必考题库,包含大厂简历、前端 ai 场景题、八股文等。只要是我粉丝点个赞,评论区甩五五五,打包带走 nice。 本质一, icloud 完全可以取消请求。 icloud 从旧版到新版提供两套标准方案, 不是 hack, 而是官方支持的稳定功能。本质二,两种取消方案一, cancel token 兼容老项目,用法简单,但是被官方标记为弃用。二、 abort controller 浏览器零点二二加推荐,未来主流 更规范,支持批量取消和 fetch 通用。本质三,实战场景与避坑场景一,取消重复请求,防止按钮多次点击重复接口发送,用 map 存储请求标识,发起前判断重复则取消场景二,页面切换,自动取消 路由首位里清空所有请求,避免页面销毁后回调报错场景三,错误捕获取消请求会抛异常,必须单独判断类型,不谈错误提示。本质四,避坑关键不要混用两种取消方案, 取消后必须清理标识,避免内存占用,封装成工具函数,全局统一使用,这个就叫专业。 最后来波灵魂总结,下次面试官问 access 取消请求,你要从三个层次讲,一、支持取消,官方提供两套方案。二、 cancel token 兼容旧项目, abort controller 是 未来标准。 三、实战用于取消重复请求,页面卸载,清理错误,单独补货,这才是大场面试官想要的从 a p i 到封装的深度。

哎,大家好啊,我们这一次的课堂主要是讲一个新的一个开发的一种方式,就是我们常说的 gip 系 加 bc 是一个怎么样的一个东西,东西呢?加 bc 其实是九快速响应,在传输过程中是十二经济的,它不区分平台要开发语言的 加脾气呢,其他其实是使用独立的通道的一种模式,他在哎传输过程中呢,他是可以快很服服气端和客户端还是可以快速响应的, 现阶段呢,大多数的呃使用呢都是使用在微服务上,未来的方向应该会切换到我们现有的 vip i 的一个绝大多数理 有工作,现在我们来简单的认识一下啊,我们呢首先来 看一下是如何啊建立我们的一个 gip c 的,我们整个邮件装在项目,我们来这里的时候,我们可以输入我们的局啊 pc, 这样我们就可以看得到啊,我们可以按这个的时候来点一下,我们来创建我们的一个主要 pc, 我们再点击根据他走完了之后的那个之后呢,我们就可以看得到我们机器形状呢,换成一个 bib, 他这里会有一个,主要都是我们要了解的。第一个就是他的爆,他这里 创建完 gpc 之后呢,他推这里会给我们这个项目里面哎一个 gpc 的一个包, 第二个呢就是我们的 potos, 就是我们哎,如何定义这些 jp c 的?第三个就是服务 sos, 哎,这个服务就根据这个 potos 里面啊,我们要给这个 potos 里面来 洗下菠萝头洗面的一个方法。好,我们第一步我们来看一下我们的 pot 头上 poto 鞋里面呢?他这个这个东西就是说第一个啊,我们来看一下上面的,我们使用的是 polo 三的一个方案, 这个就是我们的哎四少女朋友们 namesbee 给个报名。 好,来,我们来看一下,这里啊这里呢,就是第一个,就是我们的,给这个哎 pot 头饰我们来定义这个 pose 头饰里面还有时尚哪些方法, 哪些方法来实现,就是跟我们常说的 vipi 里面的,他要实现哎,哪一些方法 必须有个方法题来做实现的嘛?啊,我们给每一个 potose 们都会定义以加 bc rpc 来开头了,告诉他我们要实现这个方式, 这个方法的一个名字,请求解,这是一个请求解,这是一个返回解,告诉啊,我们的请求解,他应该返回是什么? 我们看见我们哎,这里的请求解答。请求体里面呢?大家很多时候是,呃使用集团第一的,就是告诉他这里,我们很多时候是告诉他我们是一个 three 或者一个 n t 的一些类型 啊,我们看到他默认建立的是一个量啊,并且他是定义为一,这就等于一,不是说我们哎这个值他是等于一,而是不表示这个值是排在第一位, 所以这也参数了啊,他很多时候就表示你的一个顺序的一个数据,从一开头一直到后面, 哎,很多很多,这个是同样我们的一个呃,返回 啊,返回体也是以这样一种方式。好,我们来已经看完了这个自动生成一个默认的一个系列啊,我们看一下他这里的实现是怎么实现的。 第二步呢?我们要给这个 pote 啊,进行一个功能里面的一个形象, 那就说我们是如何在请求这个破头的时候,我们把这个破头鞋面的方法来给他实现出来。 其实他这里他自定义生存出来的时候,他这里就是会有一个地方来做记录的,已经一直这个地方对于呃实现题来说 是没有意义的,就是有些错误信息啊,会怎么样啊?你可以在这里做一些输出啊之类的。 然后呢下面这里他就会告诉我们,哎,我们在这个破头鞋门我要写上哎 c 哈喽的一个方法,并且我们就通过一个一步来返回了我们所有的方,我们所有的写下的方法都是通过 ola 来来把这个方法的一个同写 这里啊,这个地方呢,他只是表示一个服务器的一些信息啊,一般情况下呼吸或者不要包括我们的请求自己的一个头部啊, 我们当天的服务体验一些信息啊,我们都可以通过这个类来拿到的。好,我们来看一下啊,他这个声音就出来, 这是我们通过这个一步的一个锋利药的一个这样的一个方法来把我们的这个 返回去来把它返回起来,这个返回去里面他就会有一个方法,就是说哎这个就要迈着出一个方法啊,请求取里面的这个念通过 c, 通过哈喽加上念来返回回去, 来这里的时候我们还没有真正的去实现了整个东西是怎么样,我们还要继续来看一下我们在 哎这个项目启动的时候,这个东西到底是做了些什么。我们首先来看到啊,我们这一次跟 我们常说的 vip i 是不一样的,因为我们进来的这个时候,我们嘻嘻真的是告诉他,我们要把这个 gipc 的一个服务已经扎进去了,扎,扎进来我们这里走的是一个 gipc 的一个服务,而不是我们常说的 vipi 的一个服务。 然后我们来这里的时候,我们也知道,就是我们要把要让系统知道,我们在接收数据的时候,我们要进行打下令, 对于哪个类,虽然我们要告诉这,我们要告诉市长,我们在这一周的时候,我们要实现的是社会是你们的这个类, 然后这样呢,我们就知道,哎,一个哎,完整的一个 gip 系,是已经实现了一个完整的一个 gip 系,一个流动, 那我们应该是如何去请求这个 gipc 呢?对吧?如何去请求这个 pipc? 然后呢,我们给这个 pgipc 运行起来,把这个 gipc 运行起来,我们啊乘过 把这个比亚迪斯运整起来。 好,现在呢,我们就看到了, 哎,我们这个再不是他去运行起来的时候,他就会给我们有两个监控, 第一个是监控五千的一个端口,这是另外一个监控,是五千零一的端口,你要看到他五千的端口,他使用的是 hcp, 五千零一,他使用的是 hcps。 啊,那我们啊,如何? 那我们如何去调用这个 jpc 呢?首先我们要建立啊,一个空气台,建立一个空气台来尝试一下调用这个 jpc, 建立空气台之后呢,我们 啊,你们在那个空气台,我们还没办法去调用这个 gipc 嘛,所以啊,我们要首先要应用这个,呃, protos 右键前夹 服务饮饮料,这个地方呢,我们会看得到一个 gip c 的一个服务,然后点我们点击下一步这里我们看得到文件,文件是我们可以选择本地的一个文件,选择本地的文件, 然后呢 ul 呢,我们可以可以选择呃网站的一个 ul 的一个方式,在这个时候我们点确定之后呢,我们就呃完成了一个高端的一个成绩, 玩了一个高端的电影,我们高端请求做完之后,他就会记得我们为我们手中一小包,为我们的手中几个包 引用了几个宝。在引用进来之后呢,我们就给我们的这个 gucci 里面的方法我们来调用啊,我们很多时候我们需要在用 gipc 的时候,我们需要引用这些包了,因为我们在引用这个 gipc 的时候啊,引进来的时候他就自动给我们送这些包了,或者我当我们引用完之后,我们可以 使用这个包来切换掉上面这些包,但是这样会有一个问题,就是,哎,如果我们在添加第二个去 ipc 的时候,我们就会报错,所以在我们还没发布的情况下,我们还是建议大家一哎使用他默认的已经用的包。 好第二步啊,第二步我们给我们的 gipc, 给我们的一个这个 gipc 要建立一个通道,建立一个通道 我们通过 jpc 这个方法给我们这个通道,这个通道就是我们通常链接的这个 jpc 的那个站点, 好教你完成到之后我们就可以建立一个客户端,我们这个客户端就通过我们,哎,因为我们已经形成这个哎, polos 嘛,他会自动为我们生成,生成了很多方法,所以他这个方法是他们哎点在腿门即将生成的,我们就通过 这个方法里面的使用的这个,呃,加 pc 的 客户端链接啊,来绑定啊这个通道。然后呢我们再建立 一个啊,一步的一个请求,就是客户端的一个一步请求,客户端绑定完之后,他客户端就可以使用像使用类一样再使用这个 加皮洗面这个方法来调用加皮洗面这个方法,对,这个是加皮洗的一个请调节啊, 结完之后呢,我们就可以通过一步来速度在我们调用,在利息里面发挥一个内容,好,我们来这里的时候,我们来一起来实现一下, 我们进行一下我们这一层锅,哎,我们穿的是 tex 吗?发挥的应该是 hello text。 啊, 好,大家看到啊,这里我们返回来是 tst, hello text 对吧,我们返回来是 hello text, 那如果我们这里改为呃 tst 对吧,那我们这里应该返回是 hello texts, 看到我们这里返回是好了,再仔细。然后我们通过刚刚的一个 后端的一个请求,之后呢,我们看得到啊,他这里就告诉我们就这个请求, 这个请求是调用到这里一个请求,然后这请就是也是调用了一个这个请求。 好啊,我们可以看得到啊,通过上面的一个请求,我们就可以拿到我们 gpc 一个字, 哎,本期课程我们就先来了解啊加 bc 的一些基础里面的一些功能, 并且我们哎了解了我们在建立一个新的 gipc 的时候啊,也许会为我们生成一个 gipc, 一个压力变成一个实现的,呃,实现方法起我们整个这个压力, 我们写了一个呃请求的,这边是一个呃 tax 的一个请求的一个方法来调用啊,哎,我们集中送筒的那个请求去来,并且来拿到这个返回机。 好,本期的课程。哎,今天就讲到这里啊,哎,谢谢大家的观看。

同学们大家好,欢迎参加这个 git 系列课程的学习,那么这节课呢,我们来继续学习这个 gipc 编程啊, 在前面课程中呢,我们其实已经给大家介绍了这个 gipc 编程的一个基本的使用方法啊,我相信大家呢,在通过全面课程的学习呢,应该对这个 gipc 编程呢,哎,应该有了一个基本的入门, 但是事实上呢,这个 gipc 啊,他实际上给我们提供了四种变成模式啊,四种通讯模式,我们来看一下这四种啊,通讯模式分别是哪四种?哎,我们这节课呢,来给大家做一个整体上的介绍,那么后面课程呢,我们来一一给大家介绍每一种模式的使用方法。 那么这四种模式中呢,首先一个就是最简单的一个模式,或者我们喊他叫做什么叫 superfc, 也叫音乐模式叫, 这是最简单一种,也是最常见的一种。那么在这种通勤模式下呢,哎,一般都是我们客户端发起个请求啊,然后呢啊,一直等待啊,然后呢服务端收到这个请求之后呢继续去处理,然后把这个结果返回给我们的客户端啊, 就是一个分别对应一个什么呢 request 啊,然后呢得到一个 reply 或者是一个 response, 就这么简单,你比如说我们要计算呃,三加五等于多少哎,然后把三加五传到服务端,哎,服务端接收到三加五,然后计算一个结果等于八,然后再把这个八返回来, 这就是一个非常简单的模式啊,服务端请求客户端响应,就这么简单。好,那么第二种方式呢,那就是服务端数据流模式,哎,我们可以把它叫做什么?叫做 server side 的是追命 rpc。 那么这种方式是什么样的?这种方式就是客户端发起发起一次请求,然后呢服务端可以连续的返回一个数据流 啊,他不是一次响应,而是连续的把数据发到我们客户端来。你比如说啊,一些案例,比如说我们说客户端向服务端发起一个股票代码,然后呢服务端持续反馈该股票的一些实时数据啊,比如说他的价格的波动,是吧?他的成交量啊,就是因为他是在不断的这个变化的啊, 然后服务端把这些变化全部通过牛的方法啊,返回给我们的这个客户端,我们客户端呢就会远远的收到这个服务端发回来的结果,他不是一次性发锁,而是连续的发锁。 你比如说我们一样,我们如果客户端发起个请求,向服务端申请一个文件啊,这个文件比较大,对吧?他不可,服务端不可 一次性把这个文件全部一下子就发过了。那服端也是一点一点的把这个数据中啊,把这个文件中的数据读出来,然后呢连续的通过牛的方式,把这些数据啊一点一点的返回给我们客户端啊,我们客户呢,最终把这些数据存下来,就得到一个文件, 这种我们也把它叫做什么呢?叫做服务端数据流模式。好,第三个呢就是什么?就是客户端数据流模式,我们把它叫做什么呢? climate side, streem、 rpc。 那么这种方式呢?和服务端方式就反过来了,对吧?啊?我们是客户端持续的向服务端发送流数据啊,然后呢在发送结束之后呢,有服务端返回一个响应。 你比如说啊,我们啊扣端有多个监控摄像头数据啊,然后呢,我把这些数据实时的持续的上传到服务器 啊,由服务端去处理啊,这种方式我们可以把它叫做客户端数据流模式。同样的,如果我们客户端要上传一个文件,上传一个大文件到服务端的话,那么我们也可以采用这种客户端数据流模式, 把这个数据在我们客户端一点一点的读出来,然后呢把它发送给服务端,有服务端去处理他啊,对不对啊?然后呢,发送结束之后,好,客户端服务端再做一个响应啊,这就是客户端数据流模式, 其实就是哪边的数据多,哎,我们就把哪边啊,就叫做哪边的数据流模式,是吧?哪边啊就得使用数据流模式, 但是如果你数据少,那我们就可以使用简单模式,就是三加五传过去,然后返回一个八,这两边数据都非常少,都非常少,一次性请求就可以完, 对不对?但如果数据多啊,服务端的数据多,那么就使用服务端数据流模式,客户端的数据多,一次穿不完,那么就使用客户端数据流模式,很简单。好,然后呢,还有个就是双向数据流模式,叫白迪尔克罗斯瑞明 apc。 那,那这就是说,那这种双向数据流模式,那就是说既有客户段数据流,也有服务段数据流,是不是啊? 这种方式呢?那就是服装和客户端的数据数据都比较多啊,两方面都是一下子穿不完的,都可以,都需要持续转速,你比如说啊,在这种情况下,客户端和服务端都可以向对方发送数据流啊,你比如说常见的就是聊天机器人 啊,聊天记事件,我客户端可以不断的向服务端发送我的绘画啊,发送我的聊天内容,对吧?那服务端 也会持续的给我们啊,服扣端返回啊,这个聊天的内容啊,这样双方都是在不断的这个传输数据的,是不是啊,啊,不是说我扣端啊,只发了一句话我就结束了啊,服装也不是说 只发一句话就解说,因为你两者之间在聊天啊,你们这个聊天肯定是一个持续的过程啊,两边都有不很多话要说啊,所以两边都要使用数据流模式, 所以呢,我们把它叫做双向数据的模式,这就是 dipc 提供的四种通讯模式, 那么至于使用哪种通讯模式呢,那就要根据我们实际的这个应用场景来决定啊,这四种通讯模式呢,哎,我们在后面的课程将会啊一一给大家详细介绍, 给大家提供相应的例子,这样的话,我们以后就可以根据我们的这个讲解呢啊,来善于使用我们的这种啊,这四种模式中的任何一种,对吧? 好,那么关于这个 gipc 呢通讯的四种模式呢,我们就先给大家整体介绍到这啊,后续课程我们再一一展开给大家讲解, 那么这节课我们就先讲到这,如果同学们想获取更多学习资料,欢迎访问我们的啊,官网门费电看我或者周哥叫 id 点 coming, 欢迎通过 qq 三幺七九零八七九零,同学们,同学们,我们下次再见,拜拜。

大家好,欢迎回到我的频道, g r p c 全解析,彻底改变微服务通信的酷狗黑科技, 你想过没?我们手机上那些 app 是 怎么跟云端服务器那么快速的沟通的?嗯,很大程度上呢,这得归功于一个叫 g r p c 的 东西。 今天呢,咱们就来好好聊聊这个由谷歌打造的超强开源框架,说真的,他正在彻底改变现代服务之间对话的方式。好,那我们今天都聊些啥呢? 这是我们的路线图。首先打好基础,看看什么是 r p c, 然后主角登场,介绍一下 g r p c, 接着我们会扒一扒他的超能力,为什么他这么火。 再然后呢,深入内部,看看他到底是怎么工作的,最后也是最重要的聊聊他到底该用在什么地方。 行,咱们就从基础开始吧。在咱们聊 g r p c 那 个机制之前啊,得先搞明白后面那三个字母 r p c 是 什么意思,这远程过程调用到底是个啥玩意?好,咱们先从一个每个程序员都熟的不能再熟的东西开始。 本地过程调用,听着挺唬人是吧?其实啊,它就是一次普普通通的函数调用,你知道的就是你程序里的一段代码去调用同一个程序里的另一段代码,就这么简单。好,见证奇迹的时刻到了。 想象一下,如果你能调用一个不在你程序里的函数会怎么样?甚至这个函数在另一台电脑上可能离你好几百公里远。 这就是远程过程调用 r p c 干的事,它让你能调用另一台机器上的代码,但最关键的是什么呢?是它给你的感觉就跟你调用自己程序里的本地函数一模一样, 所有那些复杂的网络细节,它全帮你藏起来了,是不是很酷?行,既然我们已经搞懂了 r p c, 来看看谷歌是怎么把这个很酷的想法给它升级再加码的。简单说,你可以把它看作是谷歌对 rpc 的 一个 现代化的开源的实现,它是在谷歌内部为了解决他们自己海量的服务通信问题而诞生的,可以说是在实战中千锤百炼出来的。现在呢,它早就不是谷歌的专属了,已经成了超多公司连接内部微服务的首选方案。 好,那问题来了,为什么 grpc 会这么火?它到底有什么特别之处,让大家都对它赞不绝口? 嗯,说白了,它的成功主要归功于两大超能力,对开发者超级友好、简单粗暴的超强性能。超能力。一、开发者体验 protocol buffers, 这是什么意思呢?也就是说啊,用 grpc 开发接口 简直不要太轻松,你不仅能做出高质量易扩展的 api, 而且它还是类型安全的。这个类型安全特别关键, 它就像一个贴身保镖,能在你写代码的时候就帮你发现很多潜在的错误,而不是等到程序跑起来才出问题。 而这个开发者生态的核心,就是一种叫做 protocol buffers 的 东西。你可以这么理解,我们平时常见的街上,就像咱们写信,用的是白话文 人,读起来很方便,但是有点啰嗦。而 protocol buffers 呢,就像是把同样的信息用一种超高效的二阶式数据来发送, 他不是给人直接读的,但对电脑来说,处理起来快的惊人,而且他还有严格的模式,就说数据的结构是预先定义好的,这样就不会出现鸡同鸭讲的情况了。而这一切的魔法都源于一个简单的文本文件, 你可以把这个文件想象成一份合同,你在这份合同里清清楚楚的写明白了你的数据长什么样,你的服务能提供哪些功能。 然后呢,只要你写好了这份合同, g r p c。 的 工具就会自动帮你生成所有客户端和服务端的枯燥的模板代码。最爽的是什么呢?因为这份合同是独立于任何编程语言的,所以你的 server 端可以用勾来卸, 客户端用拍照或者 java cplusplus 完全没问题,他们可以天衣无缝的合作,这对开发效率来说简直是巨大的提升。超能力二,极致性能那么 h t t p 二, 第二个超能力,这个就简单了,就是快,纯粹的不掺水的快。 g r p c。 的 性能非常非常强悍,而且是开箱即用,到底有多快? 这么说吧,在某些场景下,它能比用 j 上的传统 a p i 快 上整整五倍。你可能会想,这怎么可能?其实原理咱们前面提过,就因为它用的是高效的二进制编码, 数据包变得更小了,在网络上传述的时间就更短,电脑解析起来也更快。但二进字编辑码还不是它唯一的法宝。 g r p c 系性能的另一大工程是它构建在现代网络协议 h t p r 之上。 还记得我刚才打的比方吗?单车道对多车道高速公路,这就是 h t p e。 一 点一和 h t r 的 区别, h t p r 允许在一个连接上同时发送和接收大量的请求和响应, 这种技术叫做多路复用,它能极大的减少网络延迟和等待时间。好,我们现在知道了它为什么这么快,但是一次完整的 g r p c 调用,从头到尾究竟都发生了什么呢?咱们一步一步来看一下这个流程。 客户端的代码会去调用一个叫 stop 存根的东西,这个 stop 就是 glpc 自动生成的代码,它伪装的就像是远端的服务一样 打包,然后你要发送的数据会被 protocol buffers 打包成二进制格式传输。接着这个小小的二进制数据包就通过 h t t p r 的 高速公路嗖的一下传到了服务器。解包与执行,服务器收到之后,把它解包执行真正的业务逻辑, 回处理完之后再把结果打包通过同一条高速公路,嗖的一下又传回给了客户端。 整个过程对开发者来说几乎是透明的,非常顺滑。好,听起来 g r p c 简直是太棒了,又快又高效,开发者用着也省心。那问题来了,这么好的东西到底应该用在哪呢? 这就引出了一个很自然的问题,对吧?既然 g r p c 这么牛,那为什么我们没看到它一统天下呢?为啥我们的网页浏览器不是直接用 g r p c 和服务器通信呢?简单的回答是,这其实是个技术限制,说白了就是控制权的问题。 现在的浏览器出于安全和简化的考虑,不允许网页开发者去直接操作网络请求的底层细节,而 grpc 的 高效恰恰需要对 http 的 数据帧进行精细的控制,浏览器不给这个权限, 那 grpc 的 原生客户端就没法在浏览器里直接跑起来。所以 grpc 的 最佳应用场景主要在以下两个地方, 微服务通信王者在数据中心内部服务与服务之间的通信。在这种场景下,它的速度优势被发挥的淋漓尽致。 原声 app native apps 手机上的原声 app, 因为它高效省电,还省流量, 这对移动用户来说体验简直是好太多了。所以,如果你只想记住一件事,那就记住这句话,当你的系统内部服务之间需要相互对话时, g r p c 几乎就是最优解。 这就给我们留下了一个最后的问题,值得我们好好想一想。你看,现在的世界,服务越来越分散,各种设备、各种应用都需要实时的进行通信, 那么像 grpc 这种高性能的框架,未来会不会成为一种新的标准?我们今天看到的会不会就是未来所有设备之间相互沟通方式的雏形呢?这确实是个有意思的话题, 如果你觉得这个视频还有点意思,欢迎在评论区发表你的看法,如果你从这个视频学到了新东西,请点赞、关注、收藏并转发给需要的人,谢谢!

哎,大家好啊,我们继续来讲我们的一个 gip 细节,一个最后的一个模式叫做双流模式。在上面的课程呢,我们主要去讲了一个简单的模式,服务端流的模式和后端流的模式。他这一次课程呢,我们的 来深入啊,来看一下我们的最后一个模式,双脸模式是什么运转呢?双脸模式其实就是呃 服务端模式和扣端模式的一个综合体,我们还是通过一个系列来说明一下我们的一个双流模式是怎么样的,我们还是要通过学生的这一个呃 东西来讲一下啊,就是你弹琴,就是啊,我是一个老师,我把学生 资料啊一个一个的转到服务器,然后服务器呢也要告诉我啊,这个学生已经处理完了,这个学生已经处理完了这样一条一条的数据来回馈给我这个客户端。这种模式就是因为 是因为一个这样的一个场景来来产生的一个这样的一个双流的一个模式。我们来主要看到这个地方啊,他无论是发生的时候还是接收的时候,他都是告诉了你这个是一个礼物。 好,我们来看一下啊,发送礼物的一个模式就是我们把学生的名字还有年龄传上去,然后我们接收到服务端回来的一个理由啊,他就告诉我, 哎,这个是哎服务端的接收到你的用户的名称,年龄,还有哎服务端的一个时间。 好啊,我们一起来看一下实现的一个方式是怎么样的,我们来到这里的时候,我们还是要还是看得到啊,这个地方呢,我们其实是使用了哎,我们课程系的一个客户端流的 这个接受的方式,然后这里呢,我们是使用了一个课程三的啊,一个输出的一个方式, 我们通过一个这样挖呀不断来读取啊这个小摇摆 所有的这个请求,每一次的请求都放入这个历史里面,然后我们把哎接收到的请求啊转就接收到的这个请求,然后重新打包啊,给到一个 一个叔叔的一个对象,把这个对象给回到这个出租流里面去, 就这样就完成了一个呃双向流的一个扶梯端的一个方式,然后在客户端呢,我们主要是看一下我们一个客户端 在客户端呢,其实在这里整一块都是跟各种山一样,就是我们通过客户端来接受那个 服装的一个回过来的一个礼物,但是这里呢,我们会有点不一样,就是我们是想要邮箱来处理啊,哎 服装返回给我们的一个数据是要有限的处理,我们不是把数据抛出去之后再来处理啊,因为你数据传出去之后, 对传出去之后啊都服气的那个信息已经回传完了。所以呢我们必须是要通过一个呃一步啊,通过一个一步 来不断的去哎接受服务端回来的信息,优先来处理接受回来的信息,然后再把我呃需要发的信息 再发送给客户端啊,这个发生给服务端啊,这个地方呢,我们必须通过一个一过来做主意的,然后呢我们要把这里啊,我们通过这个各种各种细碗,我们要把这个 书记啊发射给服务端。好,我们来看一下啊,我们有一个运行的一个结果。 好,我们来看一下我们的课程部啊,这同学是一零,然后呢是时间呢?是由服帖来进行这个服帖,哎,收到这个时间马上会回来了,然后这里的同学是一一那个要写 接下来这个就是我们服务器收到这个时间啊,这个特效,哦,这个是服务器收到的一个时间,这个就是我们在哎输出来的一个时间。 其实一个这样的一个场景呢,它主要应用的是在一些,就是说我传一个数字给 a 这个数据给服务器吧,有服务器人就必须要处理这个事情,之后就要把这个数据会转给客户端,一个这样的一个 夕阳环境,就不断的一个交叉的一个进行了交叉进行的一种环境。哎,好,哎,本期的 gip 系列课程五呢 讲到这里啊,下一期的一个课程有可能会讲 gip c 的一个正好的一种使用的一个方式,哎,等我想清楚,然后把文案想清楚之后呢,我会开这个 g p c 的一个实际应用的一些,哎,谈一些方式来 把这个 gpc 在呃使,怎么样去使用啊?怎么样在哪哪一些地方来更好的一些吸落或者应用来给大家来讲讲中啊,谢谢大家观看了。
