粉丝4.0万获赞20.4万

哈喽,大家好,我是麦克。上周有个小伙伴去面试的时候被问到 rpc 协议和 agb 协议的区别这个问题,然后 在我的粉丝群里面引起了很多的讨论,最后我发现其实很多小伙伴都不能很好的去回答这个问题,所以今天我就拿这样一个面试题给大家做一个分享。大家之所以对这两个协议搞不清楚,其实我认为的原因是在目前的微服加工里面,我们去实现微服之间的通信的时候, 我们是可以直接使用 rpc 框架,也可以直接去使用基于 app 协议的 restfo 接口。很多小伙伴认为 apc 协议和 hp 协议都能够去实现远程数据的交换,那么这两者去实现对比就很正常了。 但是我想告诉大家,这两个并不是同一个维度的技术。 ipc 的中文全程叫远程过程钓鱼协议,它的核心目标是让开发人员在进行远程方法钓的时候,就像钓 本地方法一样,不需要为了去额外完成这个交互去做过路的编码。所以为了达到这个目的,就有了这样一个 rpc 协议的模型。 在这个模型中我们可以看到像克拉的 stop, 他是作为客户端的一个存根去代理客户端的请求,然后通过派克做序列化,最后通过远程通信协议把序列化的数据传输到福气上。注意这里用到了远程通信协议, 这个远程通信协议既可以使用 tcb 协议去传输,也可以使用 hgb 协议传输, 所以通过这样一个模型就实现了 rpc 的这样一个目标,让开发人员没有任何感知的情况下去实现远程方法调用,而 hb 协议是为了外部浏览器和外部服气之间通信去设计的一个通行协议,它底层仍然采用 tcp 协议传输,而在 tcp 协商自己定义了通信报文的一个规范,我们可以使用 hp 协议来实现跨网络节点的数据传输,所以这就是这两个协议的一个特点。所以通过这样一个分析,我们发现 rpc 协议它并不是一个通信协议, apc 协议才是通信协议, 而 rpc 定义的是一个远程过程钓鱼协议,它的底层通信去实现数据传输,它得依赖于一些成熟的通信协议,比如说 hb 协议,甚至我们可以直接去在 tcb 协议上去做自定义的包围协议,这些都可以。 所以我才在前面说 ipc 和 hp 这两个并不是同一个维度的协议,这两者并没有什么可比性。好了,今天的分享就到这里,另外,我把二零二二年最热门的一千道面试题整理成了面试手册,有需要的小伙伴可以在我的评论区置顶中去领取。

每天一道面试题,什么是啊 pc 调用啊? pc 就是远程过程调用。对于加瓦程序而言,啊 pc 就是远程方法调用,表示一个方法调用远程的另外一个方法。微服务架构中的一个服务调用另外一个服务就可以用啊 pc 调用。 rpc 调用与 http 调用的区别? http 调用使用的是 http 协议,是网络七成中的应用层协议。 http 协议规定的数据传输的格式 rascophone 风格就是通过 http 协议来实现的。 rpc 不是网络层面的协议,而是更上层的灵活的通信协议。 rpc 调用可以自定义数据格式,数据传输方 是只要能保证调用到远程方法即可。

