本专题导航
| 上级 | Spring 全家桶 |
| 同级 | Spring Framework · Spring Boot |
背景与动机
Spring Boot 解决「单个服务怎么快速开发」;Spring Cloud 解决「多个服务怎么注册、发现、路由、熔断、统一配置」。二者常一起出现,面试也会问与 Dubbo、Nginx 的对比。
核心原理拆解
1. 微服务架构
将单体拆成多个可独立部署的小服务,每个服务自有进程与数据库(可共享),通过轻量机制通信,围绕业务能力划分,自动化部署。
优点:低耦合、并行开发、技术栈灵活、独立扩展。
缺点:部署运维复杂、分布式事务与测试难、链路监控成本高。
2. Spring Cloud 是什么
基于 Spring Boot 风格封装的一套微服务治理工具集,整合 Eureka、OpenFeign、Gateway、Config 等成熟组件,简化注册发现、配置中心、路由、熔断、负载均衡等。
3. Spring Boot vs Spring Cloud
| Spring Boot | Spring Cloud | |
|---|---|---|
| 关注点 | 单个微服务开发 | 全局治理与协作 |
| 关系 | 可独立使用 | 依赖 Boot,不能脱离 Boot |
| 能力 | 自动配置、内嵌容器 | 注册发现、网关、熔断、配置总线等 |
4. 与 Dubbo 对比(常考)
| 维度 | Dubbo | Spring Cloud |
|---|---|---|
| 调用 | RPC | 常见 REST |
| 注册中心 | Zookeeper 等 | Eureka / Consul / Nacos 等 |
| 网关 | 需第三方 | Gateway / Zuul |
| 生态 | 阿里 RPC 体系 | Spring 全栈 |
5. 核心组件
| 组件 | 作用 |
|---|---|
| Eureka | 服务注册与发现 |
| Ribbon | 客户端负载均衡 |
| OpenFeign | 声明式 HTTP 客户端 |
| Hystrix | 熔断、降级、隔离(新版本多用 Resilience4j / Sentinel) |
| Zuul / Gateway | API 网关、路由、过滤 |
| Config | 分布式配置中心 |
| Bus | 配置刷新消息总线(常配合 MQ) |
6. Nginx 反向代理与静态资源(选考,1 年岗了解即可)
部署时常见:用户 → Nginx(80/443) → 多台 Spring Boot(8080)。
| 用途 | 说明 |
|---|---|
| 反向代理 | 浏览器只访问 Nginx,Nginx 把 /api 转发到后端集群 |
| 静态资源 | 前端 dist 的 html/js/css 由 Nginx 直接返回,减轻应用服务器压力 |
| 负载均衡 | upstream 配置多台后端轮询 |
与 Gateway 区别:Nginx 在最外层做高性能入口;Gateway 做 Java 侧路由、鉴权、与注册中心集成。
与 Ribbon/Feign 区别:Nginx 是服务端代理;Ribbon/Feign 是调用方选实例。
7. Eureka
- 服务提供者向 Eureka Server 注册,消费者 发现 服务列表
- 自我保护:网络分区时短期不剔除实例,避免误删
- 集群:多 Eureka 节点互相注册,客户端按列表轮询访问
- vs Zookeeper:ZK 偏 CP(选举期间可能不可用);Eureka 偏 AP,节点平等,适合服务发现
8. 网关(Zuul / Gateway)
统一入口:路由转发、鉴权、限流、负载均衡。
Zuul:Servlet 栈,与 Nginx 可组成集群(Nginx upstream)。
Gateway:Spring 5+ / WebFlux,官方推荐替代 Zuul。
网关 vs 过滤器:网关面向所有服务入口;Filter 常指网关内或单服务内过滤器。
9. Ribbon 与 Nginx
| Nginx | Ribbon | |
|---|---|---|
| 类型 | 服务端反向代理 | 客户端负载均衡 |
| 位置 | 请求先经 Nginx | 在调用方选实例 |
@LoadBalanced 开启 RestTemplate/Feign 的客户端负载均衡。
10. Feign
声明式 HTTP 客户端:定义接口 + 注解即可调用远程服务,底层整合 Ribbon、熔断(历史版本整合 Hystrix)。
调用方式对比:Feign(接口)、RestTemplate(编程式)。
11. Hystrix 与雪崩
雪崩:下游故障导致线程阻塞,上游连锁失败。
手段:降级、熔断、隔离、监控。
| 概念 | 说明 |
|---|---|
| 降级 | 失败时返回兜底结果 |
| 熔断 | 失败率达阈值则快速失败,一段时间后半开试探 |
| 隔离 | 线程池/信号量隔离依赖 |
12. Spring Cloud Config + Bus
- Config Server:集中管理多环境配置(常用 Git)
- Config Client:拉取配置
- Bus:配置变更通过 MQ 广播,实现动态刷新(
@RefreshScope)
其他配置中心:Apollo、Nacos、Zookeeper。
13. 版本对应(了解)
Spring Cloud 与 Spring Boot 版本需匹配(如 Hoxton 对应 Boot 2.2.x)。生产以官方 Release Train 对照表为准。
常见陷阱与错误示例
1. 只学 Boot 不学注册中心就上线多服务
服务地址硬编码,扩缩容与故障转移困难。
2. 在生产滥用 Eureka 自我保护
大量过期实例未剔除,调用到已下线节点——需结合健康检查与运维策略。
3. 混用 Gateway 与 Zuul 却不理清栈
Gateway 基于 WebFlux,与部分 Servlet 过滤器生态不兼容,选型要统一。
面试高频问题
完整 49 道速查见 Spring Cloud 面试题 49 道。
一句话总结
Spring Cloud = Boot 开发服务 + Eureka 找服务 + Feign/Ribbon 调服务 + Gateway 挡在前面 + Config/Bus 管配置 + 熔断防雪崩。