Spring Cloud 基础

本专题导航#

上级Spring 全家桶
同级Spring Framework · Spring Boot

背景与动机#

Spring Boot 解决「单个服务怎么快速开发」;Spring Cloud 解决「多个服务怎么注册、发现、路由、熔断、统一配置」。二者常一起出现,面试也会问与 Dubbo、Nginx 的对比。

前置:Spring IoCSpring Boot 入门

核心原理拆解#

1. 微服务架构#

将单体拆成多个可独立部署的小服务,每个服务自有进程与数据库(可共享),通过轻量机制通信,围绕业务能力划分,自动化部署。

优点:低耦合、并行开发、技术栈灵活、独立扩展。
缺点:部署运维复杂、分布式事务与测试难、链路监控成本高。

2. Spring Cloud 是什么#

基于 Spring Boot 风格封装的一套微服务治理工具集,整合 Eureka、OpenFeign、Gateway、Config 等成熟组件,简化注册发现、配置中心、路由、熔断、负载均衡等。

3. Spring Boot vs Spring Cloud#

Spring BootSpring Cloud
关注点单个微服务开发全局治理与协作
关系可独立使用依赖 Boot,不能脱离 Boot
能力自动配置、内嵌容器注册发现、网关、熔断、配置总线等

4. 与 Dubbo 对比(常考)#

维度DubboSpring Cloud
调用RPC常见 REST
注册中心Zookeeper 等Eureka / Consul / Nacos 等
网关需第三方Gateway / Zuul
生态阿里 RPC 体系Spring 全栈

5. 核心组件#

组件作用
Eureka服务注册与发现
Ribbon客户端负载均衡
OpenFeign声明式 HTTP 客户端
Hystrix熔断、降级、隔离(新版本多用 Resilience4j / Sentinel)
Zuul / GatewayAPI 网关、路由、过滤
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#

NginxRibbon
类型服务端反向代理客户端负载均衡
位置请求先经 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 管配置 + 熔断防雪崩

文章目录

文章目录