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 都是非常有价值的。

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

相关推荐
hrrrrb1 小时前
【Spring Boot 快速入门】六、配置文件
java·spring boot·intellij-idea
Asu52021 小时前
思途Mybatis学习 0805
java·spring boot·学习·mybatis
是乐谷1 小时前
阿里招AI产品运营
人工智能·程序人生·面试·职场和发展·产品运营·求职招聘
心勤则明2 小时前
JVM(Java虚拟机)运行时数据区
java·jvm·chrome
天天扭码2 小时前
很全面的前端面试题——手写题(上)
前端·javascript·面试
皮皮林5512 小时前
多账号统一登录(实现方案)
java
越来越无动于衷2 小时前
智慧社区(八)——社区人脸识别出入管理系统设计与实现
java·开发语言·spring boot·python·mysql
Mr Aokey3 小时前
注解退散!纯XML打造MyBatis持久层的终极形态
xml·java·mybatis
向日葵花子(* ̄︶ ̄)3 小时前
Eclipse中导入新项目,右键项目没有Run on Server,Tomcat的add and remove找不到项目
java·eclipse
超级小忍4 小时前
Maven 常用命令详解
java·开发语言·maven