56.微服务面试篇

news2024/11/25 7:06:27

目录

一、SpringCloud常见组件有哪些?

二、Nacos源码分析和Sentinel源码分析。

三、Nacos的服务注册表结构是怎样的?

四、Nacos如何支撑数十万服务注册压力?

五、Nacos如何避免并发读写冲突问题?

六、Nacos与Eureka的区别有哪些?

七、Sentinel的限流与Gateway的限流有什么差别?

八、Sentinel的线程隔离与Hystix的线程隔离有什么差别?

(1)常见的三种限流算法。

(2)固定窗口计数器算法。

(3)滑动窗口计数器算法。

(4)令牌桶算法。

(5)漏桶算法。

(6) 限流算法对比。

(7)Sentinel在实现漏桶时,采用了排队等待模式。

(8)Sentinel的限流与Gateway的限流有什么差别?


一、SpringCloud常见组件有哪些?

问题说明:这个题目主要考察对SpringCloud的组件基本了解

难易程度:简单

参考话术

SpringCloud包含的组件很多,有很多功能是重复的。其中最常用组件包括:

注册中心组件: Eureka Nacos
负载均衡组件: Ribbon
远程调用组件: OpenFeign
网关组件: Zuul Gateway
服务保护组件: Hystrix Sentinel
服务配置管理组件: SpringCloudConfig Nacos

二、Nacos源码分析和Sentinel源码分析。

1.下载Nacos源码并运行。
2.服务注册。

3.服务心跳。

4.服务发现。

sentinel源码分析                 

三、Nacos的服务注册表结构是怎样的?

nacos的分级存储模型:命名空间 ->分组->服务->集群->实例(IP+端口)

Nacos的服务注册表结构是怎样的?

问题说明考察对Nacos数据分级结构的了解,以及Nacos源码的掌握情况

难易程度:一般

参考话术

Nacos采用了数据的分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。

对应到Java代码中,Nacos采用了一个多层的Map来表示。结构为Map<String, Map<String, Service>>,其中最外层Mapkey就是namespaceId,值是一个Map内层Map的key是group拼接serviceName,值是Service对象。Service对象内部又是一个Mapkey是集群名称,值是Cluster对象。而Cluster对象内部维护了Instance的集合。

四、Nacos如何支撑数十万服务注册压力?

下面的onChange方法是service类的方法,即服务对象自己更新服务列表。

下面的方法在cluster类。

五、Nacos如何避免并发读写冲突问题?

并发读写:当一个客户端正在读取某个配置或服务信息的同时,另一个客户端对该数据进行了修改,那么读取的结果就可能是不一致的。

nacos的集群封装的实例是对象:Set<Instance>,比如修改了实例对象的数据的时候,还没改完,但是有客户端对其进行读,那么就会出现中间状态,出现脏读。

六、NacosEureka的区别有哪些?

nacos临时实例:客户端发送心跳检测。

nacos永久实例:主动请求检测模式。(服务端请求客户端)

七、Sentinel的限流与Gateway的限流有什么差别?

八、Sentinel的线程隔离与Hystix的线程隔离有什么差别?

(1)常见的三种限流算法。

(2)固定窗口计数器算法。

题目:假如一个窗口时间跨度为1秒钟,服务器一秒内最多处理3个请求,那么在0.5秒到1秒期间有3个请求,1秒到1.5秒期间有3个请求。这种算法有什么缺陷?

答案:第1秒内没有超过3个请求,第2秒内也没有超过3个请求,但是0.5到1.5这一秒内有6个请求,已经超出了服务器的请求数量。这就是固定窗口计数器算法的缺陷。

(3)滑动窗口计数器算法。

下面的图中请求分别在200ms、400ms、900ms、1250ms、1300ms、1400ms、1600ms、2100ms时间点过来。

窗口范围公式:当前请求的时间点 - 窗口时间跨度 = 结果,窗口范围是结果所在的窗口的下一个窗口到当前请求的所在窗口这段范围。

假如最新请求是1250ms请求,1250ms - 1000ms = 250ms,即250ms在第一个窗口,它的下一个窗口就是从500ms算起,此时的请求数量是2个。

假如最新请求是1300ms请求,1300ms - 1000ms = 300ms,即300ms在第一个窗口,它的下一个窗口就是从500ms算起,此时的请求数量是3个。

