Spring Cloud面试篇

面试篇-nacos面试题

1. springboot常见组件


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


2. nacos注册表的结构


回答: 分级存储模型。下图是nacos服务的分级存储模型


        对上图的解释: Nacos采用了数据的分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。对应到Java代码中,Nacos采用了一个多层的Map来表示。结构为Map<String, Map<String, Service>>,其中最外层Map的key就是namespaceId,值是一个Map。内层Map的key是group拼接serviceName,值是Service对象。Service对象内部又是一个Map,key是集群名称,值是Cluster对象。而Cluster对象内部维护了Instance的集合


3. nacos解决高并发


nacos如何解决高并发的注册压力?
        回答: Nacos内部接收到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列就立即响应给客户端。然后利用线程池读取阻塞队列中的任务,异步来完成实例更新,从而提高并发写能力


4. nacos并发读写冲突


Nacos如何避免并发读写冲突问题?
        回答: Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题了


5. nacos与eureka的区别


接口方式:Nacos与Eureka都对外暴露了Rest风格的API接口,用来实现服务注册、发现等功能
实例类型:Nacos的实例有永久和临时实例之分;而Eureka只支持临时实例
健康检测:Nacos对临时实例采用心跳模式检测,对永久实例采用主动请求来检测;Eureka只支持心跳模式
服务发现:Nacos支持定时拉取和订阅推送两种模式;Eureka只支持定时拉取模式


面试篇-sentinel面试题


1. 线程隔离的方式


线程隔离有两种方式实现
●线程池隔离(Hystix默认采用)
●信号量隔离(Sentinel默认采用)

优点

缺点

场景

线程池隔离

支持主动超时,支持异步调用

线程的额外开销比较大

低扇出

信号量隔离

轻量级,无额外开销

不支持主动超时,不支持异步调用

高频调用,高扇出


2. 限流相关的算法


限流:对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。限流算法常见的包括三种
●计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
●令牌桶算法(Token Bucket)
●漏桶算法(Leaky Bucket)
固定窗口计数器算法概念如下:
一、将时间划分为多个窗口(下图的蓝虚线),窗口时间跨度称为Interval,本例中为1000ms
二、每个窗口维护一个计数器,每有一次请求(下图的绿块)就将计数器加一,限流就是设置计数器阈值(下图的红虚线),本例为3秒
三、如果计数器超过了限流阈值,则超出阈值的请求都被丢弃(下图的橙块)
四、缺点: 紫色部分的情况,虽然两个窗口都能容纳3个请求,但是在那1秒你实际要应对6个请求,就会超出阈值设定的3秒,给服务器造成压力


滑动窗口计数器算法会将一个窗口划分为n个更小的区间,如下:
一、窗口时间跨度为1秒(下图的每两个绿虚线块),区间数量 n = 2 (每秒有两个小窗口,即有两个绿虚线块),则每个小区间时间跨度为500ms
二、限流阈值(下图的红虚线)依然为3,时间窗口(有两个小窗口,共表示1秒) 内请求(绿块)超过阈值时,超出的请求被限流
三、窗口会根据请求的当前时间来移动,窗口范围是从'当前请求时间 减 时间跨度' 之后的第一个时区开始,到所在时区结束
四、滑动窗口是通过把单个窗口细分为多个窗口,作用是尽可能避免固定窗口的问题
五、缺点: 只要是窗口就会存在请求超出阈值但被放行的结果。例如1250ms~2100ms,间隔了850毫秒,但是放行了4个请求,不符合1秒最多3个请求的阈值


令牌桶算法如下:
一、以固定的速率(相当于限流)生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
二、请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
三、如果令牌桶中没有令牌,则请求等待或丢弃
四、桶里面放的是令牌


漏桶算法如下:
一、将每个请求视作"水滴"放入"漏桶"进行存储
二、"漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”
三、如果"漏桶"满了则多余的"水滴"会被直接丢弃
四、可以理解成请求在桶内排队等待。有利于应对突发请求
五、漏铜算法是用来优化令牌桶 算法的,漏铜算法的桶里面放的是请求


Sentinel在实现漏桶时,采用了排队等待模式:让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。并发的多个请求必须等待,预期的等待时长 =最近一次请求的预期等待时间 + 允许的间隔。如果请求预期的等待时间超出最大时长,则会被拒绝。例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常。如下图


3. 限流算法的对比


注意: 固定窗口并没有在内

滑动时间窗口

令牌桶

漏桶

能否保证流量曲线平滑

不能,但窗口内区间越小,流量控制越平滑

基本能,在请求量持续高于令牌生成速度时,流量平滑。但请求量在令牌生成速率上下波动时,无法保证曲线平滑

能,所有请求进入桶内,以恒定速率放行,绝对平滑

能否应对突增流量

不能,徒增流量,只要高出限流阈值都会被拒绝

能,桶内积累的令牌可以应对突增流量

能,请求可以暂存在桶内

流量控制精确度

低,窗口区间越小,精度越高

4. Sentinel与Hystix的区别


【线程隔离的角度】
Hystix: 默认是基于线程池实现的线程隔离,每一个被隔离的业务都要创建一个独立的线程池,线程过多会带来额外的CPU开销,性能一般,但是隔离性更强。Sentinel: 是基于信号量(计数器)实现的线程隔离,不用创建线程池,性能较好,但是隔离性一般


