远程服务调用(RPC)高频面试题!(有RPC项目必看!)

之前给大家推荐过手写RPC的项目,项目资源来自慕课

除此之外,比如Guide哥牛客的声哥等,也都出过对应的教程。

几年前香饽饽的项目,如今变得烂大街。

周日小白在帮大家修改简历的时候,发现很多简历上都有RPC。

  • 那么大家对于RPC真正了解多少呢?
  • 是否去阅读过经典RPC框架源码呢?
  • 那么面试又会有哪些比较高频的问题呢?

今天小白就给大家盘点一些高频关于远程服务调用的面试题。

1.微服务之间如何进行通信?

参考答案

  • 单体项目时:一次服务调用发生在同一台机器上的同一个进程内部,也就是说调用发生在本机内部,因此也被叫作本地方法调用。

  • 微服务项目时:服务提供者服务消费者运行在两台不同物理机上的不同进程内,它们之间的调用相比于本地方法调用,可称之为远程方法调用,简称 RPC

2.RPC了解多少?都有哪些?

参考答案:RPC全称称: Remote Procedure Calls 远程服务调用,是进行服务之间相互调用的。

受限语言的开源 RPC 框架

跨语言平台的开源 RPC 框架主要有以下几种。

  • GRPCGoogle 2015 年开源,支持多种语言。(官方文档:https://grpc.io/docs/)
  • Thrift:最初Facebook 开发的内部框架,2007 年贡献给了 Apache 基金,成为 Apache 开源项目之一,支持多种语言。
    Dubbo架构

3.RPC包含哪些部分?

参考答案:一个RPC框架要包含

  • 客户端和服务端建立网络连接模块( server模块、client模块 )
  • 服务端处理请求模块
  • 协议模块
  • 序列化反序列模块。

4.设计一个RPC会考虑哪些问题?

参考答案:设计一个RPC框架,可以从PRC包含的几个模块去考虑,对每一个模块分别进行设计。

  • 客户端服务端如何建立网络连接
  • 服务端如何处理请求
  • 数据传输采用什么协议
  • 数据该如何序列化反序列化

gRPC架构

5.服务端如何处理请求?有哪些方式?

参考答案:服务端接收到客户端的请求后,常见的处理方式有三种,分别是BIO、NIO和AIO。

  • 同步阻塞方式(BIO):客户端发一次请求,服务端生成一个对应线程去处理。当客户端同时发起的请求很多时,服务端需要创建多个线程去处理每一个请求,当达到了系统最大的线程数时,新来的请求就无法处理了。
  • 同步非阻塞方式 (NIO):客户端发一次请求,服务端并不是每次都创建一个新线程来处理,而是通过 I/O 多路复用技术进行处理。就是把多个 I/O 的阻塞复用到同一个 select 的阻塞上,从而使系统在单线程的情况下可以同时处理多个客户端请求。这种方式的优势是开销小,不用为每个请求创建一个线程,可以节省系统开销。
  • 异步非阻塞方式(AIO):客户端发起一个 I/O 操作然后立即返回,等 I/O 操作真正完成以后,客户端会得到 I/O 操作完成的通知,此时客户端只需要对数据进行处理就好了,不需要进行实际的 I/O 读写操作,因为真正的 I/O 读取或者写入操作已经由内核完成了。这种方式的优势是客户端无需等待,不存在阻塞等待问题。

使用场景
BIO 适用于连接数比较小的业务场景,这样的话不至于系统中没有可用线程去处理请求。这种方式写的程序也比较简单直观,易于理解。

NIO 适用于连接数比较多并且请求消耗比较轻的业务场景,比如聊天服务器。这种方式相比 BIO,相对来说编程比较复杂。

AIO 适用于连接数比较多而且请求消耗比较重的业务场景,比如涉及 I/O 操作的相册服务器。这种方式相比另外两种,编程难度最大,程序也不易于理解。 【来自网络

SpringCloud架构

6.序列化与反序列的方式有哪些?

参考答案: 常用的序列化方式分为两类

  • 文本类如 XML/JSON 等
  • 二进制类如 PB/Thrift 等

7.有哪些序列化协议?

参考答案

8.为什么要进行序列化和反序列化?

参考答案:为什么需要序列化和反序列化,有下面几点原因。

  • 解决内存中数据结构字节序列的映射过程中,如何保留各个结构和字段间的关系而生的技术 。
  • 解决异构系统的数据传输,比如大小端、远端的持久存储;
  • 压缩数据,加快网络传输。【 网络传输耗时一方面取决于网络带宽大小,另一方面取决于数据传输量。想加快网络传输,要么提高带宽,要么减小数据传输量,而对数据进行编码的主要目的就是减小数据传输量。比如一部高清电影原始大小为 30GB,如果经过特殊编码格式处理,可以减小到 3GB,同样是 100MB/s 的网速,下载时间可以从 300s 减小到 30s。 】

Thrift架构

总结

在分布式微服务系统中,服务之间的调用需要通过RPC远程调用的方式。

远程调用的过程中会涉及到建立网络链接(http、socket)、进行网络通信(开放协议、私有协议)、进行数据传输(序列化和反序列化)。

  • 通信框架解决客户端和服务端如何建立连接、管理连接以及服务端如何处理请求的问题。
  • 通信协议解决客户端和服务端采用哪种数据传输协议的问题。
  • 序列化和反序列化解决客户端和服务端采用哪种数据编解码的问题。

在实际的开发中,选择RPC框架也是一个技术活,很多大公司都会根据开源的框架进行自研。

如果对开源的RPC框架有一定的研究,对面试一定是一个加分项

之前推荐的RPC项目,其实还可以进行进一步的优化,可以参考开源框架进行改进!

公众号:代码界的小白,会更新互联网消息、动态、高频八股、实战项目等。

本文正在参与【内行知多少】 征文活动,一起来聊聊内行人才懂的那些事吧,高额牛币和百元京东卡等你来领~

#搞技术你要知道#
全部评论
但愿我面试能问到这些啊
点赞 回复 分享
发布于 2022-06-11 22:23
请问简历上写了rpc项目需要去被dubbo的源码吗
点赞 回复 分享
发布于 2022-07-29 00:50
RPC造轮子现在还吃香吗...
点赞 回复 分享
发布于 2022-09-06 16:50 黑龙江

相关推荐

02-17 17:09
已编辑
大连理工大学 Java
查看11道真题和解析
点赞 评论 收藏
分享
评论
37
508
分享

创作者周榜

更多
牛客网
牛客企业服务