什么是 Spring Cloud,它有哪些组件?


一则或许对你有用的小广告

欢迎加入小哈的星球,你将获得:专属的实战项目(4个项目都能学) / 1v1 提问 / 简历修改 / Java 学习路线 / 社群讨论 / 学习打卡 / 每月赠书

  • 《Spring AI 项目实战(问答机器人、RAG 智能客服、联网搜索)》已完结,基于 Spring AI + Spring Boot 3.x + JDK 21...查看介绍

  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...查看介绍;演示链接:http://116.62.199.48:7070/

  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接:http://116.62.199.48/

  • 新开坑项目:《从零手撸:秒杀系统高并发优化实战》 正在更新中...,查看介绍

截止目前,星球内专栏累计输出 150w+ 字,讲解图 5110+ 张,还在持续爆肝中.. 后续还会上新更多项目,已有 4700+ 小伙伴加入学习,欢迎点击围观

面试考察点

  1. 框架全局认知:面试官不仅仅是想知道你背了几个组件名字,更是想知道你是否理解 Spring Cloud 在微服务架构中的定位——它是一个 "工具箱",而不是某一个具体技术。
  2. 技术选型能力:考察你是否了解 Spring Cloud 的版本演进,知道 Netflix 体系已逐步停更,Alibaba 体系是当前国内主流,能否说出它们之间的差异。
  3. 实战经验:如果你只是在简历上写了 "熟悉 Spring Cloud",却说不清各组件在生产环境怎么搭配使用,说明只是 "听说过" 而非 "用过"。

核心答案

Spring Cloud 是 Spring 官方提供的一套微服务架构工具集,它基于 Spring Boot 开发,为开发者提供了一整套开箱即用的微服务解决方案,包括服务注册与发现、配置管理、负载均衡、熔断降级、API 网关、分布式消息等。

一句话概括:Spring Cloud 不是某一个框架,而是一堆微服务组件的 "全家桶"

Spring Cloud 核心组件一览

功能领域 Netflix 体系(第一代) Alibaba 体系(第二代) 说明
服务注册与发现 Eureka Nacos 管理服务的注册和发现
配置中心 Spring Cloud Config Nacos Config 集中管理各服务配置
负载均衡 Ribbon Spring Cloud LoadBalancer 客户端负载均衡
服务间调用 Feign OpenFeign 声明式 HTTP 客户端
熔断降级 Hystrix Sentinel 服务容错与流量控制
API 网关 Zuul Spring Cloud Gateway 统一入口、路由转发
分布式事务 Seata 跨服务事务一致性

重要趋势:Netflix OSS 体系(Eureka、Hystrix、Zuul 等)已逐步停更维护,国内企业目前主流采用 Spring Cloud Alibaba 体系。

深度解析

一、Spring Cloud 整体架构

上图展示了 Spring Cloud 微服务的典型架构。整体分为以下几个层次:

  • 接入层:API 网关作为统一入口,负责路由转发、身份认证、限流等
  • 服务层:各个微服务独立部署,拥有各自的数据库,服务间通过 OpenFeign 或消息队列通信
  • 治理层:注册中心、配置中心、熔断降级等基础设施组件,保障服务的高可用

关键点在于,各微服务启动时会将自己的地址注册到注册中心,调用方通过注册中心获取目标服务地址,再由负载均衡器选择一个实例发起调用。

二、各核心组件详解

1. Nacos —— 注册中心 + 配置中心(二合一)

Nacos 是 Spring Cloud Alibaba 体系中最核心的组件,同时承担了服务注册发现配置管理两个职责。

服务注册发现的工作流程:

  • 服务启动时,向 Nacos 注册自己的 IP 和端口
  • 消费者从 Nacos 拉取服务列表,并缓存到本地
  • Nacos 通过心跳机制检测服务健康状态,不健康的服务自动剔除
  • 支持临时实例(客户端心跳)和持久实例(服务端主动探测)

配置中心的工作流程:

  • application.yml 中的配置迁移到 Nacos 控制台管理
  • 支持按 Data ID + Group + Namespace 隔离配置
  • 配置变更后,通过长轮询机制实时推送到客户端
# bootstrap.yml — Nacos 配置示例
spring:
  application:
    name: order-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848    # 注册中心地址
      config:
        server-addr: 127.0.0.1:8848    # 配置中心地址
        file-extension: yaml            # 配置文件格式
        namespace: dev                  # 环境隔离

2. OpenFeign —— 声明式服务调用

OpenFeign 让你像调用本地方法一样调用远程服务,底层封装了 HTTP 请求、负载均衡、序列化等细节。

// 1. 定义 Feign 客户端接口
@FeignClient(name = "product-service", fallback = ProductFallback.class)
public interface ProductClient {

    @GetMapping("/api/product/{id}")
    Product getProduct(@PathVariable("id") Long id);

    @PostMapping("/api/product/deduct")
    Boolean deductStock(@RequestBody DeductRequest request);
}

// 2. 降级处理类
@Component
public class ProductFallback implements ProductClient {

    @Override
    public Product getProduct(Long id) {
        // 降级逻辑:返回默认商品信息
        return new Product(id, "默认商品", 0.0);
    }

    @Override
    public Boolean deductStock(DeductRequest request) {
        return false;
    }
}

// 3. 在订单服务中像调本地方法一样使用
@Service
public class OrderService {

    @Autowired
    private ProductClient productClient;