前几个视频中都有测试 r p c 方法,说明使用微服务开发过程中, r p c 方法测试是不可缺少的。目前 g r p c 客户端测试工具不多,常见的有 g r p c、 u r, 要了 evans、 bloom、 r p c 等, 各有各的优缺点,感觉使用还不够方便,也可能有更好的 grpc 客户端测试工具。个人觉得如果测试 rpc 方法像在 swag 界面测试 hdtp 接口那样方便就可以了。 使用过 swag 的话都知道 swag 有个 jason 文件,这个 jason 文件是根据在代码的描述信息生成的,只要填写和更新描述信息, swag 这个的 hdtp 接口与实际接口代码同步匹配的。同样的 rpg 方法代码是根据 proto 文件描述信息生成的,肯定也可以生成与 grpg 服务代码同步匹配的 rpg 客户端测试代码。 因此需要设计一个 protot 的插件,这个插件专门生成客户端测试代码 client test 点购文件,可以把这个文件看作是 swagger 的真实文件, 因为生成的是客户端测试文件 test 点购代码,所以不仅可以在购量 id 界面上使用,也可以在终端使用 go test 命令,而且两种方式使用都比较方便。首先在配置文件,填写 rpc 服务配置, 接着再测试代码,填写参数值,准备好这两个步骤后就可以测试了。如果使用勾任 id 的话,直接点击旁边绿色按钮测试。 与 swag 界面测试 hddp 接口方式是比较类似的,如果使用命令进行测试,只需要执行命令。 go test 刚乱指定 ipc 函数名称,省去填写一大堆参数的麻烦。 前面视频中的 ipc 服务都是在本地运行,测试比较简单。如果 ipc 服务部署到了远程服务器, 线上服务排查问题时候,想测试某一个 rpc 方法,应该怎么测试呢?有可能部署的环境是二进制部署,刀口部署,可以拔 s 部署。 不管哪一种部署,通常分为有三类,如这个图所示,第一类,本地可以直接访问远程 ipc 服务的 ip 和端口。第二类,本地不能直接访问在同一个内网的服务器,可以访问 ipc 服务 ip 和端口。 第三类,只能在容器内网访问 ipc 服务的 ip 和端口,针对每一类情况都有对应的解决测试 ipc 的方式。 下面简单的演示第一类情况的 ipc 服务测试。在一个局域网内的虚拟机运行 ipc 服务来模拟远程部署, 已经提前生成了一个 rpc 服务项目代码。在终端者使命令 make finally package 打包所需的部署文件, 把压缩包上传到虚拟机 a p p 目录下, 解压文件 改为可执行脚本。 在后台运行 rpc 服务, 可以查看输出日字或者 r p c 服务监听端口来判断是否启动成功。 回到 rpc 服务代码这里,进入 confix 目录下,打开配置文件,找到 grpc client 位置,在 host 这段填写虚拟 gip 地址, 在 pod 字段填写 r p c 服务端口,进入 internal service 目录下,打开测试文件,随便选择一个 r p c 方法测试。例如 这是注册函数服务,还没有做参数教练,随便填写参数, 点击绿色按钮测试, 查看输出结果,返回数据正常。取得 r p c 方法的测试也是一样,填写参数,然后测试。 除了可以测试,还支持每个 rpc 方法的性能压测,例如压测注册函数,填写相关参数, 点击绿色按钮压刺, 把这个压车报告文件路径复制到浏览 去,查看具体的压刺结果。以上是针对第一类情况,在本地测试,远程 ipc 服务比较简单, 接着演示第二类情况,在本地不可直接访问,但在局域网内有一个服务器可以直接访问的情况。以刚才的虚拟机内的 rpc 服务为例,压缩代码, 切换到虚拟机 tmp 目录,把代码上传到虚拟机 tmp 目录。 解压代码, 检查下去你的环境是否安装了 go, 如果没有安装的话,要先安装,然后执行命令。 gomo 的胎底更新依赖包, 打开配置文件 conflict use, 点 yml, 找到 g 二 p c cline 位置,在 host 自 段填写 r p c 所在的服务 ip 地址。在破字段填写 r p c 服务端口, 进入到 internal service 目录下,打开 user clientes, 点 go 测试文件,查看测试函数名称。 为了方便测试,打开两个终端, 例如测试登录方法, 执行 go test 命令测试, 从这次结 果看,测试成功取得 r p c 方法的测试也是一样,填写参数,然后测试。针对第三类情况测试,也就是在道口或者 k 八 s 部署, 并且使用了内部的 ip 和端口,也没有代理网络,无法直接达到 rpc 服务。 解决办法是需要额外构建一个购环境的道可镜像,镜像包含了 rpc 服务代码,让测试容器运行在可以直接访问 rpc 服务环境中,也就是在同一个网段,然后在容器里面执行 go test 命令测试 使用 spa 工具生成的 r p c 服务代码本身支持自动构建这样的 r p c 测试容器镜像。 this meaning make help。 可以看到这个命令是自动构建 r p c 测试容器镜像的。 构建出镜像后,然后部署到可以访问 rpc 服务的环境,进入容器里执行 go text 命令进行测试。这种方式显然是有点麻烦,在这里就不演示了。 如果能代理到本地或指定服务器访问 rpc 服务,就不需要构建容器镜像来测试这种解决办法了。 总的来说,测试以部署的 r p c 服务方法,根据部署环境选择不同的测试方式。如果本店 网络可以直接到达 rpc 服务,直接在勾量 id 界面上测试。如果不能本地测试,可以在局域网内访问,使用 go test 命令测试。 对于内网的容器部署的 rpc 服务,需要额外构建 rpc 测试容器进项进入运行的 rpc 测试容器里,用 go test 命令测试。 下一个视频介绍如何生成 rpg 网关服务代码。

