当前位置: 首页 > backend >正文

面试题-----Spring Cloud

Spring Cloud

1.Spring Cloud 5大组件有哪些?

一、传统 Spring Cloud 组件

  1. Eureka(注册中心):负责服务的注册与发现,服务提供者启动时向 Eureka 注册自身信息(如服务地址、端口等 ),服务消费者可从 Eureka 获取所需服务的实例列表,实现服务的动态管理与调用。
  2. Ribbon(负载均衡 ):在服务消费者调用服务提供者时,从多个可用的服务实例中,按照一定策略(如轮询、随机等 )选择一个实例进行调用,将请求合理分配,提升系统的可用性和稳定性,减轻单个实例压力。
  3. Feign(远程调用 ):基于接口和注解的声明式 HTTP 客户端,让开发者可以像调用本地方法一样调用远程服务,简化了服务间远程调用的代码编写,自动集成了 Ribbon ,具备负载均衡能力。
  4. Hystrix(服务熔断 ):当服务调用出现故障(如超时、服务不可达等 )时,开启熔断机制,直接返回一个 fallback (降级 )结果,避免故障在服务调用链中蔓延,保障系统整体的容错性和稳定性。
  5. Zuul/Gateway(网关 ):作为系统的统一入口,拦截所有外界对系统内部服务的请求,可实现路由转发(将请求转发到对应的服务 )、请求过滤(如鉴权、限流、日志记录等 ),对系统内部服务起到保护和统一管控的作用。

二、结合 Spring Cloud Alibaba 的组件

  1. Nacos(注册中心 / 配置中心 ):兼具服务注册发现和配置管理功能。服务注册发现功能类似 Eureka ,让服务能注册自身并被发现;配置中心功能可集中管理不同环境、不同服务的配置信息,实现配置的动态更新与推送 。
  2. Ribbon(负载均衡 ):作用和传统 Spring Cloud 里的 Ribbon 一致,在服务调用时进行负载均衡,选择合适的服务实例,保障请求合理分配 。
  3. Feign(服务调用 ):和传统 Spring Cloud 中功能相同,以声明式方式简化服务间远程调用流程,让开发者更便捷地实现跨服务交互 。
  4. Sentinel(服务保护 ):提供流量控制、熔断降级、系统负载保护等功能,比 Hystrix 具备更丰富的规则配置和更细致的流量管控能力,当服务面临高并发、异常等情况时,保障服务稳定运行,防止系统被压垮 。
  5. Gateway(服务网关 ):功能同传统 Spring Cloud 里的 Zuul/Gateway 类似,作为系统对外的统一访问入口,进行路由、过滤等操作,对系统内部服务进行防护和统一调度 。

2.服务注册和发现是什么意思?Spring Cloud如何实现服务注册发现?

  • 我们当时项目采用的 eureka 作为注册中心,这个也是 spring cloud 体系中的一个核心组件
  • 服务注册:服务提供者需要把自己的信息注册到 eureka,由 eureka 来保存这些信息,比如服务名称、ip、端口等等
  • 服务发现:消费者向 eureka 拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用
  • 服务监控:服务提供者会每隔 30 秒向 eureka 发送心跳,报告健康状态,如果 eureka 服务 90 秒没接收到心跳,从 eureka 中剔除

3.nacos与eureka的区别?

  • Nacos 与 eureka 的共同点(注册中心)
    • ① 都支持服务注册和服务拉取
    • ② 都支持服务提供者心跳方式做健康检测
  • Nacos 与 Eureka 的区别(注册中心)
    • ① Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    • ② 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    • ③ Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时
    • ④ Nacos 集群默认采用 AP 方式,当集群中存在非临时实例时,采用 CP 模式;Eureka 采用 AP 方式
  • Nacos 还支持了配置中心,eureka 则只有注册中心,也是选择使用 nacos 的一个重要原因

4.你们项目负载均衡如何实现的?

