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

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

目录

[一、Spring Cloud 是什么​](#一、Spring Cloud 是什么)

[二、Spring Cloud 核心组件​](#二、Spring Cloud 核心组件)

[1. 服务发现 - Eureka​](#1. 服务发现 - Eureka)

[2. ​负载均衡 - Ribbon​](#2. 负载均衡 - Ribbon)

[3. 断路器 - Hystrix​](#3. 断路器 - Hystrix)

[​​4. 网关 - Zuul​](#4. 网关 - Zuul)

[三、Spring Cloud 应用场景​](#三、Spring Cloud 应用场景)

四、面试真题

[1. SpringCloud 和 Dubbo有那些区别?](#1. SpringCloud 和 Dubbo有那些区别?)

[2. SpringBoot 和 SpringCloud,请谈谈你对他们的理解](#2. SpringBoot 和 SpringCloud,请谈谈你对他们的理解)

[3. Spring Cloud Config是如何实现配置中心的?](#3. Spring Cloud Config是如何实现配置中心的?)

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

五、总结


一、Spring Cloud 是什么

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

二、Spring Cloud 核心组件

组件 作用 常用配置项 替代方案
Eureka 服务注册中心 心跳间隔(30s)、失效时间(90s) Nacos
Ribbon 负载均衡器 轮询/随机/响应时间权重 LoadBalancer
OpenFeign 声明式HTTP客户端 超时时间、重试次数 RestTemplate
Hystrix 服务熔断 熔断阈值(20次)、恢复时间(5s) Sentinel
Gateway API网关 路由规则、过滤器链 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 网关可以对所有进入系统的请求进行身份验证和权限检查,确保只有合法用户能够访问相应的服务,保障系统的安全性。
  1. 在线教育平台​
  • 课程服务:课程服务包含课程视频播放、课程资料下载等功能。通过 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 都是非常有价值的。

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

相关推荐
江节胜-胜行全栈AI44 分钟前
Java-腾讯云短信模板兼容阿里云短信模板-短信模板参数生成
java·阿里云·腾讯云
日暮南城故里7 小时前
Java学习------初识JVM体系结构
java·jvm·学习
鱼樱前端7 小时前
Java Jdbc相关知识点汇总
java·后端
小嘚7 小时前
springCloud的学习
学习·spring·spring cloud
dblens 数据库管理和开发工具7 小时前
精挑20题:MySQL 8.0高频面试题深度解析——掌握核心知识点、新特性和优化技巧
数据库·mysql·面试
canonical_entropy8 小时前
NopReport示例-动态Sheet和动态列
java·后端·excel
kkk哥8 小时前
基于springboot的母婴商城系统(018)
java·spring boot·后端
王者鳜錸8 小时前
四、小白学JAVA-石头剪刀布游戏
java·开发语言·游戏
张小娟8 小时前
springCloud集成tdengine(原生和mapper方式) 其二 原生篇
spring·spring cloud·tdengine