假如最新请求是1400ms请求,1400ms - 1000ms = 400ms,即400ms在第一个窗口,它的下一个窗口就是从500ms算起,此时的请求数量是4个,所以1400ms请求被拒绝。

假如最新请求是1600ms请求,1600ms - 1000ms = 600ms,即600ms在第二个窗口,它的下一个窗口就是从1000ms算起,此时的请求数量是3个。

假如最新请求是2100ms请求,2100ms - 1000ms = 1100ms,即1100ms在第三个窗口,它的下一个窗口就是从1500ms算起,此时的请求数量是2个。

问题:1250ms、1300ms、1600ms、2100ms这四个请求的时间最大时间差是850ms(2100-1250),此时一秒内有四个请求,已经超过了三个请求,这时又出现了固定窗口算法的问题。(小区间时间跨度越好越准确即窗口跨度越小越准确)

(4)令牌桶算法。

实现令牌桶算法的基本步骤如下:

  1. 定义一个桶,用于存放令牌。桶中有一个最大容量(maxTokens)和当前的令牌数量(currentTokens)。
  2. 以固定速率往桶中添加令牌,直到桶满为止。这个速率可以通过计算得出,保证在单位时间内往桶中添加一定数量的令牌。
  3. 当需要传输数据时,先检查桶中是否有足够的令牌。如果有足够的令牌,则取出相应数量的令牌进行传输;如果没有足够的令牌,则根据具体策略进行处理(如等待或丢弃数据包)。

(5)漏桶算法。

(6) 限流算法对比。

(7)Sentinel在实现漏桶时,采用了排队等待模式。

(8)Sentinel的限流与Gateway的限流有什么差别?

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

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

相关文章

Redis核心知识小结

基础 redis为什么快呢&#xff1f; 单线程基于io多路复用底层C语言对数据结构做了优化完全内存的操作 Redis6.0使用多线程是怎么回事? Redis不是说用单线程的吗&#xff1f;怎么6.0成了多线程的&#xff1f; Redis6.0的多线程是用多线程来处理数据的读写和协议解析&#x…

段错误详细解读

一、摘要 段错误&#xff08;Segmentation Fault&#xff09;是在编程中常见的错误之一&#xff0c;通常会导致程序崩溃。常出现在Linux系统当中&#xff0c;而且目前关于这方面的解决教程较少。 什么人会使用Linux&#xff1f;Linux 是世界上最受欢迎的操作系统之一&#xf…

产品入门第四讲:Axure动态面板

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还…

TrustZone之强制隔离

TrustZone有时被称为一个强制执行的保护系统。请求者表示其访问的安全性,而内存系统决定是否允许该访问。内存系统基于何种方式进行检查呢? 在大多数现代系统中,内存系统的检查是由互连完成的。例如,Arm NIC-400允许系统设计人员为每个连接的完成者指定以下内容: • 安全…

ShenYu网关Http服务探活解析

文章目录 网关端服务探活admin端服务探活 Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时&#xff0c;将服务从可用列表中移除。 网关端服务探活 以divide插件为例&#xff0c;看下divide插件是如何获…

实现进程间的通信

本例程是开发一款能实现进程通信的DLL。本例程以Visual Studio 2015为例。在Visual Studio 2013&#xff0c;Visual Studio 2017都是可以。 第一步&#xff1a;在Visual Studio 2015中&#xff0c;创建DLL工程。如何创建DL&#xff0c;在这里就不作具体说明了。百度都有许多创建…

【九】python模板方法模式

9.1 模板方法模式概述 模板方法模式是一种行为设计模式&#xff0c;它使用一个抽象的基类定义了一个操作中的算法的骨架&#xff0c;而将一些步骤的实现延迟到子类中。模板方法模式允许子类在不改变算法结构的情况下重新定义算法中的某些步骤。 9.2 代码示例 在Python中使用…

SpringBoot接口开发

一、springboot官方demo开发 依赖包和父:pom.xml<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.14</version></dependency&g…

windows禁用系统更新

1.在winr运行框中输入services.msc&#xff0c;打开windows服务窗口。 services.msc 2.在服务窗口中&#xff0c;我们找到Windows update选项&#xff0c;如下图所示&#xff1a; 3.双击windows update服务&#xff0c;我们把启动类型改为禁用&#xff0c;如下图所示&#xff…

