首页>Java>正文

什么是RPC框架?为什么要用RPC?有关RPC面试题都在这详细解答

时间:2019-04-04 15:58:58   来源:上海尚学堂   阅读:
首先恭喜上海尚学堂java培训24期陆同学经过2轮面试,顺利拿到中国银行11K高薪。他有个好习惯,非常善于总结。这不,为了给后来面试的同学一个参考,他总结了他面试时遇到的面试题,并做了详细解答。现在公布出来,分享给大家,祝大家尽早拿到自己喜欢的OFFER。这篇文章就是他整理的面试题之一——RPC框架相关面试题。


一、什么是RPC?

RPC是一种远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议(优点)。比如说两台服务器A和B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

RPC 框架有很多:比如 JAVA RMI、Thrift、Dubbo、grpc 等。


二、RPC 与 HTTP、TCP、UDP、Socket 的区别?

1、 TCP/UDP: 都是传输协议,主要区别是TCP 协议连接需要 3 次握手,断开需要四次挥手, 是通过流来传输的,就是确定连接后,一直发送信息,传完后断开。

2、UDP 不需要进行连接, 直接把信息封装成多个报文,直接发送。所以 UDP的速度更快写,但是不保证数据的完整 性。

3、Http:超文本传输协议是一种应用层协议,建立在 TCP 协议之上。

4、Socket:是在应用程序层面上对 TCP/IP 协议的封装和应用。其实是一个调用接口,方 便程序员使用 TCP/IP 协议栈而已。程序员通过 socket 来使用 tcp/ip 协议。

5、RPC 是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协 议。 是长连接,所以 RPC 的实现可以通过不同的协议去实现比如可以使 http、RMI 等。
 

三、RPC 的运行流程?

比如:客户端发送一个请求(序列化后)通过网络协议到服务端(反序列化操作),服务端处理以后再(序列化后)通过网络协议回到(反序列化)客户端,由于网络协议是基于二进制的,因此需要对数据进行序列化和反序列化的操作。
 

四、为什么需要 RPC?

论复杂度,RPC 框架肯定是高于简单的 HTTP 接口的。但毋庸置疑,HTTP 接口由于受 限于 HTTP 协议,需要带 HTTP 请求头,导致传输起来效率或者说安全性不如 RPC。

http 接口是在接口不多、系统与系统交互较少的情况下,解决信息初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的 http 协议进行传输。但是如果是一个 大型的网站,内部子系统较多、接口非常多的情况下,RPC 框架的好处就显示出来了。

首先 就是长链接,不必每次通信都要像 http 一样去 3 次握手什么的,减少了网络开销(这个问题 在 http2.0 已经被解决不再算是问题了);
其次就是 RPC 框架一般都有注册中心,有丰富的 监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。

再者来说就是安全性。

最后就是流行的服务化架构、服务化治理,RPC 框架是一个强力的支撑
。系统做大了,都是分开部署,单独上线的。RPC 的核心并不在于使用什么协议。RPC 的目的是让你在本地调用 远程的方法,而对你来说这个调用是透明的,你并不知道这个调用的方法是部署哪里。

通过 RPC 能解耦服务,这才是使用 RPC 的真正目的。RPC 的原理主要用到了动态代理模式,至 于 http 协议,只是传输协议而已。

这就是陆同学总结整理出来有关RPC面试题及解答,这只是其中一部分,其余后续再慢慢发布,希望对大家有所帮助。

联系客服小姐姐可以免费获取Java学习资料和免费试学机会,想学习拿高薪,就行动起来吧!
分享:0