5. sentinel与gateway的区别


【限流的角度】
限流算法常见的有三种实现:滑动时间窗口、令牌桶算法、漏桶算法。
Gateway: 采用了基于Redis实现的令牌桶算法
Sentinel: 相对复杂,默认限流模式是基于滑动时间窗口算法排队等待的限流模式则基于漏桶算法而热点参数限流则是基于令牌桶算法


完结撒花

文件下载-奶牛快传 Download |CowTransfer

该笔记对标的视频是BV1LQ4y127n4

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

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

相关文章

从构成看自来水厂自动化控制系统的创新与发展

自来水厂自动化控制系统涵盖了多个关键组成部分&#xff0c;包括水管理云平台、供水监控系统以及供水调度平台。 系统内嵌了一系列自主创新的核心算法&#xff0c;这些算法结合了数学建模、机器仿真和流体力学等多元数据模型&#xff0c;以优化设备间的关联和控制关系&#xf…

linux,从零安装nginx,并且部署vue应用程序

前言&#xff1a;系统使用龙蜥&#xff08;8.5&#xff09;的最小化安装&#xff0c;服务器安装这里不在赘述。 nginx 的版本&#xff1a;1.22.0 软件已经放在系统/home/software/ 一、安装nginx 进入路径/home/software/ 1》执行命令&#xff1a;rpm -ivh nginx-1.22.0-1.el7…

面试题:Redis如何防止缓存穿透 + 布隆过滤器原理

题目来源 招银网络-技术-1面 题目描述 缓存穿透是什么&#xff1f;如何防止缓存穿透布隆过滤器的原理是什么&#xff1f; 我的回答 缓存穿透是什么&#xff1f; 攻击者大量请求缓存和数据库中都不存在的key。如何防止缓存穿透 可以使用布隆过滤器布隆过滤器的原理是什么&a…

iOS - Runloop在实际开发中的应用

文章目录 iOS - Runloop在实际开发中的应用1. 控制线程生命周期&#xff08;线程保活&#xff09;2. 解决NSTimer在滑动时停止工作的问题2.1. 案例2.2 解决 3. 监控应用卡顿4. 性能优化 iOS - Runloop在实际开发中的应用 1. 控制线程生命周期&#xff08;线程保活&#xff09;…

(一)Java EE企业级应用开发实战之Servlet教程——JDK安装

首先打开清华大学开源软件镜像站&#xff0c;清华大学开源镜像网站地址为&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/ 打开该地址后的界面显示如下图所示 找到8版本对应的SDK安装包&#xff0c;我现在用的开发机器是Windows&#xff0c;所以我找的是Windows对应的版本…

Redis入门到通关之Redis数据结构-Set篇

文章目录 ☃️概述☃️数据结构☃️源码☃️其他 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端…

Nginx part2.2

目录 如何用Nginx搭建多网址服务器&#xff1f; 基于ip地址的虚拟主机 1. 先建立存储网页的目录 2.进行子配置 3.编写.conf文件 基于端口号的虚拟主机 基于域名的虚拟主机 如何用Nginx搭建多网址服务器&#xff1f; 有些网站&#xff0c;ip不同&#xff0c;域名不同&…

Opencv | 图像卷积与形态学变换操作

这里写目录标题 一. 滤波 / 卷积操作1. 平滑均值滤波/卷积2. 平滑中值滤波/卷积3. 平滑高斯滤波/卷积3.1 关注区域3.2 分解特性 二. 形态学变换1. 常用核2. cv.erode ( ) 腐蚀操作3. cv.dilate ( ) 膨胀操作4. Open 操作5. Close 操作6. Morphological Gradient 形态梯度操作7.…

基于postCSS手写postcss-px-to-vewiport插件实现移动端适配

&#x1f31f;前言 目前前端实现移动端适配方案千千万&#xff0c;眼花缭乱各有有缺&#xff0c;但目前来说postcss-px-to-vewiport是一种非常合适的实现方案&#xff0c;postcss-px-to-vewiport是一个基于postCss开发的插件&#xff0c;其原理就是将项目中的px单位转换为vw(视…

向量的点积和叉积的几何意义

1. 点积 点积(dot product)&#xff0c;又称标量积&#xff08;scalar product&#xff09;。结果等于。 可用于 判断的是否垂直求投影长度求向量是抑制作用还是促进作用 2. 叉积 叉积(cross product)&#xff0c;又称为向量积(vector product)。模长等于&#xff0c;方向…

深入剖析机器学习领域的璀璨明珠——支持向量机算法

在机器学习的广袤星空中&#xff0c;支持向量机&#xff08;Support Vector Machine&#xff0c;简称SVM&#xff09;无疑是一颗璀璨的明珠。它以其独特的分类能力和强大的泛化性能&#xff0c;在数据分类、模式识别、回归分析等领域大放异彩。本文将详细剖析SVM算法的原理、特…

政安晨:【Keras机器学习示例演绎】(十)—— 用于读取验证码的 OCR 模型

目录 简介 设置 加载数据验证码图像 预处理 创建数据集对象 将数据可视化 模型 培训 推理 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之…