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

Java面试第十一山!《SpringCloud框架》

大家好,我是陈一。如果文章对你有帮助,请留下一个宝贵的三连哦~ 万分感谢!

目录

一、Spring Cloud 是什么​

二、Spring Cloud 核心组件​

1. 服务发现 - Eureka​

2. ​负载均衡 - Ribbon​

3. 断路器 - Hystrix​

​​4. 网关 - Zuul​

三、Spring Cloud 应用场景​

四、面试真题

1. SpringCloud 和 Dubbo有那些区别?

2. SpringBoot 和 SpringCloud,请谈谈你对他们的理解

3. Spring Cloud Config是如何实现配置中心的?

4. 双十一期间,订单服务调用库存服务出现超时怎么解决

五、总结


一、Spring Cloud 是什么

Spring Cloud 并不是一个单独的框架,而是一系列框架的集合。它基于 Spring Boot 构建,提供了构建分布式系统的各种工具和组件,帮助开发者快速搭建可靠、可扩展的分布式系统。就好比你要搭建一个大型游乐场,Spring Cloud 就像是一套完整的搭建工具包,里面有建造过山车轨道的组件(服务发现)、管理游客流量的组件(负载均衡)等等,让你能更轻松地把游乐场搭建起来。​

二、Spring Cloud 核心组件

组件作用常用配置项替代方案
Eureka服务注册中心心跳间隔(30s)、失效时间(90s)Nacos
Ribbon负载均衡器轮询/随机/响应时间权重LoadBalancer
OpenFeign声明式HTTP客户端超时时间、重试次数RestTemplate
Hystrix服务熔断熔断阈值(20次)、恢复时间(5s)Sentinel
GatewayAPI网关路由规则、过滤器链Zuul

1. 服务发现 - Eureka​

作用

Eureka 就像是游乐场里的游客信息中心。在分布式系统中,各个服务(可以想象成游乐场里的不同游乐设施)会向 Eureka 注册自己的信息,包括服务地址、端口等。当其他服务需要调用某个服务时,就可以到 Eureka 这里来查找服务的位置。​

工作原理:​

服务提供者启动后,会定期向 Eureka Server 发送心跳,告诉 Eureka 自己还 “活着”。​

服务消费者在调用服务前,先从 Eureka Server 获取服务列表,然后根据一定的规则选择一个服务实例进行调用。​

示例图:

2. ​负载均衡 - Ribbon​

作用:Ribbon 如同游乐场入口处的排队引导员。当有多个服务实例提供相同的服务时(比如有多个相同的旋转木马设施),Ribbon 会负责把客户端的请求均衡地分配到这些实例上,避免某个实例压力过大,而其他实例却闲置。​

工作方式:​它会和 Eureka 配合使用,从 Eureka 获取到服务实例列表后,在客户端根据不同的负载均衡算法(如随机、轮询等)来选择一个实例进行请求发送。​

负载均衡算法对比表格:​​

算法名称​

描述​

应用场景​

轮询​

依次将请求分配到每个实例​

实例性能相近时​

随机​

随机选择一个实例​

对负载均衡精度要求不高时​

加权轮询​

根据实例权重分配请求,权重高的分配更多请求​

实例性能有差异时​

3. 断路器 - Hystrix​

作用:Hystrix 像是游乐场里的安全闸。在分布式系统中,服务之间的调用可能会因为各种原因失败(比如某个游乐设施临时故障),如果大量的请求因为调用失败而一直等待,会占用大量资源,甚至导致整个系统崩溃。Hystrix 通过熔断机制,当某个服务调用失败率达到一定阈值时,就会自动熔断,不再继续尝试调用,而是直接返回一个预设的结果,避免故障扩散。​

工作流程:​

  • 当请求调用服务时,Hystrix 会监控调用的成功和失败次数。​
  • 如果失败率超过设定的阈值,断路器就会打开,后续一段时间内的请求不再实际调用服务,而是直接返回 fallback(备用)结果。​
  • 经过一段时间后,断路器会进入半开状态,尝试放行少量请求,如果这些请求成功,断路器就会关闭,恢复正常调用;如果失败,断路器再次打开。​

​​4. 网关 - Zuul​

作用:Zuul 如同游乐场的大门。它是整个分布式系统对外的统一入口,所有外部请求都会先经过 Zuul。Zuul 可以对请求进行路由、过滤等操作,比如检查游客(请求)是否有门票(权限),决定将游客引导到哪个游乐设施(服务)。​

功能:

  • 路由功能:根据请求的 URL 等信息,将请求转发到对应的服务实例。​
  • 过滤功能:可以在请求进入系统前或响应返回前,对请求和响应进行处理,如身份验证、日志记录等。​

三、Spring Cloud 应用场景

