首页 > 其他分享 >分布式技术面试实战

分布式技术面试实战

时间:2024-01-16 20:31:35浏览次数:30  
标签:实战 Dubbo 服务 框架 Spring 面试 服务提供者 Cloud 分布式

欢迎关注公众号:【11来了】 发送 “资料” 可以下载Redis、JVM系列文章PDF版本!

作者为在读研究生,目前研二,计划在公众号记录学习常用中间件笔记,以及明年更新面试经历!


分布式技术面试实战_Cloud

分布式技术面试实战

如果跟面试官聊到了 分布式 这方面的内容,该怎么去聊呢,或者说是面试官会去问哪些内容呢,下面对分布式面试内容进行分析

目前主流的微服务框架主要就是两个 DubboSpring Cloud,可能有些项目使用 Dubbo,有些使用 Spring Cloud

其实两者最主要的区别就在于 生态,Spring Cloud 的生态很丰富,提供了注册中心、网关、服务熔断、服务限流等等很完善的一系列组件,功能比 Dubbo 丰富很多,而 Dubbo 设计的目的主要是作为一个 RPC 服务框架 使用,专注于服务注册、服务发现、负载均衡等服务治理的功能

简单来说,就是 Dubbo 主要是为了高性能的服务调用,而 Spring Cloud 是为了提供一套完整的微服务解决方案,而 Spring Cloud Alibaba 则整合了 Spring Cloud 和阿里巴巴的一些开源组件,如 Nacos、Dubbo、Sentinel 等等,通过 Spring Cloud Alibaba 可以迅速的将 Spring Cloud 接入阿里中间件,搭建分布式系统


技术选型

那么先来思考第一个问题:你们公司微服务框架选用了哪一种,为什么这样选择呢?

简单来说,可以从 公司的需求对哪一种微服务框架更加熟悉 这两方面来说,就比如说,我对 Dubbo 更加熟悉,那么肯定使用 Dubbo,这样对于前期生产成本以及后期维护成本都是大大降低了,其实选用哪一种技术,也不用说的很天花乱坠,只要说明需求即可

其次,可以去 Dubbo 官网,Dubbo 在官网也有与 Spring Cloud 的比较

如 Spring Cloud 存在了一些问题如下,而这些问题也就是 Dubbo 的优势:

  • 落地成本以及后期维护成本大
  • 欠缺服务治理功能,尤其负载均衡、流量路由方面较弱
  • 基于 HTTP 进行通信,性能不如 RPC 框架


技术原理

那么假如说,微服务框架选择了 Dubbo,那面试官肯定是要问问你有没有看过 Dubbo 的源码呢?原理了解吗?

这里我就以 Dubbo 来举例,如果你使用 Spring Cloud 或 Spring Cloud Alibaba,问题都是类似的,你一定要对这个问题,画一个原理的流程图,可以和面试官清晰的讲解出来,Dubbo 整理的流程图我也画出来了,如下图,流程我也写成文字:

  1. 每个服务提供者都会去注册中心注册自己,包括自己的地址(ip+port)
  2. 服务消费者去消费时,从注册中心(Dubbo 使用 ZooKeeper 作为注册中心)中拉取服务列表
  3. 消费者会去为远程代理对象创建一个动态代理对象,通过动态代理来拦截方法的执行
  4. 在代理对象的拦截中,会去执行一系列的操作
  1. 负载均衡,选择一台机器进行通信
  2. 选择一种通信协议:Dubbo 提供了自定义的高性能 rpc 通信协议
  3. 将请求进行封装,并且序列化
  4. 通过网络通信框架,将远程调用请求传给 Dubbo 服务提供者
  1. Dubbo 服务提供者收到后,也会进行一系列操作解析请求,最后调用本地服务,将执行结果返回给服务消费者

分布式技术面试实战_服务提供者_02


由面到点

整体的一个 Dubbo 原理说完之后,肯定会从 Dubbo 某一个具体的功能切入,比如说一下 Dubbo 底层的网络通信机制原理,这其实考察的就是 Dubbo 底层网络通信框架 Netty 的原理,只要讲一下 Netty 如何进行网络通信,以及 Netty 的线程模型是怎样的就可以了

具体的技术细节就不说了,这里主要说一下面试的逻辑,只有熟悉面试官的逻辑之后,才可以更好的去准备面试


系统设计层面

并且对于一个技术,可以多去看一下它的官网,看一下官网怎么说这个技术的优点,以及它的架构设计!

Dubbo 在系统设计层面,如何实现了它的高度可扩展能力呢?使用了 SPI 来实现

Dubbo 中将核心的组件全部接口化,组件和组件之间的调用全部依托于接口,之后再动态去寻找配置的实现类,如果没有配置,就去使用默认的实现类

并且 Dubbo 提供了配置自己实现的组件的功能,如果你自己实现了一个组件,通过配置,可以在 Dubbo 运行的时候,直接使用你的组件而不是默认的组件

