【面试突击】分布式技术面试实战

🌈🌈🌈🌈🌈🌈🌈🌈
欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送
发送 资料 可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景中间件系列笔记编程高频电子书

文章导读地址:点击查看文章导读!

感谢你的关注!

🍁🍁🍁🍁🍁🍁🍁🍁

在这里插入图片描述

分布式技术面试实战

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

目前主流的微服务框架主要就是两个 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 服务提供者
  5. Dubbo 服务提供者收到后,也会进行一系列操作解析请求,最后调用本地服务,将执行结果返回给服务消费者

在这里插入图片描述

由面到点

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

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

系统设计层面

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

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

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

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

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

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

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

在这里插入图片描述

自己设计

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

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

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

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

在这里插入图片描述

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

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

相关文章

你真的掌握了“C语言分支循环”吗

目录 前言 1. if语句 1.1 if 1.2 else 1.3 分支中包含多条语句 1.4 嵌套if 1.5 悬空else问题 2. 关系操作符 3. 条件操作符 4. 逻辑操作符:&& , || , ! 4.1 逻辑取反运算符 4.2 与运算符 4.3 或运算符 4.4 练习:闰年的判…

Unity WebView 中文输入支持

使用版本:Vuplex 3D WebView for Windows v4.4; 测试环境:unity editor 2020.3.40f1c1、Windows; 1、打开脚本CanvasWebVie!wPrefab 2、找到_initCanvasPrefab方法,约略在459行附近 3、添加一行代码: …

需求变更如此频繁,还甩锅给测试?

文章目录 项目背景需求变更的频繁的原因?生产问题产品复盘小结 项目背景 有一个数据管理平台系统的项目,需求频繁的变更了15次,每次生产上线后总是能出现一些让人意想不到的bug。开发人员和测试人员对这个项目嗤之以鼻,开项目会的…

科学和统计分析软件GraphPad Prism mac介绍说明

GraphPad Prism for Mac是一款科学和统计分析软件,旨在帮助研究者、科学家和学生更轻松地处理和可视化数据。 GraphPad Prism for Mac是一款功能强大、易于使用的科学和统计分析软件,适用于各种类型的数据处理和可视化需求。无论您是进行基础研究、临床试…

Vue组件

一:组件化开发基础 1.组件是什么?有什么用? 组件就是:扩展 HTML 元素,封装可重用的代码,目的是复用 例如:有一个轮播图,可以在很多页面中使用,一个轮播有js,…

如何用GPT来润色论文\生成完整长篇论文?

详情点击链接:如何用GPT来润色论文\生成完整长篇论文? 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析,AI画图,图像识别,文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Cl…

基于arcgis的遥感深度学习数据集制作

由于很多时候,我们在研究过程中往往需要根据实际情况使用自己的影像数据来提取目标物,如果没有合适的公开数据集的话,为了满足实际需要,我们就需要制作符合自己要求的数据集。 今天我们就根据实际情况来详细讲解如何利用arcgis&am…

文心大模型融入荣耀MagicOS!打造大模型“端云协同”创新样板

2024年1月10日,在荣耀MagicOS 8.0发布会及开发者大会上,荣耀终端有限公司CEO赵明宣布了“百模生态计划”,并与百度集团执行副总裁、百度智能云事业群总裁沈抖共同宣布,百度智能云成为荣耀大模型生态战略合作伙伴。 沈抖在现场演讲…

帆软report 设置条件属性,值为负数标为红色功能时,不生效

详细情况: 在设置负数为红色功能前,已经有一个条件属性,数据集获取的值为空或者为0时,转换成 - 符号。如下图: 具体表单显示效果如下: 条件属性2设置 原因 因为条件属性1设置的 - 符号没有设置颜色&#xf…

数据结构排序——详解快排及其优化和冒泡排序(c语言实现、附有图片与动图示意)

上次讲了选择排序和堆排序:数据结构排序——选择排序与堆排序 今天就来快排和冒泡 文章目录 1.快排1.1基本介绍1.2不同的分区方法及代码实现1.2.1Hoare版1.2.2挖坑版1.2.3 前后指针版 1.3快排的优化1.3.1三数取中选key1.3.2递归到小的子区间时,可以考虑…

正面PK智驾,华为与博世「硬扛」

12月20日,随着奇瑞星纪元ES的亮相上市,华为与博世,分别作为新旧时代的供应商角色,首次在高阶智驾赛道进行正面PK。 11月28日,奇瑞和华为合作的首款车型智界S7上市,作为星纪元ES的兄弟车型,搭载华…

STL之list

目录 list定义和结构 list容器模板接受两个参数: list容器的特点 双向性 动态大小 不连续存储 实例 代码输出 需要注意的点 list常用函数 代码示例 list定义和结构 list的使用频率不高,在做题时极少遇到需要使用list的情景。 list是一种双向…

2023 年崭露头角的七款不为人知的 Linux 发行版

今年有哪些成功的发行版发布呢? 让我重点介绍最好的几个。 这些发行版在 2023 年引起了人们的关注! 每年我们都会推出一些令人兴奋的新发行版,它们尝试以不同的方式工作,或者提供一些有意义的东西,而不仅仅是“又一个发…

创建mysql普通用户

一、创建mysql普通用户的原因: 权限控制:MySQL的权限系统允许您为每个用户分配特定的权限。通过创建普通用户,您可以根据需要为每个用户分配特定的数据库和表权限,而不是将所有权限授予一个全局管理员用户。这有助于提高数据库的…

[算法与数据结构][c++]:Static关键字和全局变量

Static关键字和全局变量 1. 生命周期、作用域和初始化时机2. 全局变量3. Static 关键字3.1 面向过程3.1.1 静态全局变量3.1.2 静态局部变量(单例中会使用)3.1.3 静态函数 3.2 面向对象3.2.1 类内静态成员变量3.2.2 类内静态成员函数 Reference 写在前面&…

Taro+vue3 实现选座位 功能 以及座位显示

1.类似选座位那种功能 我的功能座位 不是html元素 而是 座位图片 都是图片 const onConfirm () > {// const area_arr selectedSeat.value.map((item) > {// return item.areaId;// });// const abc isRepeat(area_arr);// if (!abc) {// Taro.showToast({//…

水经微图安卓版APP正式上线!

在水经微图APP(简称“微图APP”)安卓版已正式上线! 在随着IOS版上线约一周之后,安卓版终于紧随其后发布了。 微图安卓版APP下载安装 自从IOS版发布之后,就有用户一直在问安卓版什么时候发布,这里非常感谢…

Windows下安装mariadb10.5数据库及配置详细教程

1、简介 MariaDB数据库管理系统是一款MySQL的替代数据库。MariaDB由MySQL的创始人麦克尔维德纽斯主导开发,是可扩展的,可靠的SQL服务器的合乎逻辑的选择,MariaDB 10.5 是 MariaDB 当前的稳定系列。 2、下载 下载地址:Download M…

基于ssm快餐店点餐结算系统的设计与实现+vue论文

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装快餐店点餐结算系统软件来发挥其高效地信息处理的作用&…

区间预测 | Matlab实现CNN-LSTM-KDE的卷积长短期神经网络结合核密度估计多变量时序区间预测

区间预测 | Matlab实现CNN-LSTM-KDE的卷积长短期神经网络结合核密度估计多变量时序区间预测 目录 区间预测 | Matlab实现CNN-LSTM-KDE的卷积长短期神经网络结合核密度估计多变量时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CNN-LSTM-KDE多变量时间序列区…