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

面试题-----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.dtcms.com/a/323744.html

相关文章:

  • n8n 入门指南:更适合跨境出海搞钱的AI智能体
  • 7天精通Coze智能体实操手册(Day 1)
  • 健全性测试(Sanity Testing):你软件的快速“体检” ✅(省时避坑,确保核心!)
  • 【三个数绝对值排序】2022-10-10
  • 心灵笔记:思考三部曲
  • 记忆化搜索@cache与自己创建一个字典进行存储有区别吗
  • 10.final, finally, finalize的区别
  • Level-MC 11“天空”
  • SpringBoot配置生效优先级
  • 实战:MyBatis 中 db.properties 的正确配置与最佳实践
  • 通过 SCP 和 LXD 配置迁移 CUDA 环境至共享(笔记)
  • HTML全景效果实现
  • C语言(长期更新)第9讲:操作符详解(一)
  • 《励曼旋耕》Liman Rotary Tillage
  • AI大模型模态特征详解
  • 功能测试中常见的面试题-一
  • 第4章 程序段的反复执行for语句P115练习题(题及答案)
  • C++面向对象及其特性
  • 大语言模型提示工程与应用:大语言模型进阶提示工程技术
  • 【LLM实战|langchain】langchain基础
  • 百度网盘自动启动如何关闭,关闭智能看图
  • Windows系统NUL文件删除问题解决
  • 【ref、toRef、toRefs、reactive】
  • C++学习之STL学习:map/set
  • openvela之ADB
  • Java Stream 使用 Fork/Join框架的分治任务模型
  • 详解Windows(十四)——PowerShell与命令提示符
  • 如何检查减速机的密封件是否老化?
  • 06-docker容器常用命令
  • Docker镜像地址