gRPC基础讲解

news2024/11/18 6:41:00

一、gRPC原理

1、什么是RPC

        RPC 即远程过程调用协议(Remote Procedure Call Protocol),可以让我们像调用本地函数一样发起远程调用。RPC 凭借其强大的治理功能,成为解决分布式系统通信问题的一大利器。

        gRPC是一个现代的、高性能、开源的和语言无关的通用 RPC 框架(g就是谷歌的意思),基于 HTTP2 协议设计,序列化使用 PB(Protocol Buffer),PB 是一种语言无关的高性能序列化框架,基于 HTTP2+PB 保证了的高性能。

        上面的图就是一个客户端远程连接一个服务器,调用它的函数。由于使用了 PB 所以双方都要有 PB 序列化和反序列化。那么上面的操作就是通过PB序列化后,通过网络HTTP2发送给服务端,然后解析并执行,最后返回。

2、gRPC的特性

1. gRPC基于服务的思想:定义一个服务,描述这个服务的方法以及入参出参,服务器端有这个服务的具体实现,客户端保有一个存根,提供与服务端相同的服务。

2. gRPC默认采用protocol buffer作为IDL(Interface Description Lanage)接口描述语言,服务之间通信的数据序列化和反序列化也是基于protocol buffer的,因为protocol buffer的特殊性,所以gRPC 框架是跨语言的通信框架(与编程语言无关性),也就是说用Java开发的基于gRPC的服务,可以用 GoLang编程语言调用。

3. gRPC同时支持同步调用和异步调用,同步RPC调用时会一直阻塞直到服务端处理完成返回结果, 异步RPC是客户端调用服务端时不等待服务段处理完成返回,而是服务端处理完成后主动回调客户端告诉客户端处理完成。

4. gRPC是基于http2协议实现的,http2协议提供了很多新的特性,并且在性能上也比http1提搞了许多,所以gRPC的性能是非常好的。

5. gRPC并没有直接实现负载均衡和服务发现的功能,但是已经提供了自己的设计思路。已经为命名 解析和负载均衡提供了接口。

6. 基于http2协议的特性:gRPC允许定义如下四类服务方法:

1. 一元RPC:客户端发送一次请求,等待服务端响应结构,会话结束,就像一次普通的函数调用这样简单。

2. 服务端流式RPC:客户端发起一起请求,服务端会返回一个流,客户端会从流中读取一系列消息,直到没有结果为止。

3. 客户端流式RPC:客户端提供一个数据流并写入消息发给服务端,一旦客户端发送完毕,就等待服务器读取这些消息并返回应答。

4. 双向流式RPC:客户端和服务端都一个数据流,都可以通过各自的流进行读写数据,这两个流是相互独立的,客户端和服务端都可以按其希望的任意顺序读写。

3、gRPC的使用场景

服务间通信:gRPC非常适合用于微服务架构中,为服务之间的通信提供高性能、类型安全和易于维护的通信机制。它支持多种编程语言,使得不同微服务可以使用不同的编程语言实现,同时轻松地进行跨语言通信。

分布式系统通信:在分布式系统中,gRPC可用于不同节点之间的通信,包括数据同步、任务分发和集群管理等场景。

4、gRPC设计的动机

1、协议可插拔:不同的服务可能需要使用不同的消息通信类型和编码机制,例如,JSON、XML和 Thirft,所以协议应允许可插拔机制,还有负载均衡,服务发现,日志,监控等都支持可插拔机制。

2、阻塞和非阻塞:支持客户端和服务器交换的消息序列的异步和同步处理。这对于在某些平台上扩展和处理至关重要。

3、流处理:存储系统依靠流和流控制来表达大型数据集,其他服务,如语音到文本或股票行情,依赖于流来表示与时间相关的消息序列。

4、流控制:计算能力和网络容量在客户端和服务器之间通常是不平衡的。流控制允许更好的缓冲区管理,以及过度活跃的对等体提供对DOS的保护。

5、互通性:报文协议必须遵循普通互联网基础框架。

二、数据封装和数据传输问题

1、网络传输中的内容封装数据体积问题

我们都知道json格式,json格式更利于人的观看,而Protobuf是二进制数据,更加利于机器。

JSON

优点:在body中用JSON对内容进行编码,极易跨语言,不需要约定特定的复杂编码格式和Stub文件。 在版本兼容性上非常友好,扩展也很容易。

缺点:JSON难以表达复杂的参数类型,如结构体等;数据冗余和低压缩率使得传输性能差。

因此gRPC丢弃json、xml这种传统策略,使用 Protocol Buffer,gRPC是Google开发的一种跨语言、跨平台、可扩展的用于序列化数据协议。

2、HTTP效率

HTTP1.0:每个请求都需要与服务器建立一个新的TCP连接,并且在请求完成后立即关闭连接。这意味着如果需要发送多个请求,就需要建立多个TCP连接,这会增加网络开销和延迟。尽管HTTP1.0默认使用无连接,但通过在请求头中设置Connection字段为Keep-Alive,可以保持TCP连接不断开,从而减少网络开销和延迟。