微服务的核心就是服务,那么既然是服务,就会有服务消费者和服务提供者,服务消费者和服务提供者通过远程调用方式相互通信。微服务常见的远程调用技术有以下两种方式, 一种是二 pc 方式,另一种是 http 方式。那么这两种调用方式有什么区别呢?首先我们看一下他们所使用的协议。 二、 pc 方式可以基于 tcp 协议,也可以基于 http 协议, http 方式只能基于 http 协议。 http 协议属于游戏的第七层,比较高层的一个协议。 接下来我们再看一下传输效率上的区别。二 p c 的传输效率表高于 h t t p 二 p c e 使用自定义的 t c p 协议可以让请求豹纹体积更小,或者使用 h t t p 二协议也可以很好 好的减少豹纹的体积,提高传输效率。性能消耗方面的区别 rpc 可以基于 zif 实现高效的二进制传输, http 大部分是通过刺来实现的,字节大小和序列化耗时都比 zif 要更消耗。性能 负债均衡方面的区别 rpc 基本自带了负债均衡策略,比如说我们使用的 double, 内部就帮我们实现了各种各样的负债均衡策略, h t t p 需要自己配置 and gink 来实现负债均衡。 那么在日常工作中呢?如果对性能要求很高,使用 rpc 比较好。如果对性能要求不高,使用 http 也可以。如果我们的服务比较多,使用 rpc 还要考虑到服务框架的统一问题。

哈喽,大家好,那有同学问我啊,什么是啊? p c, 然后如何去设计一个啊 p c 的框架这样子。首先啊, p c 啊,我们翻译的话就是远程过程调用,但实际上如果说我们是 面相对象的话啊,就是加瓦这种语言里面,他就应该翻译成为远程方法调用,因为在加瓦里面我们是没有过程的,对不对?再可能一些蜥蜴啊啊,包括其他的语言里面他是有过程这个概念的啊,所以叫做远程方法调用就可以了。 对了,本视频的文档我已经整理好了,并且与往期内容一起汇总成了二零二三年最新嘉华面试文档,放在了视频的最后面, 坚持看完一定对你有帮助。好,那我们继续。好,那么,呃,相对于我们本地方法钓用对不对啊?本地方法钓用就比较简单嘛,就是一个进程内的啊,这个方法可以去很快的就可以钓到另外一个方法,那 远程方法调用就更加简单,就是一个进程里面的方法,我要想办法,我去调用到另外一个进程里面的方法,就说,哎,你可以通过很多的一些呃,方式,但是我们目前来说用用的最多的方式就是通过网络, 对,就是通过说 ok 的,通过网络的方式来实现这个功能,所以说我们要去讲两个进程,现在有两个方法,那么我通过网络来了,我到底要怎么去做呢?其实很简单,就是 你,呃,比如说调用者这个进程,你要调用另外一个方法,那么你肯定得通过网络方式去发送,比如说你要调用的是哪个类里面的哪个方法? 哎,你调的这个方法的名字是什么?你调的这个方法的传的参数是什么?哎,这些几个信息你肯定都要通过网络的方式发送给相对应的对方的那个进程,那个进程他才知道他要执行哪个方法,然后把结果返回给你,对不对?好?当然, 呃,所以啊,我们说的 rpc, rpc 它其实就是这么一个过程,具体的你到底怎么去实现这个功能?你可以有自己的实现,比如我们刚刚说的,你要去发送数据,那么你可以直接基于搜给他去发送这个数据,你也可以利用 http 来发送这个数据,你甚至可以用 vivo service 来发送这个数据, 都是 ok 的,明白吗?所以说啊,还包括我们啊,要发出这个数据,你要进行序列化和反序列化,那么你通过什么机制来进行序列化和反序列化?这也是你在考虑的时候,你在设计一个啊, pc 框架的时候,你所要去,呃, 设计类,你所要去确定哪件事情?对,包括我们所发送的数据,中间啊,你是不是也可以自己去携带一些你们公司内部啊,经常需要用的一些,呃,比如说请求 id 啊,比如说部门 id 啊,比如说业务相关的呀,对,哎,你也可以涉及到你要发送的这个 数据里面,去形成你们公司内部的一个规范,也都是 ok 的,对不对?所以说还有我们要设计一个 rpc 框架,哎,你说白了就是去调用嘛?对,那么,呃相对应的一些,呃,就是调用的从事啊啊,包括容错呀等等等等,哎,你都要考虑进去。所以说你要设计一个 rpc 框架的话,就是 他考虑的东西很多啊,所以对于大家而言你最好呢也去参考一下,像 double 呀啊,包括像 spring cloud 里面的一些功能呀,其实都可以去多多学习一下,然后呢就可以设计到你自己的啊 pc 框架里面去,好吧?