翻译: ChatGPT Token消耗粗略计算英文就是除以四分之三

在这个视频中&#xff0c;我想带你快速浏览一些例子&#xff0c;以建立对在软件应用中使用大型语言模型的实际成本的直观感受。让我们来看看。这是一些示例价格&#xff0c;用于从不同的大型语言模型获取提示和回应&#xff0c;这些模型对开发者可用。即&#xff0c;如果你在你…

page_title is not translated into en_US(American English)

提示&#xff1a;page_title is not translated into en_US(American English) 修改&#xff1a;三个string.json文件都需要出现相同的name和value才行&#xff0c;如果根据提示进行修改

JS获取当前系统电量情况

在前端浏览器中我们可以通过使用JavaScript的navigator.getBattery()方法来获取当前系统的电池情况。 这个API可以监测设备的电池状态&#xff0c;包括是否在充电、当前电量以及放电或充电所需的时间。本文将介绍如何使用这个API以及它在实际应用中的使用。 API使用 首先让我…

双指针算法(一)

目录 移动零 复写零 快乐数 盛水最多的容器 双指针与单调性结合 有效三角形的个数 查找总价格为目标值的两个商品 两数之和 Ⅱ - 输入有序数组 双指针算法是通过定义两个指针不断单向移动来解决问题的一种算法。但双指针算法&#xff0c;是一个抽象的思想概念&#xf…

京微齐力:基于H7的平衡控制系统(一、姿态解析)

目录 前言一、关于平衡控制系统二、实验效果三、硬件选择1、H7P20N0L176-M2H12、MPU6050 四、理论简述五、程序设计1、Cordic算法2、MPU6050采集数据3、fir&iir滤波4、姿态解算 六、资源消耗&工程获取七、总结 前言 很久之前&#xff0c;就想用纯FPGA做一套控制系统。可…

橘子学K8S01之容器中所谓的隔离

我们一直都在说容器就是一个沙盒&#xff0c;沙盒技术顾名思义就是像一个集装箱一样&#xff0c;把应用(服务&#xff0c;进程之类的)装起来的技术&#xff0c;这样每个进程在自己的沙盒中和其他的沙盒隔离开来&#xff0c;每个沙盒之间存在一个边界使得他们互不干扰&#xff0…

C# 字符串格式化

写在前面 在日常编程中&#xff0c;经常需要对字符串进行格式化操作&#xff0c;以便呈现为不同的格式&#xff0c;满足各种各样的显示需求&#xff0c;C#的字符串格式化参数是非常丰富的&#xff0c;这里做个简单的列举&#xff0c;以供后续参考和延伸。 代码实现 var curr…

Pr自动从视频脚本剪辑视频FirstCut插件免费下载

FirstCut 插件将自动从视频脚本中剪辑视频&#xff0c;在例如新闻、采访、自媒体视频等带有配音或字幕内容的视频制作中提高了粗剪效率。 使用 FirstCut&#xff0c;大大缩短了粗剪的时间&#xff0c;而不是转到每个视频文件并找到 IN 点和 OUT 点&#xff0c;然后将其插入到序…

yolov8常用命令

1.运行预测 &#xff08;1&#xff09;运行目标检测模型&#xff1a; yolo predict modelyolov8n.pt sourcebus.jpg &#xff08;2&#xff09;运行目标检测与分割模型 yolo predict modelyolov8n-seg.pt sourcebus.jpg 2.模型训练 复制coco128.yaml更名为myDetect.y…

c题目17:写一个swap函数,可以交换2个整数变量的值。(分别用普通方式和指针方式实现,对比结果)

每日小语 我坐着&#xff0c;观望世界上所有的忧患&#xff0c;所有的压迫和耻辱看着&#xff0c;听着&#xff0c;一声不响。——惠特曼 自己思考 最近这段时间新的感悟似乎也没有&#xff0c;但我发现我和别人的思想越来越不同&#xff0c;只能跟极少数人产生共鸣&#xff0…

JVM-接口响应时间很长解决办法

问题 在程序运行过程中&#xff0c;发现有几个接口的响应时间特别长&#xff0c;需要快速定位到是哪一个方法的代码执行过程中出现了性能问题。 解决思路 已经确定是某个接口性能出现了问题&#xff0c;但是由于方法嵌套比较深&#xff0c;需要借助于算法定位到具体的方法。 A…