    public Order createOrder(Long productId) {
        // 直接调用,OpenFeign 自动完成 HTTP 请求
        Product product = productClient.getProduct(productId);
        // ... 创建订单逻辑
    }
}

3. Spring Cloud Gateway —— API 网关

Gateway 基于 WebFlux(响应式编程)构建,性能远超老一代的 Zuul。核心功能:

  • 路由转发:根据 URL 路径将请求转发到对应的微服务
  • 过滤器链:统一处理鉴权、日志、限流等横切关注点
  • 负载均衡:集成 LoadBalancer,自动分发请求
# Gateway 路由配置示例
spring:
  cloud:
    gateway:
      routes:
        - id: order-service
          uri: lb://order-service          # lb:// 表示从注册中心获取服务实例
          predicates:
            - Path=/order/**               # 匹配 /order/ 开头的请求
          filters:
            - StripPrefix=1                # 去掉路径前缀

        - id: product-service
          uri: lb://product-service
          predicates:
            - Path=/product/**

4. Sentinel —— 熔断降级与流量控制

Sentinel 是 Alibaba 开源的高可用流量控制组件,比 Hystrix 功能更强大:

能力 Hystrix Sentinel
熔断降级
实时监控 ⚠️ 简单 ✅ 可视化 Dashboard
流量控制 ✅ QPS 限流、线程数限流
热点参数限流
系统自适应保护
维护状态 ❌ 已停更 ✅ 持续维护

核心概念:

  • 流量控制:限制 QPS 或并发线程数,防止服务被压垮
  • 熔断降级:当服务调用失败率或响应时间超过阈值,自动熔断,快速失败
  • 系统保护:根据系统负载(CPU、RT、线程数)自适应限流

5. Seata —— 分布式事务

Seata 提供 AT、TCC、Saga、XA 四种事务模式,最常用的是 AT 模式(自动补偿)。

// 使用 @GlobalTransactional 注解开启分布式事务
@Service
public class OrderService {

    @GlobalTransactional(name = "create-order", rollbackFor = Exception.class)
    public void createOrder(Order order) {
        // 1. 本地:创建订单
        orderMapper.insert(order);
        // 2. 远程:扣减库存(Feign 调用)
        productClient.deductStock(order.getProductId(), order.getCount());
        // 3. 远程:扣减账户余额(Feign 调用)
        accountClient.deduct(order.getUserId(), order.getTotalAmount());
        // 任一步骤失败,Seata 自动回滚所有操作
    }
}

三、Netflix 体系 vs Alibaba 体系

对比维度 Netflix 体系 Alibaba 体系
服务注册 Eureka(AP,已停更) Nacos(AP/CP 可切换)
配置中心 Config(需 Git 仓库) Nacos(自带存储,支持动态推送)
负载均衡 Ribbon(已移除) LoadBalancer
熔断降级 Hystrix(已停更) Sentinel(活跃维护)
网关 Zuul(已停更) Gateway
分布式事务 Seata
维护状态 大部分停更 持续迭代
国内使用率 逐渐降低 主流选择

结论:新项目直接上 Spring Cloud Alibaba 体系,不要再纠结 Netflix 组件了。

面试高频追问

  1. Nacos 和 Eureka 有什么区别?
    • Nacos 支持 AP/CP 切换,Eureka 只有 AP;Nacos 同时支持注册中心和配置中心,Eureka 只有注册中心;Nacos 支持健康检查主动探测,Eureka 靠客户端心跳
  2. Gateway 和 Zuul 有什么区别?
    • Gateway 基于Netty + WebFlux 异步非阻塞模型,性能远高于 Zuul 1.x 的同步阻塞模型;Zuul 2.x 虽然也用了异步,但已不在 Spring Cloud 官方路线图内
  3. Sentinel 和 Hystrix 怎么选?
    • 新项目直接用 Sentinel,功能更全(流量控制、热点限流、系统保护),可视化 Dashboard 更完善,且持续维护
  4. Spring Cloud 和 Dubbo 有什么区别?
    • Spring Cloud 是完整微服务工具箱(覆盖网关、配置、事务等),Dubbo 专注于 RPC 调用;Spring Cloud 用 HTTP REST 通信,Dubbo 用自定义 TCP 协议,性能更高但跨语言支持差

常见面试变体

  • "Spring Cloud 的核心组件有哪些?各自的作用是什么?"
  • "Spring Cloud Alibaba 和 Spring Cloud Netflix 的区别?"
  • "你们项目中用了 Spring Cloud 的哪些组件?为什么这么选?"
  • "Nacos 既能做注册中心又能做配置中心,有什么优势?"

记忆口诀

六大组件一句话注册(Nacos)、配置(Nacos)、调用(Feign)、网关(Gateway)、熔断(Sentinel)、事务(Seata)

"注配置、调网熔事" —— 注册和配置用 Nacos,调用用 Feign,网关用 Gateway,熔断用 Sentinel,事务用 Seata。

总结

Spring Cloud 是一套基于 Spring Boot 的微服务工具集,核心组件涵盖服务注册发现(Nacos)、配置管理(Nacos Config)、服务间调用(OpenFeign)、API 网关(Gateway)、熔断降级(Sentinel)和分布式事务(Seata)。当前主流采用 Spring Cloud Alibaba 体系,Netflix 体系已逐步淘汰。面试时重点掌握各组件的原理、选型依据和实际使用经验。