SpringCloud面试题
SpringCloud常见组件有哪些
注册中心组件:Eureka、Nacos
负载均衡组件:Ribbon
远程调用组件:OpenFeign
网关组件:Zuul、Gateway
服务保护组件:Hystrix、Sentinel
服务配置管理组件:SpringCloudConfig、Nacos
Nacos的服务注册表结构是怎样的?
Nacos采用了数据的分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。
namespace命名空间
服务、分组
集群、实例
Nacos如何支撑阿里内部数十万服务注册压力?
Nacos内部接收到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列就立即响应给客户端。然后利用线程池读取阻塞队列中的任务,异步来完成实例更新,从而提高并发写能力。
Nacos如何避免并发读写冲突问题?
Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的拷贝的实例列表来覆盖旧的实例列表。
这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题了(读旧的实例列表)。
以服务service为锁对象,同一个服务service中多个instance实例,只能串行来完成注册。多个服务service之间互不影响。
Nacos与Eureka的区别有哪些?
Nacos | Eureka | |
---|---|---|
接口方式 | Nacos对外暴露了Rest风格的API接口,用来实现服务注册、发现等功能 | Eureka都对外暴露了Rest风格的API接口,用来实现服务注册、发现等功能 |
实例类型 | Nacos的实例有永久和临时实例之分 | Eureka只支持临时实例 |
健康检测 | Nacos对临时实例采用心跳模式检测,对永久实例采用主动请求来检测 | Eureka只支持心跳模式 |
服务发现 | Nacos支持定时拉取和订阅推送(当服务发生变更时,通过订阅推送主动通知各个实例)两种模式 | Eureka只支持定时拉取模式(30s) |
Sentinel的线程隔离与Hystix的线程隔离有什么差别?
Hystix | Sentinel |
---|---|
Hystix默认是基于线程池实现的线程隔离 | Sentinel是基于信号量(计数器)实现的线程隔离 |
每一个被隔离的业务都要创建一个独立的线程池 | 不用创建线程池 |
支持主动超时,支持异步调用 | 不支持主动超时,不支持异步调用 |
线程的额外开销比较大,性能一般,但是隔离性更强 | 轻量级,无额外开销,性能较好,但是隔离性一般 |
Sentinel的限流与Gateway的限流有什么差别?
限流算法常见的有三种实现:滑动时间窗口、令牌桶算法、漏桶算法。
Gateway则采用了基于Redis实现的令牌桶算法。
Sentinel限流算法
对比项 | 滑动时间窗口 | 令牌桶 | 漏桶 |
---|---|---|---|
能否保证流量曲线平滑 | 不能,但窗口内区间越小,流量控制越平滑 | 基本能,在请求量持续高于令牌生成速度时,流量平滑。在请求量在令牌生成速率上下波动时,无法保证曲线平滑 | 能,所有请求进入桶内,以恒定速率放行,绝对平滑 |
能否应对突增流量 | 不能,突增流量,只要高出限流阈值都会被拒绝 | 能,桶内积累的令牌可以应对突增流量 | 能,请求可以增存在桶内 |
流量控制精准度 | 低,窗口区间越小,精度越高 | 高 | 高 |
默认限流模式是基于滑动时间窗口算法
滑动时间窗限流算法解决了固定时间窗限流算法的问题。其没有划分固定的时间窗起点与终点,而是将每一次请求的到来时间点作为统计时间窗的终点,起点则是终点向前推时间窗长度的时间点。这种时间窗称为“滑动时间窗”
排队等待的限流模式则基于漏桶算法
将每个请求视作"水滴"放入"漏桶"进行存储;
"漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;
如果"漏桶"满了则多余的"水滴"会被直接丢弃。
可以理解成请求在桶内排队等待,可以处理突发请求,请求处理曲线平滑
比如单机阈值=10,也就是100ms放行一个请求
热点参数限流则是基于令牌桶算法
以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
如果令牌桶中没有令牌,则请求等待或丢弃
相关文章:

SpringCloud面试题
SpringCloud常见组件有哪些 注册中心组件:Eureka、Nacos 负载均衡组件:Ribbon 远程调用组件:OpenFeign 网关组件:Zuul、Gateway 服务保护组件:Hystrix、Sentinel 服务配置管理组件:SpringCloudConfig、Nac…...
深入了解Java Stream中的Collectors.partitioningBy()
在Java编程中,Stream API是一种强大的工具,它提供了处理集合数据的便捷方式。而Stream API中的Collectors.partitioningBy()方法则是其中一个十分有用的函数,它允许我们根据指定的条件将元素分成两个组。在本文中,我们将深入探讨这…...
下拉多选【bootstrap-multiselect】
1、引入资源 <link rel="stylesheet" href="${components}/bootstrap/css/bootstrap-multiselect.css"> <script src="${components}/bootstrap/js/bootstrap-multiselect.js"></script> 2、初始化 $("#topic-select&qu…...
建筑(八大员)报考条件
建筑八大员报考时间2024 建筑八大员每年考两次,上半年的考试时间一般在5-6月份,下半年的考试时间一般在10月左右。报名在考前2个月进行,2024年的考试时间和次数可能因省份而异,以住建厅通知为准。建筑八大员报考条件2024 1、年龄在18周岁以上(含18周…...

_remote.repositories作用
问题描述 明明我本地有某个依赖但是却还是报错,原因就是存在_remote.repositories且你的远程仓库中找不到该依赖,可能发生在你修改了远程仓库或镜像时。 例子 本地有这个依赖,但是报错。 解决 删除_remote.repositories文件࿰…...

2.3 Spark运行架构与原理
Spark运行架构由SparkContext、Cluster Manager和Worker构成。在集群模式下,Driver进程初始化SparkContext并向Cluster Manager申请资源,后者根据算法在Worker节点上启动Executor。Executor负责任务执行,反馈状态给Cluster Manager。任务由Ta…...

redis的跳表
typedef struct zskiplistNode {// 分值double score;// 成员对象robj *obj;// 后退指针struct zskiplistNode *backward;// 层struct zskiplistLevel {// 前进指针struct zskiplistNode *forward;// 跨度unsigned int span;} level[]; } zskiplistNode;跳表的节点查找算法可以…...

探索未知,开启海外盲盒新纪元——海外盲盒App,你的全球奇遇宝箱
一、引言 在快节奏、高压力的现代生活中,我们时常渴望一份来自未知的惊喜。为此,我们精心打造了一款全新的海外盲盒App,带你跨越地域界限,开启一场充满惊喜的全球奇遇之旅。 二、产品介绍 海外盲盒App是一款集购物、娱乐、文化…...

LeetCode2215找出两数组的不同
题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中:answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整数组…...

Git系列:git show 使用技巧
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

python爬虫(五)之新出行汽车爬虫
python爬虫(五)之新出行汽车爬虫 接完最后一单,终于肝完了最后一个python爬虫——新出行爬虫,将https://www.xchuxing.com网站上所有的汽车爬虫全部抓取下来。 import requests import json import csv from lxml import etree …...
记录:卡尔曼滤波推导
参考:古月居-卡尔曼滤波 一、高斯分布(Gaussian Distribution) 一维高斯分布:随机变量 X X X服从数学期望 μ \mu μ、方差 σ 2 \sigma^2 σ2的正态分布,概率密度函数为 p ( x ) p(x) p(x)。 X ∼ N ( μ , σ 2 )…...

AI游戏外挂为何违法?
尊敬的读者们,大家好!今天我想和大家探讨一个备受争议的话题——AI游戏外挂的合法性。近年来,随着人工智能技术的飞速发展,AI外挂逐渐成为游戏领域的一大毒瘤。那么,为什么AI游戏外挂会被视为违法行为呢?本…...
UVa1006/LA2238 Fixed Partition Memory Management
UVa1006/LA2238 Fixed Partition Memory Management 题目链接题意输入格式输出格式 分析AC 代码 题目链接 本题是2001年icpc世界总决赛的G题 题意 早期的多程序操作系统常把所有的可用内存划分成一些大小固定的区域,不同的区域一般大小不同,而所有区域的…...

Autosar架构
蓝框那种叫component,绿框的叫function cluster。 接口 有三种接口,RTE跟SWC之间链接的叫Autosar Interface,RTE跟BSW的Components链接是Standardized Interface,RTE跟BSW的services链接的是Standardized Autosar Interface。 St…...
Java 异常介绍
在Java中,异常(Exception)是程序在运行时遇到的问题或错误的表示。异常可以是由程序错误、非法操作、资源不足或其他意外情况引起的。Java异常分为两类:受检异常(Checked Exception)和未检查异常(Unchecked Exception)。 受检异常(Checked Exception): 受检异常是编…...

vulhub靶机struts2环境下的s2-032(CVE-2016-3081)(远程命令执行漏洞)
影响范围 Struts 2.3.19至2.3.20.2、2.3.21至2.3.24.1和2.3.25至2.3.28 当用户提交表单数据并验证失败时,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后重新填充到对应的表单数据中。 漏洞搭建 没有特殊要求,请看 (3…...
Kubernetes之Headless Services
Kubernetes中的Headless Services(无头服务)是一种特殊类型的服务(Service)定义,它不提供传统意义上的负载均衡和集群IP地址分配。在无头服务中,spec.clusterIP 字段被显式设置为None ,Kubernet…...

银行监管报送系统系列介绍(十七):一表通2.0
国家金融监督管理总局于9月发布了【一表通2.0(试用版)】(简称:一表通2.0),在原试点报送范围的基础上扩大了试点报送区域,意味着将陆续扩大试报送机构范围,推进的速度已明显加快。尽早…...

网络安全之OSPF进阶
该文针对OSPF进行一个全面的认识。建议了解OSPF的基础后进行本文的一个阅读能较好理解本文。 OSPF基础的内容请查看:网络安全之动态路由OSPF基础-CSDN博客 OSPF中更新方式中的触发更新30分钟的链路状态刷新。是因为其算法决定的,距离矢量型协议是边算边…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...
SQL进阶之旅 Day 22:批处理与游标优化
【SQL进阶之旅 Day 22】批处理与游标优化 文章简述(300字左右) 在数据库开发中,面对大量数据的处理任务时,单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”,深入探讨如何通过批量操作和游标技术提…...
C++ 类基础:封装、继承、多态与多线程模板实现
前言 C 是一门强大的面向对象编程语言,而类(Class)作为其核心特性之一,是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性,包括封装、继承和多态,同时讨论类中的权限控制,并展示如何使用类…...

工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...