一位工作六年的小伙伴,面试的时候呢,被问到这一道题,说谈谈你对 rbc 的理解。在分布式微服加工中,远程通信是最基本的需求,我们常见的远程通信方式呢,有瑞士加过的 htv 协议,以及基于 abc 协议的 abc 框架。那么今天呢,我给大家分享一下我的理解, 大妹子你的文字版我已经整理在二十万字的文档里面了,有需要的小伙伴可以在评论区领取。 了解阿贝斯之前,我首先给大家介绍一下什么是远程家用。很多小伙伴会误以为远程家用是跨越物理距离上的远程, 实际上准确来说,远程占用是指跨进程的功能占用,而跨进程呢,可以理解为同一台机器上的多个进程,多个 gvm 或者是多台机之间的多个进程。那什么是 apc 呢? apc 的全称是 remote pro, 翻译过来 叫做远程过程家用,它是一种通过网络从远程计算机程序上去获取服务,而不需要去了解代码的网络技术的实现的一种协议。凡是符合这种协议的框架,我们都称之为 rpc 框架。 通俗理解呢,就是 a 计算机提供一个服务, b 计算机呢,像专用本地服务一样去专用 a 计算机提供的服务,这就是 rbc 的主要作用。其实 rbc 人用呢,在很早之前就出现了,在四十年以前,也就是一九八一年的时候,有一家叫做 nailson 的公司提出, 并且呢把它应用到了分布式系统之间的一个通信协议。要实现 rpc, 我们需要通过网络进行数据传输,并且呢要对调用工程进行封装, 现在别人流行的 apc 框架,一般都是采用 tcp 协议作为底层的传输协议,当然其他协议呢,也是可以的,比如说 udprpc 协议呢,强调的是过程, 家用家用的过程呢,对用户来说是完全透明的,用户不需要关心家用细节,可以像家用本地服务一样去家用远程服务。来看这一张图, 一个完整的 app 协议包含了四个组件,分别是 thattettetwetwttythatbe。 克莱的客户端表示服务的调用方,社务是服务端,表示真正的服务提供方。而克莱的斯大伯呢,表示客户端的成功,专门用来存储服务端的地址信息,然后再将服务端的请求参数打发成网络消息,也就是训练化的过程。 最后呢,通过网络远程发送给服务提供方。最后是大补呢,表示服务端的成功,他用来接收客户端发过来的消息,然后呢,去解析这些消息内容,也就是反序列化的过程,并且呢,去调用本地方法。 rbc 在分布系统中有非常广泛的应用,我给大家 总结为五个方面,第一个呢是分布式系统的网络通信。第二个呢是分布式子系统之间的一个服务距离。第三个呢是分布式负载均衡和流控。第四个呢是服务发现与注册。第五个呢,是构建分布式的调试环境。 在互联网应用开发中,随着业务的复杂度增加,一般都会采用分布式架构。而分布式架构的核心呢,就是利用多台普通的计算机组成一个庞大的复杂计算网络, 提供高并发、高性能、高可用的系统能力支撑,在分布式架构中,原本的单体应用服务呢,会被拆分成多个独立的微服进行部署,而分布式在计算机网络上呢,这些服务必然需要进行网络通信和数据交互。 而 ipg 框架就是为了去解决分布式架构中各个服务之间的网络通信等问题的框架。在架完用中 gdk 一点一版本 的时候呢,就提供了对 rbc 的知识框架叫做啊 mi, 由于 imi 呢不能实现跨语言的远程交用,后面就广泛采用了外部设备时来实现远程家用。但是呢,外部设为时需要定义非常复杂的是盖某文件,从而导致无效的数据内容呢过于臃肿。 之后呢,就被 hddp 加上节省的方案所代替的 apc 发展到现在实现的方式呢非常多样,但是呢,基本上都实现了跨语言的远程家用。一般来说, apc 框架都应用于大型的体验,只有在业务复杂度和用户体验都比较大的时候,需要对服务进行结偶,从而达到扩展性强,部署灵活的目的。 目前比较流行的开源 ipc 框架有酷狗的 gipc, facebook 的 frifter 以及阿里巴巴的 double, 这些框架呢,除了提供基础的远程通讯功能以外,还在系统性能、传播效率、服务治理等方面做出了一些优化 设计。比如说阿里开元的 apc 框架 double 就提供了非常丰富的服务助理功能。好了,看完本期视频以后,相信各位小伙伴对 aapc 拥有了一个更加清晰的认识和了解。在面试的时候,如果再被问到 apc 的问题,是不是你也知道怎么回答了呢?以上就是我对 apc 的理解, 我是被变成单位的文艺汤,如果我的分享对你有帮助,请你动动手指,一经三年,分享给更多的人,关注我,面试不再难!

