SpringCloud面试笔记

发布于:2025-07-22 ⋅ 阅读:(19) ⋅ 点赞:(0)

核心组件概述

SpringCloud 5大核心组件包括:注册中心(Eureka/Nacos)服务调用(Feign)负载均衡(Ribbon)服务熔断(Hystrix/Sentinel)服务网关(Gateway)

随着SpringCloud Alibaba在国内的兴起,现在更多项目选择阿里巴巴生态:Nacos作为注册中心和配置中心、Ribbon负载均衡、Feign服务调用、Sentinel服务保护、Gateway网关。
组件之间的依赖

服务注册与发现

服务注册发现的核心概念:

  • 服务注册:服务启动时向注册中心注册自己的信息(IP、端口、服务名等)
  • 服务发现:客户端从注册中心获取服务列表,实现服务间的调用

以Nacos为例的实现流程:

  1. 服务提供者启动时向Nacos注册服务信息
  2. 服务消费者从Nacos拉取服务列表
  3. 消费者通过负载均衡选择具体的服务实例进行调用
  4. Nacos维护服务的健康状态,自动剔除不健康实例

nacos

Ribbon负载均衡

负载均衡策略详解:

  • RoundRobinRule:轮询策略,按顺序选择服务器
  • WeightedResponseTimeRule:权重策略,响应时间越短权重越高
  • RandomRule:随机选择可用服务器
  • BestAvailableRule:选择并发数最低的服务器
  • RetryRule:重试机制,在指定时间内重试选择服务器
  • AvailabilityFilteringRule:可用性过滤,先过滤故障实例再选择连接数小的
  • ZoneAvoidanceRule:区域感知策略,优先选择同区域的服务器

自定义负载均衡策略:

  1. 全局配置:创建类实现IRule接口,通过@Bean注解注册
  2. 局部配置:在配置文件中为特定服务指定负载均衡策略
# 局部配置示例
service-name:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

服务熔断与降级

熔断机制:
当服务调用失败率达到阈值时,熔断器开启,直接返回错误响应,避免级联故障。熔断器有三种状态:关闭、开启、半开。

降级机制:
当服务不可用时,执行预定义的降级逻辑,返回默认值或友好提示,保证系统基本可用。

Hystrix vs Sentinel:

  • Hystrix:Netflix开源,功能成熟但已停止更新
  • Sentinel:阿里开源,功能更强大,支持实时监控和规则配置

服务网关Gateway

Gateway的核心功能:

  • 路由转发:根据请求路径转发到对应的微服务
  • 过滤器:实现认证、限流、监控等横切关注点
  • 负载均衡:集成Ribbon实现客户端负载均衡

Gateway vs Zuul:

  • Gateway基于Spring 5.0和WebFlux,性能更好
  • 支持异步非阻塞编程模型
  • 提供更丰富的过滤器和断言功能

服务调用Feign

Feign的特点:

  • 声明式HTTP客户端,通过注解定义接口
  • 集成Ribbon实现负载均衡
  • 集成Hystrix实现熔断降级
  • 支持请求/响应压缩和日志记录

Feign vs RestTemplate:

  • Feign代码更简洁,易于维护
  • RestTemplate更灵活,适合复杂场景

配置中心

Nacos配置中心的优势:

  • 集中管理配置,支持动态更新
  • 支持多环境配置隔离
  • 提供配置版本管理和回滚功能
  • 支持配置监听和推送机制

服务监控

微服务监控的重要性:

  • 实时了解服务运行状态
  • 快速定位和解决问题
  • 优化服务性能

常用监控方案:

  • Spring Boot Actuator:提供健康检查、指标收集等功能
  • Micrometer:指标收集框架,支持多种监控系统
  • Prometheus + Grafana:指标收集和可视化展示
  • SkyWalking:分布式链路追踪系统

面试常见问题

Q: SpringCloud和Dubbo的区别?
A: SpringCloud是完整的微服务解决方案,基于HTTP通信;Dubbo主要解决RPC调用问题,基于TCP通信,性能更好但功能相对单一。

Q: 如何保证微服务的数据一致性?
A: 通过分布式事务解决方案,如Seata、TCC模式或最终一致性方案(消息队列+补偿机制)。

Q: 微服务拆分的原则是什么?
A: 按业务边界拆分,遵循高内聚低耦合原则,每个服务有独立的数据库和部署单元。

Q: 如何处理分布式系统的CAP问题?
A: 根据业务需求选择CP或AP,通常选择AP(可用性+分区容错),通过最终一致性保证数据一致性。


网站公告

今日签到

点亮在社区的每一天
去签到