P89 SpringCloud 核心组件及其作用
面试题:SpringCloud 有哪些核心组件?各自负责什么?
1. 核心组件全景
| 组件 | 作用 | 说明 |
|---|---|---|
| Eureka / Nacos | 服务注册与发现 | 服务启动注册,调用方按服务名找实例 |
| Ribbon / LoadBalancer | 客户端负载均衡 | 从注册中心拿到列表后本地选实例 |
| OpenFeign | 声明式 HTTP 调用 | 像调本地方法一样调远程服务 |
| Hystrix / Sentinel / Resilience4j | 熔断、降级、限流 | 防止雪崩 |
| Gateway / Zuul | API 网关 | 统一入口:路由、鉴权、限流、日志 |
| Config / Nacos Config | 配置中心 | 统一配置、动态刷新 |
| Sleuth + Zipkin | 链路追踪 | traceId 串联调用链,排查问题 |
| Spring Cloud Bus / Stream | 消息总线/事件驱动 | 配置广播、异步解耦 |
2. 一次请求走通全链路
text
客户端 → Gateway(路由/鉴权/限流)
→ 从 Nacos/Eureka 发现服务
→ LoadBalancer 选一台实例
→ OpenFeign 调用订单服务(熔断保护 Sentinel)
→ 链路追踪 Sleuth/Zipkin 记录 traceId3. 各组件要点
- 注册中心:服务提供者注册、消费者订阅;心跳检测剔除故障实例;
- 负载均衡:Ribbon 已进入维护模式,Spring Cloud LoadBalancer 是替代;策略有轮询、随机、权重、最少连接;
- Feign:内置 Ribbon + Hystrix(旧版);接口 + 注解定义远程调用,自动做序列化;
- 熔断降级:被调服务故障时快速失败(熔断)、返回兜底数据(降级)、控制流量(限流),防止雪崩;
- 网关:所有流量入口,统一做鉴权、限流、灰度、日志,比在各服务重复实现好维护;
- 配置中心:环境隔离、动态刷新(@RefreshScope)、配置加密;
- 链路追踪:一次请求生成全局 traceId,跨服务透传,聚合调用链和耗时。
4. 加分点
- 提到 Nacos = 注册中心 + 配置中心二合一(国内主流),可替代 Eureka + Config;
- 说明"新项目选型":Spring Cloud Alibaba(Nacos + Sentinel + Seata)在国产社区更常用;
- 追问"服务间调用为什么用 OpenFeign 而不用 RestTemplate":声明式、集成负载均衡/熔断、类型安全;
- 提到网关层与"服务间调用"的负载均衡是两层,别混淆。
一句话总结
SpringCloud 核心组件:注册发现(Eureka/Nacos)+ 客户端负载均衡(Ribbon/LoadBalancer)+ 声明式调用(OpenFeign)+ 熔断限流(Sentinel/Hystrix)+ 网关(Gateway)+ 配置中心(Config/Nacos)+ 链路追踪(Sleuth/Zipkin),各司其职组成完整的微服务治理体系。