rpc 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。比如两个不同的服务 ab 部署在不同的机器上,那么服务 a 如果想要调用服务 b 中的某个方法,该怎么办呢?使用 http 请求当然可以,但是可能会比较慢,而且一些优化做的并不好。 rpc 的出现就是为了解决这个问题。

唐老师,有粉丝搞不清 hdtp 和 ipc 到底有什么区别,你能给解释一下吗?好的,首先呢,我觉得最大的区别就是传输协议的区别, ipc 呢,没有规定具体用什么协议,但是呢,它可以基于 tcp 协议,也可以基于 http 协议, 或者说 http 也是 rpc 的一种。那么 rpc 的主要目的呢,是用于获取远程机器的程序的执行结果,大部分情况下呢,是利用 soca 的 apr 来实现的,而 soca 的呢,又是基于 tcp 协议来实现, tcp 呢,是网络协议中比较底层的一种协议。 那下面呢,简单介绍一下 ipc 的整个的一个调用的步骤。为了帮助大家在这个求职旺季顺利上岸,我特意整理了一份 java 程序员求职初期手册,包含五十万字的高频面试题,点立模板和学习路线图,大家可以去评论区的字典中领取。首先第一步呢, 就是服务的调用方和服务的提供方会建立一个收费的一个连接。然后第二步呢,服务的调用方通过调用收费的 api, 将调用的端口名称呢,方法名称呢和参数的序列化以后,传递给我们的服务提供方。 第三步呢,就是服务停放方会进行一个反射电话,然后再利用反射呢去调用相关的方法。第四步呢,就是将相关的一个交用结果,然后返回给我们的服务停放方。 那么 http 呢,基于 http 协议来实现的, http 协议呢,是属于 osi 协议的第七层,它是一个比较高层的协议,属于应用层。 那还有没有其他的区别呢?当然还有比如说传输效率的区别,那么 r p c 的传输效率呢,比 h d p 要高很多, r p c 如果使用 t c p 底层协议的话,他仅求的包纹体积呢会更小,所以呢传输速度呢也会更 快,那如果使用 http two 的话,也可以去减少爆满的体积,也能够提高一些传输的效率。那么如果是基于 http 一点一协议的话,在他的请求中呢,会包含很多荣誉的内容。当然如果要实现 app 的方式呢,也有很多种,比如说他可以基于 draft 来实现一些高效的凹进制的传输。 http 实现 rpc 呢,基本上都是基于节省来实现的,那么节省的这些大小和现代化的耗时,相对于 rap 的来说的话,都要更加消耗性能。 最后一点呢,就是负载均衡的实现,因为 r p c 呢,本身是为服务治理而生的一种通信机制,所以一般的 r p c 框架呢,都会自带负载均衡的这么一个功能。而 h t t b 呢,必须要去配置,比如说 antix 啊哈 brox 呀等等,这些才能够去满足负载均衡的需求。 以上呢,就是我对 http 和 rpc 的一个理解,感谢大家的关注和点赞,如果各位汤粉们还有需要补充的话,可以在评论区留言。