HTTP1.1 Pipeline(顺序):默认支持长连接,允许在同一个TCP连接中发送多个请求和接收多个响应,但是在同一个TCP连接中,没办法区分response是属于哪个请求,一旦多个请求返回的文本内容混在一起,则没法区分数据归属于哪个请求,所以请求只能一个个串行排队发送(管道化技术)。这直接导致了TCP资源的闲置。虽然服务器仍然需要按照请求的顺序发送响应,但管道化技术可以减少网络延迟和提高传输效率。

HTTP2.0 Duplexing (谁快谁先):提出了流的概念,每一次请求对应一个流,有一个唯一ID,用来区分不同的请求。基于流的概念,进一步提出了 帧 ,一个请求的数据会被分成多个帧,方便进行数据分割传输,每个帧都唯一属于某一个流ID,将帧按照流ID进行分组,即可分离出不同的请求。这样同一个TCP连接中就可以同时并发多个请求,不同请求的帧数据可穿插在一起,根据流ID分组即可。HTTP2.0基于这种二 进制协议的乱序模式 (Duplexing),直接解决了HTTP1.1的核心痛点,通过这种复用TCP连接的方式,不用再同时建多个连接,提升了TCP的利用效率。

gRPC采用HTTP2.0,相对于HTTP1.0 在更快的传输更低的成本两个目标上做了改进。有以下几个基本点:

HTTP2 未改变HTTP的语义(如GET/POST等),只是在传输上做了优化。

引入帧、流的概念,在TCP连接中,可以区分出多个request/response。

一个域名只会有一个TCP连接,借助帧、流可以实现多路复用,降低资源消耗。

引入二进制编码,降低header带来的空间占用。

三、gPRC四种模式

1、一元RPC模式

                一元 RPC 模式也被称为简单 RPC 模式。在该模式中,当客户端调用服务器端的远程方法时,客户端发送请求至服务器端并获得一个响应,与响应一起发送的还有状态细节以及 trailer 元数据。

2、服务器端流RPC模式

        在一元 RPC 模式中,gRPC 服务器端和 gRPC 客户端在通信时始终只有一个请求和一个响应。在服务器端流 RPC 模式中,服务器端在接收到客户端的请求消息后,会发回一个响应的序列。这种多个响应所组成的序列也被称为“流”。在将所有的服务器端响应发送完毕之后,服务器端会以 trailer 元数据的形式将其状态发送给客户端,从而标记流的结束。

比如我们搜索一块地方的全部旅游景点,我们发送一个请求,那么会返回多个旅游景点。

3、客户端流RPC模式

        在客户端流 RPC 模式中,客户端会发送多个请求给服务器端,而不再是单个请求。服务器端则会发送一个响应给客户端。但是,服务器端不一定要等到从客户端接收到所有消息后才发送响应。基于这样的逻 辑,我们可以在接收到流中的一条消息或几条消息之后就发送响应,也可以在读取完流中的所有消息之后再发送响应。

客户端流RPC模式,适用于客户端需要连续发送大量数据的场景。

4、双向流RPC模式

        在双向流 RPC 模式中,客户端以消息流的形式发送请求到服务器端,服务器端也以消息流的形式进行响应。调用必须由客户端发起,但在此之后,通信完全基于 gRPC 客户端和服务器端的应用程序逻辑。

本期gRPC的基础讲解完毕,后面我会出gRPC同步和异步的代码讲解。0voice · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电路学习——反激电源(2024.09.29)

参考链接1: XXX 在此感谢各位前辈大佬的总结,写这个只是为了记录学习大佬资料的过程,内容基本都是搬运的大佬博客,觉着有用自己搞过来自己记一下,如果有大佬觉着我搬过来不好,联系我删。 电路学习——反激电源&#xf…

基于大数据的高校新生数据可视化分析系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

生信科研,教授(优青)团队一站式指导:高通量测序技术--农业植物基因组分析、组蛋白甲基化修饰、DNA亲和纯化测序、赖氨酸甲基化

组蛋白甲基化修饰工具(H3K4me3 ChIP-seq) 组蛋白甲基化类型也有很多种,包括赖氨酸甲基化位点H3K4、H3K9、H3K27、H3K36、H3K79和H4K20等。组蛋白H3第4位赖氨酸的甲基化修饰(H3K4)在进化上高度保守,是被研究最多的组蛋白修饰之一。 DNA亲和纯化测序 DNA亲…

QT设计中文输入法软键盘DLL给到C#开发步骤

开发目的:本文提供解决触摸屏C#程序中无法输入中文问题,中文拼音采用开源的谷歌输入法程序、使用QT编译中文输入法界面和中文输入法接口给到C#使用。 开发步骤: 1、QT中设计字母和字符输入界面 2、QT中设计数字输入界面 3、QT中封装调用谷歌…

神秘“蓝莓“模型横空出世:AI文生图界的新霸主还是营销噱头?

