面试题--SpirngCloud
SpringCloud 有哪些核心组件?(必会)
Eureka: 注册中心, 服务注册和发现
Ribbon: 负载均衡, 实现服务调用的负载均衡
Hystrix: 熔断器 Feign: 远程调用
Zuul: 网关
Spring Cloud Config: 配置中心
(1)Eureka 提供服务注册和发现, 是注册中心. 有两个组件: Eureka 服务端和 Eureka 客户端 Eureka 服务端: 作为服务的注册中心, 用来提供服务注册, 支持集群部署.
Eureka 客户端: 是一个 java 客户端, 将服务注册到服务端, 同事将服务端的信息缓存 到本地, 客户端和服务端定时交互.
1. 原理
Eureka-Server:就是服务注册中心(可以是一个集群),对外暴露自己的地址。
提供者:启动后向 Eureka 注册自己信息(地址,服务名称等),并且定期进行服务续 约 消费者:服务调用方,会定期去 Eureka 拉取服务列表,然后使用负载均衡算法选出一 个服务进行调用。
心跳(续约):提供者定期通过 http 方式向 Eureka 刷新自己的状态
2. 服务下线、失效剔除和自我保护
服务的注册和发现都是可控制的,可以关闭也可以开启。默认都是开启
注册后需要心跳,心跳周期默认 30 秒一次,超过 90 秒没发心跳认为宕机
服务拉取默认 30 秒拉取一次.
Eureka 每个 60 秒会剔除标记为宕机的服务
Eureka 会有自我保护,当心跳失败比例超过阈值(默认 85%),那么开启自我保护,不 再剔除服务。 Eureka 高可用就是多台 Eureka 互相注册在对方上.
(2)Ribbon
Ribbon 是 Netflix 发布的云中服务开源项目. 给客户端提供负载均衡, 也就是说 Ribbon 是作用在消费者方的.
简单来说, 它是一个客户端负责均衡器, 它会自动通过某种算法去分配你要连接的机 器. SpringCloud 认为 Ribbon 这种功能很好, 就对它进行了封装, 从而完成负载均衡. Ribbon 默认负责均衡策略是轮询策略.
(3)Hystrix 熔断器
有时候可能是网络问题, 一些其它问题, 导致代码无法正常运行, 这是服务就挂了, 崩 溃了. 熔断器就是为了解决无法正常访问服务的时, 提供的一种解决方案.
解决因为一个服务崩溃而引起的一系列问题, 使问题只局限于这个服务中,不会影响其 他服务.
Hystrix 提供了两种功能, 一种是服务降级, 一种是服务熔断.
1. 服务降级原理
Hystrix 为每个服务分配了小的线程池, 当用户发请求过来, 会通过线程池创建线 程来执行任务, 当创建的线程池已满或者请求超时(这里和多线程线程池不一样,不 存在任务队列), 则启动服务降级功能. 降级指的请求故障时, 不会阻塞, 会返回一个友好提示(可以自定义, 例如网站维 护中请稍后重试), 也就是说不会影响其他服务的运行.
2. 服务熔断原理 状态机有 3 个状态:
Closed:关闭状态(断路器关闭),所有请求都正常访问。
Open:打开状态(断路器打开),所有请求都会被降级。Hystix 会对请求情况计数, 当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全关闭。默认失败比 例的阈值是 50%,请求次数最少不低于 20 次。
Half Open:半开状态,open 状态不是永久的,打开后会进入休眠时间(默认是 5S)。 随后断路器会自动进入半开状态。此时会释放 1 次请求通过,若这个请求是健康的, 则会关闭断路器,否则继续保持打开,再次进行 5 秒休眠计时。
(4)Feign: 远程调用组件
后台系统中, 微服务和微服务之间的调用可以通过 Feign 组件来完成.
Feign 组件集成了 Ribbon 负载均衡策略(默认开启的, 使用轮询机制), Hystrix 熔断器 (默认关闭的, 需要通过配置文件进行设置开启)
被调用的微服务需要提供一个接口, 加上@@FeignClient("url")注解 调用方需要在启动类上加上@EnableFeignClients, 开启 Feign 组件功能.
(5)Zuul: 路由/网关
对于项目后台的微服务系统, 每一个微服务都不会直接暴露给用户来调用的, 但是如果 用户知道了某一个服务的 ip:端口号:url:访问参数, 就能直接访问你. 如果再是恶意访问, 恶意攻击, 就会击垮后台微服务系统.因此, 需要一个看大门的大 boss, 来保护我们的 后台系统.
Zuul 类似 Nginx, 反向代理功能. 用户访问服务, 首先会到 Zuul 中心, Zuul 去 Eureka 中拉取服务, 获取服务列表, 获取具体的地址, 再通过具体的地址去访问目标微服务.
Zuul 提供了过滤和路由两个功能, 过滤可以分配权限, 允许谁可以访问谁不可以访问, 路由则是去 Eureka 拉取服务提访问地址.
Zuul 网关也继承了 Ribbon 负载均衡和 Hystix 熔断机制.
(6)Spring Cloud Config
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所 以需要分布式配置中心组件。在 Spring Cloud 中,有分布式配置中心组件 spring Cloud Config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程 Git 仓库中.
那我们如果想在不重启微服务的情况下更新配置如何来实现呢? 我们使用 SpringCloudBus 来实现配置的自动更新. 创建 Config Server 微服务, 用于存放配置文件, 默认使用 git 存储此项目.
创建 Config Client 微服务, 用于拉取 git 上的配置文件, 项目中集成 SpringCloudBus 对应的消息中间件 jar 包.
更新配置文件的流程
手动向 Mq 队列中发送消息,http://127.0.0.1:12000/actuator/bus-refresh(固定 地址)
Config Client 中的 MQ 监听到消息, 去 git 服务器上加载新的配置文件, 并向 mq 中生产一条配置文件变更的消息.
其他被集中管理的微服务也集成了 mq,监听到消息, 向 Config Client 中重新获取 最新的配置文件. 、
SpringBoot 和 SpringCloud 的关系(必会)
SpringBoot 是为了解决 Spring 配置文件冗余问题, 简化开发的框架.
SpringCloud 是为了解决微服务之间的协调和配置问题, 还有服务之间的通信, 熔断, 负载均衡远程调度任务框架.
SpringCloud 需要依赖 SpringBoot 搭建微服务, SpringBoot 使用了默认大于配 置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,SpringCloud 很大的一部分是基于 SpringBoot 来实现。
SpringBoot 不需要依赖 SpringCloud 就可以独立开发. SpringBoot 也可以集成 Dubbo 进行开发.
SpringCloud 和 Dubbo 的区别(高薪常问)
SpringCloud 和 Dubbo 都是主流的微服务架构.
SpringCloud 是 Apache 下的 Spring 体系下的微服务解决方案.
Dubbo 是阿里系统中分布式微服务治理框架.
技术方面对比 SpringCloud 功能远远超过 Dubbo, Dubbo 只实现了服务治理(注册和发现). 但 是 SpringCloud 提供了很多功能, 有 21 个子项目
Dubbo 可 以 使 用 Zookeeper 作 为 注 册 中 心 , 实 现 服 务 的 注 册 和 发 现 , SpringCloud 不仅可以使用 Eureka 作为注册中心, 也可以使用 Zookeeper 作为 注册中心.
Dubbo 没有实现网关功能, 只能通过第三方技术去整合. 但是 SpringCloud 有 zuul 路由网关, 对请求进行负载均衡和分发. 提供熔断器, 而且和 git 能完美集成.
性能方面对比
由于 Dubbo 底层是使用 Netty 这样的 NIO 框架,是基于 TCP 协议传输的,配合 以 Hession 序列化完成 RPC。
而 SpringCloud 是基于 Http 协议+Rest 接口调用远程过程的,相对来说,Http 请求会有更大的报文,占的带宽也会更多。
使用 Dubbo 时, 需要给每个实体类实现序列化接口, 将实体类转化为二进制进行 RPC 通信调用.而使用 SpringCloud 时, 实体类就不需要进行序列化. 刚才有提到注册中心不一样,那么 Eureka 和 Zookeeper 有什么区别? 我们继续往 下说~
Eureka 和 Zookeeper 的区别(高薪常问)
在谈这个问题前我们先看下 CAP 原则: C(Consistency)-数据一致性; A(Availability)- 服务可用性; P(Partition tolerance)-服务对网络分区故障的容错性, 这三个特性在任何分 布式系统中不能同时满足, 最多同时满足两个, 而且 P(分区容错性)是一定要满足的.
Eureka 满足 AP(服务可用性和容错性), Zookeeper 满足 CP(数据一致性和容错性)
Zookeeper 满足 CP, 数据一致性, 服务的容错性. 数据在各个服务间同步完成后才返 回用户结果, 而且如果服务出现网络波动导致监听不到服务心跳, 会立即从服务列表中 剔除, 服务不可用.
Eureka 满足 AP, 可用性, 容错性. 当因网络故障时, Eureka 的自我保护机制不会立即 剔除服务, 虽然用户获取到的服务不一定是可用的, 但至少能够获取到服务列表. 用户 访问服务列表时还可以利用重试机制, 找到正确的服务. 更服务分布式服务的高可用需 求.
Eureka 集群各节点平等, Zookeeper 集群有主从之分.
1. 如果 Zk 集群中有服务宕机,会重新进行选举机制,选择出主节点, 因此可 能会导致整个集群因为选主而阻塞, 服务不可用.
2. Eureka 集群中有服务宕机,因为是平等的各个服务器,所以其他服务器不 受影响.
Eureka 的服务发现者会主动拉取服务, ZK 服务发现者是监听机制
1. Eureka 中获取服务列表后会缓存起来, 每隔 30 秒重新拉取服务列表.
2. Zk 则是监听节点信息变化, 当服务节点信息变化时, 客户端立即就得到 通知.
相关文章:
面试题--SpirngCloud
SpringCloud 有哪些核心组件?(必会) Eureka: 注册中心, 服务注册和发现 Ribbon: 负载均衡, 实现服务调用的负载均衡 Hystrix: 熔断器 Feign: 远程调用 Zuul: 网关 Spring Cloud Config: 配置中心 (1)Eureka 提供服务注册和发现, 是注册中心. 有两个组…...
中位数贪心,3086. 拾起 K 个 1 需要的最少行动次数
一、题目 1、题目描述 给你一个下标从 0 开始的二进制数组 nums,其长度为 n ;另给你一个 正整数 k 以及一个 非负整数 maxChanges 。 Alice 在玩一个游戏,游戏的目标是让 Alice 使用 最少 数量的 行动 次数从 nums 中拾起 k 个 1 。游戏开始…...
xml_woarchive undefined symbol
最近在linux中编译一个自己写的老代码。是个C动态库。可以编译成功,但直到运行的时候才报 boost xml_woarchive undefined symbol. 解决的方法是在编译时要加上 wserialization 库。 注意,这个库有含 w 和不含 w 两个。在我这里需要使用含 w 的。 如果…...
SiCat:一款多功能漏洞利用管理与搜索工具
关于SiCat SiCat是一款多功能漏洞利用管理与搜索工具,该工具基于纯Python 3开发,旨在帮助广大研究人员有效地识别和收集来自开源和本地存储库的漏洞信息。 SiCat专注于网络安全管理方面的实践工作,允许研究人员快速实现在线搜索,…...
毕业论文初稿写作方法与过程
毕业论文初稿写作方法与过程 毕业论文是大学生在学业结束前必须完成的一项重要任务,它不仅是对学生所学知识的综合运用,也是对学生研究能力和写作能力的检验。写好毕业论文初稿是完成高质量毕业论文的关键一步。下面将具体阐述毕业论文初稿的写作方法和过…...
SLAM 精度评估
SLAM 精度的评估有两个最重要的指标,即绝对轨迹误差(ATE)和相对位姿误差(RPE)的 均方根误差(RMSE): 绝对轨迹误差:直接计算相机位姿的真实值与 SLAM 系统的估计值之间的差值,首先将…...
Postman使用教程
传统接口风格 RESTful风格 使用Postman完成测试用例目标: Postman教程 (1)准备工作,下载Postman新建 (2)登录接口调试-获取验证码 (3)登录接口调试-登录 (4)…...
UDP协议深入解析
一. UDP报文结构 UDP报文由以下4个字段组成: 源端口号(Source Port):16位,标识发送方的端口号。如果发送方没有使用端口号,则该字段为0。 目标端口号(Destination Port):16位,标识接收方的端口号。 长度(Length):16位,表示UDP报文的总长度,…...
Rethinking Federated Learning with Domain Shift: A Prototype View
CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…...
打卡第2天----数组双指针,滑动窗口
今天是参与训练营第二天,这几道题我都看懂了,自己也能写出来了,实现思路很重要,万事开头难,希望我可以坚持下去。希望最后的结果是量变带来质变。 一、理解双指针思想 leetcode编号:977 不止是在卡尔这里…...
Running cmake version 2.8.12.2解决方案
Centos7安装mysql8.0,编译环节出现如下报错: Running cmake version 2.8.12.2 CMake Warning at CMakeLists.txt:82 (MESSAGE):Please use cmake3 rather than cmake on this platform-- Please install cmake3 (yum install cmake3) CMake Error at CMa…...
stm32中IIC通讯协议
参考资料:大部分均引用b站江协科技课程、GPT及网络资料 什么是IIC(i2C)通讯协议? 关键字:SCL、SDA、半双工、同步、串行。 IIC(Inter-Integrated Circuit),也称为I2C(In…...
允许防火墙通过端口 6379(通常用于 Redis 服务)那些年因为连接失败而一起熬过的夜
要允许防火墙通过端口 6379(通常用于 Redis 服务),您可以按照以下步骤在防火墙中添加规则。这里提供了使用 firewalld 和 ufw 两种常见防火墙管理工具的方法。 使用 firewalld (CentOS、Red Hat 等) 1. 启动并启用 f…...
tsconfig.json的include和exclude作用
tsconfig.json中的include和exclude属性用于指定需要被编译的TypeScript文件和需要被排除的文件。 include属性:用于指定哪些.ts、.tsx或.d.ts文件需要被编译。如果不指定include属性,则默认当前目录下除了exclude之外的所有.ts、.d.ts、…...
firewalld(8) policies
简介 前面的文章中我们介绍了firewalld的一些基本配置以及NAT的相关配置。在前面的配置中,我们所有的策略都是与zone相关的,例如配置的rich rule,--direct,以及NAT,并且这些配置都是数据包进入zone或者从zone发出时设置的策略。 我们在介绍…...
为什么进口主食冻干那么高贵?必入榜主食冻干总结分享
新手养猫人常常会有这样的疑问:为何进口主食冻干价格如此昂贵,但仍有大量养猫达人对其推崇备至?与国产主食冻干相比,进口产品的价格高出3-4倍之多,那么这高昂的价格背后,进口主食冻干是否真的值得推荐&…...
状态模式在金融业务中的应用及其框架实现
引言 状态模式(State Pattern)是一种行为设计模式,它允许对象在内部状态改变时改变其行为。状态模式通过将状态的相关行为分离到独立的状态类中,使得状态转换更加明确和简洁。在金融业务中,状态模式可以用于实现交易状…...
redis学习(002 安装redis和客户端)
黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第5p-第p7的内容 文章目录 安装redis启动启动方式1:可执行文件启动启动方式2 基于配置文件启动修改redis配置文件 …...
在线客服系统多国语言,适合跨境外贸业务对外沟通 ,哈萨克语客服系统,根据浏览器语种标识自动切换...
我们看一下我们客服系统的哈萨克语展示。 演示网站:gofly.v1kf.com 有个客户,他们的业务主要是位于哈萨克斯坦,需求是访客端使用哈萨克语来展示。 现在这个界面就是哈萨克语的。当然,也可以切换成中文。界面上的文案已经切换成中文…...
等保2.0是否强制要求所有物联网设备都必须支持自动更新?
等保2.0对物联网设备自动更新的要求 等保2.0(网络安全等级保护2.0)是中国政府为了加强网络安全而推出的一套标准和要求。在物联网设备的安全管理方面,等保2.0确实提出了一系列措施,以确保设备的软件安全更新。这些措施包括&#…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
