Spring Cloud
Spring Cloud 是基于 Spring Boot 实现的微服务架构开发工具,为微服务架构中涉及的配置管理、服务治理、断路器(当服务故障时自动切断请求防止雪崩)、智能路由、微代理、控制总线等操作提供简单开发方式。
适用场景:中大型微服务系统(团队 10-50 人)、需要服务治理、配置中心、API 网关、分布式事务的场景。
提示
Spring Cloud微服务架构组件总览,涵盖服务治理、配置管理、网关、容错等核心模块
核心组件
服务治理
Eureka 是 Netflix 开源的服务注册与发现组件,采用客户端-服务器(CS)架构,支持集群部署和自我保护机制。Eureka 保证可用性(AP,即网络分区时优先保证服务可用),适合互联网场景;需要强一致性(CP,即网络分区时优先保证数据一致)时可选择 Zookeeper。
Nacos 是阿里巴巴开源的服务发现与配置管理平台,同时支持 CP 和 AP 模式,集服务注册与配置管理于一体,是目前主流的替代方案。
服务调用
Ribbon 是客户端负载均衡工具(在调用方本地决定请求发往哪个服务实例),从注册中心获取服务端清单,通过负载均衡算法选择服务端。支持轮询、随机、加权响应时间等多种策略。
OpenFeign 是声明式 HTTP 客户端(只需定义接口,框架自动生成实现),在 Ribbon 基础上进一步封装,通过接口和注解即可实现服务调用。支持超时配置、日志级别和降级处理。
服务容错
Hystrix 是 Netflix 的服务容错组件,提供降级(服务不可用时返回兜底结果)、熔断(故障率过高时切断请求防止雪崩)、线程隔离和实时监控。已停止维护,新项目推荐使用 Sentinel。
Sentinel 是阿里巴巴的流量控制组件,支持流量控制(限制 QPS/并发数)、熔断降级、系统自适应保护、热点参数限流等功能,提供完善的 Web 控制台。
Seata 是分布式事务解决方案,支持 AT(自动回滚,侵入性最低)、TCC(手动实现 Try-Confirm-Cancel)、SAGA(长事务补偿)三种模式。
API 网关
Gateway 是基于 WebFlux 的响应式 API 网关(所有流量的统一入口),性能优于 Zuul 约 1.6 倍。通过路由(URL 匹配规则)、谓词(请求条件判断)和过滤器(请求/响应处理)实现请求的转发和处理。
Zuul 是 Netflix 的网关组件,提供智能路由和过滤器机制。已停止维护,新项目推荐使用 Gateway。
配置管理
Spring Cloud Config 为分布式系统提供集中化外部配置管理,支持 Git、SVN 等后端存储。配合 SpringCloudBus(消息总线,通过轻量级消息代理连接分布式系统节点)可实现配置变更自动广播。
Apollo 是携程开源的配置管理中心,支持配置实时推送(配置修改后秒级生效)、多环境隔离(开发/测试/生产环境独立配置)和权限管理,适合大规模企业应用。
Nacos 同时提供配置管理功能,支持动态配置更新和命名空间隔离(按业务线或环境划分配置空间)。
消息驱动
Spring Cloud Stream 是构建消息驱动微服务的框架,通过 Binder 抽象层屏蔽 RabbitMQ 和 Kafka 的差异(切换消息中间件只需改配置,不改代码)。
链路追踪
Sleuth 为 Spring Cloud 应用提供分布式链路追踪,通过 Trace ID(全局唯一,贯穿整个请求)和 Span ID(单次服务调用标识)实现跨服务请求追踪,可集成 Zipkin 进行可视化。
技术选型建议
| 场景 | 推荐方案 |
|---|---|
| 服务注册与发现 | Nacos(新项目)/ Eureka(已有项目) |
| 配置管理 | Nacos(轻量)/ Apollo(企业级) |
| 服务调用 | OpenFeign |
| 熔断降级 | Sentinel |
| API 网关 | Gateway |
| 分布式事务 | Seata AT 模式 |
| 链路追踪 | Sleuth + Zipkin |
常见问题处理
服务调用超时
- 检查 Feign 超时配置:
feign.client.config.default.readTimeout - 检查 Ribbon 超时配置:
ribbon.ReadTimeout - 检查目标服务是否正常响应
配置刷新失败
- 确认 Config Server 是否正常运行
- 检查
bootstrap.yml配置是否正确 - 确认
@RefreshScope注解是否添加
网关路由失败
- 检查路由配置的
uri是否正确 - 确认目标服务是否注册到注册中心
- 检查 Predicate(路径匹配规则)是否正确