Ai 智能办公利器 - Ai-321.com AI文生图领域近日风起云涌,“蓝莓”模型横空出世,迅速占领行业制高点,成为万众瞩目的焦点。这个神秘而强大的模型,在众多AI竞技高手中脱颖而出,一举超越了OpenAI的“草莓”、Flux.1等强…

基于springboot+小程序的儿童预防接种预约管理系统(疫苗1)(源码+sql脚本+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 本儿童预防接种预约微信小程序可以实现管理员和用户。 1、管理员功能有个人中心,用户管理,儿童信息管理,疫苗信息管理,儿童接种管理&#x…

C++中的多态(详细讲解)

目录 一、多态的概念 1、多态的概念 二、多态的定义以及实现 1、多态的构成条件 2、虚函数 3、虚函数的重写 1) 虚函数重写的理解 2)虚函数重写的两个例外 1. 协变(基类与派生类虚函数返回值类型不同) 2. 析构函数的重写(基类与派生类析构函数的…

个人获取Wiley 、ScienceDirect、SpringerLink三个数据库文献的方法

在同学们的求助文献中经常出现Wiley 、ScienceDirect、SpringerLink这三个数据库文献。本文下面就讲解一下个人如何不用求助他人自己搞定这三个数据库文献下载的方法。 个人下载文献首先要先获取数据库资源,小编平时下载文献是通过科研工具——文献党下载器获取的数…

情感短视频素材上哪里找?推荐几个热门情感视频素材资源网站

抖音上热门的情感短视频都是怎么做的?情感视频素材都在哪里可以下载呢?作为一名资深的视频剪辑师,今天就跟大家聊聊那些可以下载情感素材高清无水印的网站,如果你也在苦苦找寻情感素材,快来看看吧~ 1. 稻虎…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月28日新模型预测第101弹

经过100多期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,100多期一共只错了12次,这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xf…

黑神话热潮,能引发GPU狂欢的才是杀手级应用

黑神话与GPU技术的共舞:游戏推动硬件创新的新时代 ©作者|Steven 来源|神州问学 黑神话掀起游戏风暴 《黑神话:悟空》自上线以来,可谓是在游戏界掀起了一场前所未有的风暴。上线后就蝉联 Steam 热销榜首,晚间同时在线人数超…

打造自己的解析大模型:模型的安装与推理

RAG系统中要快速构建AI助理,首先要高效、准确地建立知识库,而实现这一点的关键便是具备一个功能强大的文档解析器。在上一篇中,我们介绍了PdfParser,本篇将深入讨论该解析器所依赖的模型,以及如何在Windows环境中安装并…

深度学习新手必备:Easy-PyTorch 助你轻松入门 PyTorch

深度学习初学者必备工具,简化代码编写,提升学习效率! 对于刚入门深度学习的小伙伴,PyTorch 是一个强大的工具,但同时也伴随着大量复杂的代码和不小的学习曲线。你是否曾因为不知道如何快速实现模型而感到困惑&#xff…

4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1

目录 前序工作 1. 服务器项目名和本地一致 2. pycharm连接服务器 3. 本地项目对应到服务器项目 4. 简单测试一下同步效果 同步成功 前序工作 在同步到服务器之前,得确保已经完成以下几个前置步骤: 1. 租一个云服务器,可参考&#xff1a…

如何在云端地球建模云平台利用无人机航拍照片进行三维建模?

第一步:导入照片 进入云端地球工作台,选择【场景建模】将航拍的照片组导入。 输入模型名称(若无则无法上传),点击【上传】,将照片上传到云端服务器。 第二步:创建任务 上传成功后点击开始处理…

Qt Creator安卓环境配置【筑基篇】

1.前言 由于我的Qt Creator目前就先的14版本IDE老是存在各种莫名奇妙的bug,我都已经成为官方Qt Forum官方论坛的常客了。有一说一新版本的各种设置不小心误触是真的坑死人。不说了给我小主机配置安卓环境了。小主机系统版本window11-23H,Qt-Creator版本是13.01版本…

Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )

文本目录: ❄️一、哈希表: ☑ 1、概念: ☑ 2、冲突-概念: ☑ 3、冲突-避免: ☞ 1)、避免冲突-哈希函数的设计: ☞ 2)、避免冲突-负载因子调节(重点): ☑ 4、冲突-解决&…

太绝了死磕这本大模型神书!

今天给大家推荐一本大模型神书,就是这本:《大语言模型:基础与前沿》 书籍介绍: 本书深入阐述了大语言模型的基本概念和算法、研究前沿以及应用,涵盖大语言模型的广泛主题,从基础到前沿,从方法…

Colorful/七彩虹将星X15 AT 23 12代 4060显卡 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能,自动重建COLORFUL RECOVERY功能,恢复到新机开箱状态。 【格式】:iso 【系统类型】:Windows11 原厂系统下载网址:http://www.bioxt.cn 注意:安装系统会…

优秀的拆分C++

题目: 样例解释: 样例1解释 6422221 是一个优秀的拆分。注意,6222 不是一个优秀的拆分,因为拆分成的 3 个数不满足每个数互不相同。 思路: 题目大致意思是说给定一个正整数NN,让你用二进制表示(…