面试题--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 则是监听节点信息变化, 当服务节点信息变化时, 客户端立即就得到 通知.

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

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

相关文章

【最新】App Inventor 2 学习平台和AI2伴侣使用

1、AppInventor2服务器: 官方服务器:http://ai2.appinventor.edu/ 官方备用服务器:http://code.appinventor.mit.edu/ 国内同步更新服务器:https://www.fun123.cn 国内访问速度很快,很稳定,文档是中文的…

Android11 系统/framework层禁止三方应用开机自启动。

背景介绍:客户给了定制的launcher,要求在设备上启动他们的launcher,实现过程中出现的问题是 开机引导还没走完,launcher就会自己弹出来打断开机引导,按道理来说launcher是在开机引导结束后,由开机引导通过i…

偏微分方程笔记(驻定与非驻定问题)

椭圆方程可以看成抛物方程 t → ∞ t\rightarrow\infty t→∞的情况。 抛物: 双曲:

什么是deep supervision?

Deep supervision 是深度学习中的一种技术,通常用于改进模型训练的效果,尤其是在训练深度神经网络时。它通过在模型的多个中间层添加辅助监督信号(即额外的损失函数)来实现。这种方法有助于缓解梯度消失问题,加速收敛&…

DolphinDB 蝉联 Gartner 中国实时数据管理代表厂商

报!DolphinDB 又上榜啦!!! 上月,全球知名信息技术研究公司 Gartner 发布了 Hype Cycle for Data, Analytics and AI in China, 2024 报告,以技术成熟度曲线(Hype Cycle)和优先级矩阵…

【NLP学习笔记】load_dataset加载数据

除了常见的load_dataset(<hf上的dataset名>)这种方式加载HF上的所有数据外&#xff0c;还有其他custom的选项。 加载HF上部分数据 from datasets import load_dataset c4_subset load_dataset("allenai/c4", data_files"en/c4-train.0000*-of-01024.js…

Spring Boot集成多数据源的最佳实践

Spring Boot集成多数据源的最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 为什么需要多数据源&#xff1f; 在实际的应用开发中&#xff0c;有时候…

【C++ Primer Plus学习记录】函数和C-风格字符串

将字符串作为参数时意味着传递的是地址&#xff0c;但可以使用const来禁止对字符串参数进行修改。 假设要将字符串作为参数传递给函数&#xff0c;则表示字符串的方式有三种&#xff1a; &#xff08;1&#xff09;char数组 &#xff08;2&#xff09;用引号括起来的字符串常…

航空数据管控系统-②项目分析与设计:任务1:需求分析-项目场景引入

任务描述 知识点&#xff1a;需求分析 重 点&#xff1a;原型设计工具&#xff0c;用例图&#xff0c;流程图绘制工具 难 点&#xff1a;功能点的梳理 内 容&#xff1a;完成本次实训项目的需求分析 先共同讨论处本项目的主要功能模块&#xff0c;并确定每个模块的负责…

通过卷防水上限,解锁手机的新玩法?IP68之间亦有不同

当手机的日常防水已经成了基本功&#xff0c;防水能力的上限便成了新的赛道。 毕竟再谨慎的人&#xff0c;也可能会有手滑的时候。这个时候&#xff0c;一台有着IP68级防水的手机&#xff0c;就能给你提供一份安心。 【IP68是标准上限&#xff0c;不是手机防水上限】 IP68是…

JAVA学习笔记2

一、加号使用 二、数据类型 bit&#xff1a;计算机中的最小存储单位 byte(字节):计算机中基本存储单元&#xff0c;1byte8bit 浮点数符号位指数位尾数位 浮点数默认为double类型

2024亚太杯中文赛B题全保姆教程

B题 洪水灾害的数据分析与预测 问题 1. 请分析附件 train.csv 中的数据&#xff0c;分析并可视化上述 20 个指标中&#xff0c;哪 些指标与洪水的发生有着密切的关联&#xff1f;哪些指标与洪水发生的相关性不大&#xff1f;并 分析可能的原因&#xff0c;然后针对洪水的提前预…

Teamviewer删除可信任设备

目前基本上主流的远程连接软件都有限制&#xff0c;要么收费&#xff1b; Teamviewer可信任设备有限&#xff0c;超出限制就会提示错误&#xff0c;需要删除多余的设备才能登陆账号&#xff01; 需要登陆这个网站 Teamviewer Management console&#xff0c;才能修改&#xff…

基于 STM32 的智能睡眠呼吸监测系统设计

本设计的硬件构成&#xff1a; STM32F103C8T6单片机最小系统板&#xff08;包含3.3V稳压电路时钟晶振电路复位电路&#xff08;上电自复位&#xff0c;手动复位&#xff09;&#xff09;&#xff0c;心率传感器、气压传感器、液晶显示、按键、蜂鸣器、LED灯、蓝牙模块组合而成…

【C++/STL深度剖析】priority_queue 最全解析(什么是priority_queue? priority_queue的常用接口有哪些?)

目录 一、前言 二、如何区分【优先级队列】与【队列】&#xff1f; 三、priority_queue的介绍 四、priority_queue 的构造 五、priority_queue 的常用接口 &#x1f4a7;push &#x1f4a7;pop &#x1f4a7;size &#x1f4a7;top &#x1f4a7;empty &…

YOLOv5改进 | 损失函数 | EIoU、SIoU、WIoU、DIoU、FocuSIoU等多种损失函数

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a; 《YOLOv5入门 …

Nginx-rewrite模块详解

文章目录 前言一、ngx_http_rewrite_module模块二、指令详解1.break案例 2. if指令案例 3. return指令案例&#xff1a;return 的优先级 4. rewrite指令案例 5. set指令 总结 前言 nginx一些场景&#xff0c;我们需要使用rewrite模块。例如域名改了&#xff0c;为了利用网站se…

什么是YUV和IPB,PTS和DTS,视频编码解码过程

YUV 是一种在视频处理和压缩中常用的颜色空间。 它将图像的亮度 (Y) 与色度 (U 和 V) 成分分开。 这种分离对视频压缩和广播非常有益&#xff0c; 因为人眼对亮度变化比对颜色变化更敏感。 YUV 组件简介 Y (亮度)&#xff1a;表示图像的亮度或灰度信息。U (色度)&#xff1a;…

git - 变基、合并、重置后的回退操作

介绍 ORIG_HEAD 是 Git 中一个特殊的引用&#xff0c;用来指向某些操作&#xff08;如合并、变基、重置等&#xff09;前的状态。它可以用来快速恢复到这些操作之前的状态。下面是 ORIG_HEAD 的用法和一些常见的使用场景&#xff1a; 用法 1. 查看 ORIG_HEAD 使用以下命令查…

程序员需要具备的核心竞争力

随着IT人才的饱和&#xff0c;互联网就业形势越严峻。 作为一名工程师&#xff0c;需要具备哪些基本素养与能力&#xff0c;才能够应对这样的就业环境&#xff1f; 按照优先级排序如下&#xff1a; 1 业务理解、需求沟通能力 业务理解与需求沟通看似是技术经理、架构师需要…