1. 电商系统​

  • 服务拆分:电商系统包含商品管理、订单管理、用户管理等多个功能模块。可以将每个模块拆分成独立的服务,使用 Spring Cloud 进行管理。例如,商品服务负责管理商品信息的增删改查,订单服务负责处理订单相关业务。通过服务发现和负载均衡,确保各个服务高效运行。​
  • 高并发处理:在促销活动期间,大量用户同时访问系统,可能会导致某些服务压力过大。Hystrix 断路器可以防止因某个服务故障而引发整个系统的雪崩效应。同时,Ribbon 负载均衡可以将用户请求均匀分配到各个服务实例上,提高系统的并发处理能力。​
  • 安全与权限管理:Zuul 网关可以对所有进入系统的请求进行身份验证和权限检查,确保只有合法用户能够访问相应的服务,保障系统的安全性。​

2. 在线教育平台​

  • 课程服务:课程服务包含课程视频播放、课程资料下载等功能。通过 Spring Cloud 的服务发现和负载均衡,将课程服务的请求分配到多个实例上,保证大量用户同时观看课程时的流畅性。​
  • 用户互动:如直播互动、评论等功能,可能涉及多个服务之间的调用。Hystrix 断路器可以在某个服务出现故障时,保障其他服务的正常运行,提升用户体验。​

四、面试真题

1. SpringCloud 和 Dubbo有那些区别?

Spring Cloud 抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式

Dubbo采用的是RPC调用,SpringCloud采用http的REST方式,

在一定程度上牺牲了调用上的性能,但是降低了代码的强依赖性,是微服务架构更加灵活

2. SpringBoot 和 SpringCloud,请谈谈你对他们的理解

SpringBoot可以离开SpringCloud独立使用,开发项目,但SpringCloud离不开SpringBoot,属于依赖关系;

Spring Cloud之所以离不开Spring Boot,是因为Spring Boot为构建微服务提供了必要的快速开发基础、统一的依赖管理与启动机制、强大的自动配置能力、嵌入式服务支持以及一致的开发体验。这些特性使得Spring Cloud能够专注于提供微服务架构层面的高级抽象和工具集,而无需重新实现Spring Boot已经解决的基础问题,二者紧密结合,共同构成了构建现代微服务架构的强大工具链。

SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架;

3. Spring Cloud Config是如何实现配置中心的?

Spring Cloud Config Server作为配置中心,从Git仓库或其他配置存储中读取配置信息,客户端通过Config Client组件从Config Server拉取配置,并自动更新。

4. 双十一期间,订单服务调用库存服务出现超时怎么解决

  • 设置Hystrix熔断规则:20次调用失败后熔断5秒

  • 降级方案:返回默认库存信息+异步补单

  • 配合仪表盘监控熔断状态

五、总结

Spring Cloud 框架通过提供一系列强大的组件,帮助开发者轻松构建分布式系统,解决了分布式系统中的服务发现、负载均衡、容错处理、网关等关键问题。在实际项目中,根据不同的业务场景合理运用 Spring Cloud 的各个组件,能够显著提升系统的性能、可靠性和可扩展性。无论是面试还是在实际开发中,深入理解 Spring Cloud 都是非常有价值的。

翻过这座山,他们就会听到你的故事!欢迎在评论区交流~

相关文章:

  • ArcGIS10. 8简介与安装,附下载地址
  • nginx 日志切割
  • Docker进阶篇1:什么是Docker数据卷?为什么需要Docker数据卷?Docker数据卷3种类型介绍
  • 5、MySQL为什么使用 B+树 来作索引【高频】
  • 【机器学习chp14 — 2】生成式模型—变分自编码器VAE(超详细分析,易于理解,推导严谨,一文就够了)
  • 从零开始实现 C++ TinyWebServer 缓冲区 Buffer类详解
  • 【万字总结】前端全方位性能优化指南(一)——Brotli压缩、CDN智能分发、资源合并
  • 界面控件DevExpress WinForms v25.1预览 - 提升.NET开发效率
  • Spark 中agg的用法
  • 《Python深度学习》第四讲:计算机视觉中的深度学习
  • AI实干家:HK深度体验-【第3篇-香港、新加坡、深圳、上海、首尔五座城市在金融数据维度的对比分析】
  • 【机器学习chp14 — 1】生成式模型概述和主要思想(超详细分析,易于理解,推导严谨,一文就够了)
  • ArkTS 基础语法介绍
  • Oracle Exadata KVM 虚拟化
  • Kafka 八股文
  • jmeter验证正则表达式提取值是否正确
  • 【数学建模】模糊综合评价模型详解、模糊集合论简介
  • 多包管理工具
  • War包方式打包部署
  • DeepSeek(8):结合Kimi-PPT助手一键生成演示报告
  • 持续更新丨伊朗官员:港口爆炸已致5人死亡超700人受伤
  • 本周看啥|在电影院里听民谣,听摇滚,燥起来吧
  • 调查丨当节气出现“时差”,陕西的果农们经历着什么?
  • 湖南省郴州市统战部部长黄峥嵘主动交代问题,接受审查调查
  • 牛市早报|商务部:目前中美之间未进行任何经贸谈判
  • 巴基斯坦召开国家安全委员会紧急会议,应对印方连环举措