Dubbo 提供了很多的 SPI 扩展实现,如:

  • 协议扩展
  • 调用拦截扩展
  • 集群扩展
  • ...

更多细节可以查看 Dubbo 官方文档

分布式技术面试实战_服务提供者_03



自己设计

如果面试官让你自己设计一个 RPC 框架,你该从哪些方面来设计呢?

这个东西,其实也没法简简单单说清楚,其实也就是问你 Dubbo 底层的原理,只不过,让你自己设计,可能并不需要太复杂的功能,你需要可以从整体流程来说一下 RPC 框架需要哪些功能部分,那么接下来我就简单从各个功能来说一下:

  • 注册中心:RPC 框架是需要服务之间进行调用,那么一定要有一个地方去存储服务的地址,可以进行 服务注册服务发现 的功能的,注册中心使用 ZooKeeper 实现
  • 动态代理:RPC 框架中,服务消费者肯定是没有服务提供者的一个实例对象的,因为他们分布在不同机器上,所以需要去创建动态代理对象
  • 负载均衡:这个是在消费方实现的,消费者从注册中心拉取到服务提供者的地址,可以根据多个地址进行负载均衡
  • 序列化、网络通信:消费者最终会将调用请求发送到服务提供者去,最终服务提供者执行完本地方法,再将执行结果给返回,这其中通信框架可以使用 Netty(高性能网络通信),并且需要将调用请求序列化为二进制的字节数组,才可以通过网络发送出去

我自己也写过一个 RPC 框架,这里将流程图给出来,可以看一下整体的 rpc 调用流程是怎样的:

分布式技术面试实战_服务提供者_04




标签:实战,Dubbo,服务,框架,Spring,面试,服务提供者,Cloud,分布式
From: https://blog.51cto.com/u_16186397/9277259

相关文章

  • 面试学习——线程篇
    Thread的生命周期指线程从创建到销毁的整个过程。在线程的生命周期中,可能会经历不同的状态变化。线程的运行状态:NEW:线程对象被创建,未启动线程READY:start()启动RUNNABLE(可以运行的线程状态):线程已被加载到线程调度器的就绪队列中,等待CPU的调度执行。RUNNING:线程正在执......
  • Elastic实战:彻底解决spring-data-elasticsearch日期、时间类型数据读取报错问题
    0.引言在使用spring-data-elasticsearch读取es中时间类型的数据时出现了日期转换报错,不少初学者会在这里困惑很久,所以今天我们专门来解读该问题的几种解决方案。1.问题分析该问题的报错形式一般是:Failedtoconvertfromtype[java.lang.String]totype[java.util.Date]f......
  • Mybatis面试题汇总(36)
    对MyBatis的认识[4]简单介绍下MyBatisMyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和JavaPOJO(PlainOldJava......
  • docker jmeter分布式压测部署 jmeter websocket压测
    测试场景:1.多名用户加入房间。2.房间人数为固定人数(比如4人) 3.有人进入时,进入用户会收到反馈当前房间人员列表。4.其他人会收到反馈新加入用户的信息消息。5.当人数已满时,会自动推送消息给所有人。6.在人满后,每个人需要按固定序列,发送消息。7.所有人发送特定消息后,推进房......
  • 某客《微信小程序》从基础到实战视频教程
     第1部分微信小程序从基础到实战课程概要  第1节微信小程序从基础到实战课程概要  1.1微信小程序从基础到实战课程概要  第2部分初识微信小程序   第1节微信小程序简介  2.1微信小程序简介  第2节微信小程序开发准备2.2.1微信小程序开发准......
  • jmeter压测网站、数据库、接口及分布式压测
    Jmeter是apache组织开发的基于java的压力测试工具。Jmeter可以用于对服务器、网络活对象模拟巨大的负载,来自不同压力类别下测试他们的强度和分析整体性能。另外,jmeter能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。为了最大限度的灵活......
  • 计算机专业研究生 复试面试问题
    复试面试问题一、英语问题最喜欢的课程是什么?介绍你的家乡最喜欢的书计算机的五个组成部分数据库建立的过程介绍家庭自我介绍你是如何知道江苏大学以及为何会选择江苏大学自己的优点缺点,以及缺点怎么克服二、数据库方面数据库完整性和安全性的区别答:数据库的完整......
  • 面试阶段性总结
    面试阶段性问题总结:letconstvar的区别this的指向问题异步的相关知识,async...await,promise,generator,回调函数以及执行顺序css相关,首先是优先级问题,其次是属性的计算,position,width,height,top,left,动画硬件加速webpack打包优化问题vite启动和打包为什么快pnpm包......
  • 鸿蒙HarmonyOS实战-工具安装和Helloworld案例
    ......
  • Redis分布式锁
    初始第一版代码背景:Redis中stock字段的value设为300超卖问题:多个请求(3个)同时调用这个接口,他们查出的stock都是300,都进行减1操作,实际上需要减3得到297,但都是执行300-1记录stock为299。解决:使用jdk自带的锁,可以使多个请求排队,实现同一时间单个请求执行锁区间的代码。架构背......