★ Spring Cloud 包含哪些核心组件?注册中心的工作原理是什么?
结论先行:Spring Cloud 是一套微服务基础设施组件集:注册发现、配置中心、网关、声明式调用、负载均衡、熔断降级、链路追踪。其共性底座是 spring-cloud-commons 抽象(DiscoveryClient、LoadBalancerClient 等),具体实现可选 Nacos/Eureka/Consul。注册中心解决“服务在哪、是否健康”:服务启动注册、心跳续约、健康检查、下线摘除,客户端缓存实例列表并按负载均衡策略挑选。
一、组件地图
| 能力 | Spring 官方/社区 | Alibaba 系 |
|---|---|---|
| 注册发现 | Eureka、Consul、ZooKeeper | Nacos |
| 配置中心 | Config Server + Bus | Nacos Config |
| 声明式调用 | OpenFeign | 同左 |
| 负载均衡 | Spring Cloud LoadBalancer | 同左 |
| 网关 | Spring Cloud Gateway | 同左 |
| 熔断降级 | Circuit Breaker(Resilience4j) | Sentinel |
| 分布式事务 | —— | Seata |
| 链路追踪 | Micrometer Tracing | 同左 |
版本命名:Spring Cloud 自 2020.0 起按年份发版(2023.0、2024.0),与 Boot 大版本配套,需用官方版本矩阵核对兼容性。
二、注册中心原理(以 Nacos 为例)
- 注册:应用启动把服务名、IP、端口、元数据上报注册中心,建立实例;
- 心跳续约:客户端周期性发送心跳,超时未续约则实例被标记不健康;
- 健康检查:临时实例靠心跳(AP),持久实例支持主动探测(CP,JRaft 选主同步);
- 发现与缓存:调用方启动时拉取服务实例列表并缓存,订阅变更做增量更新;
- 下线与摘除:优雅停机主动注销;故障实例靠心跳超时剔除;
- 负载均衡:LoadBalancer 依据本地缓存的实例列表选择目标(默认轮询)。
三、对比与关键点
| 实现 | 一致性 | 特点 |
|---|---|---|
| Eureka | AP | 纯注册中心,Netflix 系,心跳为主 |
| Nacos | AP/CP 可切 | 注册 + 配置一体,国内主流 |
| Consul | CP | 多数据中心、强一致,需自建集群 |
| ZooKeeper | CP | 通用协调器,服务发现非专长 |
- 缓存带来的坑:实例已下线但客户端缓存未刷新仍会短暂调用失败,靠重试与主动剔除缓解;
- 注册中心自身需高可用(集群部署),它挂掉会导致新实例无法注册、存量靠缓存续命。
常见追问 / 记忆点
- 追问:AP 与 CP 怎么选?答:服务发现偏 AP(可用性优先、短暂不一致可自愈);选主/配置强一致场景偏 CP。
- 追问:为什么调用方还要缓存实例列表?答:避免每次调用都查注册中心,降低中心压力与失败面,换来短暂不一致。
- 记忆点:注册/心跳/探活/摘除/缓存发现五步;Nacos 一鱼两吃(注册+配置),AP 是服务发现默认偏好。