网站首页 > 文章精选 正文
1. 什么是 Spring Cloud?它的主要目标是什么?
Spring Cloud 是用于构建分布式系统和微服务架构的工具集,提供云原生应用所需的基础设施支持。主要目标:简化分布式系统开发,解决服务发现、配置管理、熔断、负载均衡等问题,提升系统的弹性、容错性和可维护性。
2. Spring Cloud 和 Spring Boot 之间有什么关系?
- Spring Boot:简化单体应用开发,提供自动配置和快速启动能力。
- Spring Cloud:基于 Spring Boot,扩展为分布式系统工具链,依赖 Spring Boot 的约定大于配置原则。
3. 列举 Spring Cloud 中一些重要的组件及其功能
组件 | 功能 |
Eureka | 服务注册与发现(已逐步被 Nacos 替代) |
Spring Cloud Gateway | API 网关,支持动态路由、过滤、限流 |
OpenFeign | 声明式 HTTP 客户端,整合负载均衡与熔断 |
Spring Cloud Config | 集中式配置管理,支持 Git、数据库等存储 |
Spring Cloud LoadBalancer | 客户端负载均衡(替代 Ribbon) |
Resilience4j | 熔断、限流、重试(替代 Hystrix) |
Nacos | 服务发现、动态配置管理(Spring Cloud Alibaba 组件) |
Sentinel | 流量控制、熔断降级(Spring Cloud Alibaba 组件) |
Sleuth + Zipkin | 分布式链路追踪 |
4. Eureka 的服务注册与发现机制是如何工作的?
- 服务注册:服务启动时向 Eureka Server 发送注册请求(包含 IP、端口、健康状态)。
- 心跳续约:客户端每 30 秒发送心跳,若 90 秒未收到心跳,Server 将其标记为下线。
- 服务发现:消费者从 Eureka Server 拉取服务列表,通过客户端缓存实现本地负载均衡。
5. 什么是 Ribbon?它的主要作用是什么?
- 旧方案:Ribbon 是客户端负载均衡器,支持轮询、随机等策略。
- 现状:已被 Spring Cloud LoadBalancer 替代,新项目应优先使用后者。
6. Feign 是什么?如何使用 Feign 调用服务?
- 定义:OpenFeign 是声明式 HTTP 客户端,通过接口注解简化服务调用。
- 示例:
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/users/{id}")
User getUser(@PathVariable Long id);
}
- 依赖:spring-cloud-starter-openfeign。
7. Spring Cloud 中的 Hystrix 是用来做什么的?
- 旧方案:Hystrix 提供熔断、降级、资源隔离,防止雪崩效应。
- 替代方案:官方推荐使用 Resilience4j 或 Spring Cloud Circuit Breaker。
8. 如何使用 Spring Cloud Gateway 配置路由?
- YAML 配置:
spring:
cloud:
gateway:
routes:
- id: user_route
uri: lb://user-service
predicates:
- Path=/api/users/**
- 动态路由:结合注册中心(如 Nacos)实现服务发现。
9. Zuul 和 Spring Cloud Gateway 有什么区别?
对比项 | Zuul 1.x | Spring Cloud Gateway |
架构 | 阻塞式(Servlet) | 非阻塞式(WebFlux) |
性能 | 低并发性能 | 高并发,支持响应式编程 |
官方支持 | 已停止维护 | 官方推荐 |
功能扩展 | 过滤器机制 | 支持自定义全局/局部过滤器、断言 |
10. Spring Cloud Config 的工作原理是什么?
- 服务端:集中存储配置文件(Git/SVN/本地),通过 HTTP 接口暴露配置。
- 客户端:启动时从 Config Server 拉取配置,支持 @RefreshScope 动态刷新(需调用 /actuator/refresh)。
11. 什么是服务熔断?Hystrix 如何实现熔断功能?
- 熔断:当服务失败率超过阈值时,暂时阻断请求,避免级联故障。
- Hystrix 实现:通过 @HystrixCommand 定义降级方法,监控请求失败率触发熔断。
- 替代方案:使用 Resilience4j 的 @CircuitBreaker 注解。
12. Spring Cloud 中的服务治理有哪些策略?
- 服务发现:Eureka、Nacos、Consul。
- 负载均衡:Spring Cloud LoadBalancer、Ribbon(已弃用)。
- 熔断限流:Resilience4j、Sentinel。
- 配置管理:Spring Cloud Config、Nacos Config。
- API 网关:Spring Cloud Gateway、Zuul(旧)。
13. 如何在 Spring Cloud 中实现微服务之间的安全调用?
- OAuth2:使用 Spring Security OAuth2 实现服务间认证。
- JWT:传递令牌验证权限。
- HTTPS:启用 SSL/TLS 加密通信。
14. Nacos 和 Consul 有什么异同?
对比项 | Nacos | Consul |
服务发现 | 支持 | 支持 |
配置管理 | 内置 | 需单独启用 |
健康检查 | 主动探测 + 客户端心跳 | 主动探测 |
生态系统 | Spring Cloud Alibaba 集成 | HashiCorp 生态 |
15. 微服务启动失败如何解决?
- 检查依赖:确认注册中心(如 Nacos)是否可用。
- 配置验证:检查 bootstrap.yml 和配置中心数据。
- 日志分析:通过 logging.level.root=DEBUG 输出详细日志。
- 健康检查:确保 /actuator/health 返回 UP 状态。
16. 如何监控微服务?工具推荐
- Spring Boot Actuator:暴露健康、指标、日志等端点。
- Prometheus + Grafana:采集和可视化监控数据。
- Sleuth + Zipkin:链路追踪。
- ELK Stack:日志聚合分析。
17. 什么是 Spring Cloud Stream?它的主要目的是什么?
- 定义:用于构建消息驱动的微服务,抽象消息中间件(如 Kafka、RabbitMQ)。
- 核心概念:Binder(中间件适配)、Channel(输入/输出通道)。
18. 如何处理服务的版本管理?
- 元数据路由:通过 Nacos 元数据标记服务版本,结合网关路由到指定版本。
- 请求头过滤:在 Spring Cloud Gateway 中根据 Header 路由。
19. 如何实现动态配置管理?
- Nacos Config:通过 @NacosValue 注解动态获取配置。
- Spring Cloud Config:使用 @RefreshScope 注解刷新配置。
20. 如何做服务的健康检查?
- 端点暴露:启用 /actuator/health。
- 注册中心集成:Eureka/Nacos 定期调用健康端点,自动剔除异常实例。
21. 什么是 Spring Cloud Alibaba?
- 定位:Spring Cloud 官方子项目,集成阿里云组件。
- 核心组件:Nacos(服务发现/配置)、Sentinel(限流)、Seata(分布式事务)。
22. 如何实现限流?
- Sentinel:通过 QPS/线程数规则控制流量。
- Resilience4j:使用 RateLimiter 限制请求速率。
23. 负载均衡策略有哪些?
- 默认策略:轮询(Round Robin)、随机(Random)。
- 自定义策略:实现 ReactorLoadBalancer 接口,配置 @LoadBalancerClient。
24. Nacos 服务发现机制
- 服务注册:客户端启动时向 Nacos Server 注册实例。
- 健康检查:客户端定期发送心跳,Server 主动探测异常实例。
25. Dubbo 与 Spring Cloud 的区别
对比项 | Dubbo | Spring Cloud |
通信协议 | RPC(如 Dubbo 协议) | RESTful HTTP/消息队列 |
服务治理 | 需整合其他组件 | 全家桶式解决方案 |
生态系统 | 主要面向 Java | 支持多语言(通过 Sidecar) |
26. 如何实现跨服务事务?
- Seata:提供 AT(自动补偿)模式,通过全局事务 ID 协调分支事务。
27. OpenFeign 替代 Feign
- 依赖变更:使用 spring-cloud-starter-openfeign。
- 功能增强:原生支持负载均衡、熔断与 Spring MVC 注解。
28. 服务网格与 Spring Cloud
- 服务网格:如 Istio,负责服务间通信、监控、安全(基础设施层)。
- Spring Cloud:关注应用层逻辑(如业务代码集成)。
29. API 网关的认证与授权
- OAuth2:集成 Spring Security OAuth2 资源服务器。
- JWT 验证:在网关过滤器中解析 Token 并鉴权。
30. 如何实现可观察性(Observability)?
- 指标(Metrics):Micrometer + Prometheus,监控 QPS、延迟、错误率。
- 日志(Logging):ELK 统一收集。
- 追踪(Tracing):Sleuth + Zipkin,分析请求链路。
猜你喜欢
- 2025-03-19 还不会Spring?阿里P8总结100+道面试题,让你锤面试官
- 2025-03-19 【纯干货】面试最难的10道SpringCloud问题!
- 2025-03-19 SpringCloud面试题大全总结(springcloud面试题100道)
- 2025-03-19 spring Cloud面试题汇总(springcloud面试题100道)
- 2025-03-19 解析Spring Cloud经典面试问题(spring cloud 面试问题)
- 2025-03-19 Spring Cloud的18道面试题及答案(收藏版)
- 2025-03-19 谈谈几个SpringCloud常见面试题及答案
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)