在我们项目里,负载均衡是借助 Ribbon 组件实现的,流程如下:

  1. 当 order - service 发起如 http://userservice/user/1 这样的请求时,请求先到达 Ribbon 负载均衡模块。
  2. Ribbon 会向注册中心拉取 userservice 对应的服务列表,注册中心返回包含 localhost:8081localhost:8082 等实例的服务列表 。
  3. Ribbon 依据配置的负载均衡策略(此处示例为轮询策略 ),从服务列表里选一个实例(比如本次轮询选到 8081 ),然后将请求转发给该实例,以此实现负载均衡,合理分配请求到不同的 user - service 实例上。

5.Ribbon负载均衡策略有那些?

  1. RoundRobinRule(轮询策略 )
    按顺序依次从服务列表中选择服务器,比如服务列表有实例 A、B、C ,则按照 A→B→C→A→B→C… 的顺序循环选择,实现简单的请求均摊,是最基础常用的策略。

  2. WeightedResponseTimeRule(加权响应时间策略 )
    根据服务器的响应时间动态调整权重,响应时间越长,被选中的概率越低(权重越小 )。会持续统计各服务器响应时间,自动计算权重,让响应快的服务器承担更多请求,优化整体响应效率。

  3. RandomRule(随机策略 )
    完全随机地从可用服务列表中挑选一个服务器,不考虑服务器负载、响应时间等因素,简单易实现,在服务实例性能差异小的场景,能起到基本的负载分散作用。

  4. ZoneAvoidanceRule(区域感知策略 )
    先按 “区域(Zone ,可理解为机房、机架等 )” 对服务器分类,优先选择健康、可用区域,再在区域内对服务实例做轮询。可减少跨区域调用延迟,优先保障同区域内服务调用,提升稳定性和效率,适合多机房部署场景。

6.如果想自定义负载均衡策略如何实现?

提供了两种方式:
1,创建类实现 IRule 接口,可以指定负载均衡策略(全局)
2,在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略(局部)

7.什么是服务雪崩,怎么解决整个问题?

  • 服务雪崩:一个服务失败,导致整条链路的服务都失败的情形
  • 服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与 feign 接口整合,编写降级逻辑

  • 服务熔断:默认关闭,需要手动打开,如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制。之后每隔 5 秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求

http://www.xdnf.cn/news/17388.html

相关文章:

  • LLM 的向量的方向表示语义,向量长度表示什么
  • 强化学习笔记:从Q学习到GRPO
  • 1.JavaScript 介绍
  • Linux系统编程Day10 -- 进程管理
  • 分治-快排-面试题 17.14.最小k个数-力扣(LeetCode)
  • 在 Vue 中动态引入SVG图标的实现方案
  • Horse3D引擎研发笔记(三):使用QtOpenGL的Shader编程绘制彩色三角形
  • 第十九天-输入捕获实验
  • Redis面试题及详细答案100道(01-15) --- 基础认知篇
  • synchronized和RentrantLock用哪个?
  • LangChain-Unstructured 基础使用:PDF 与 Markdown 处理解析
  • 深入解析进程创建与终止机制
  • RAG-大模型课程《李宏毅 2025》作业1笔记
  • 算法篇----分治(快排)
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:General Purpose I/O (GPIO)通用输入 / 输出,LED控制亮灭,按键控制,中断控制
  • 【Mac】MLX:Lora微调工作流
  • 疯狂星期四文案网第34天运营日记
  • 第15届蓝桥杯Scratch图形化省赛中级组2024年8月24日真题
  • C++四种类型转换
  • 决策树技术详解:从理论到Python实战
  • 数据标准化与归一化的区别与应用场景
  • UE蓝图节点Add Impulse和Add Torque in Radians
  • Solana上Launchpad混战:新颖性应被重视
  • [激光原理与应用-201]:光学器件 - 增益晶体 - 概述
  • 大语言模型提示工程与应用:LLMs文本生成与数据标注实践
  • Java基础-TCP通信(多发多收和一发一收)
  • PHP-单引号和双引号(通俗易懂讲解版)
  • MySQL 元数据详细说明
  • AI基础与实践专题:神经网络基础
  • 探索Trae:使用Trae CN爬取 Gitbook 电子书