Spring Cloud 5大组件?服务注册和发现?Spring Cloud 如何实现服务注册发现?nacos与eureka的区别?
Spring Cloud 五大组件有哪些?
Spring Cloud 的五大核心组件通常包括以下内容:
- Eureka:服务注册与发现组件,用于管理微服务的实例信息。
- Ribbon:客户端负载均衡组件,基于服务列表实现请求的分发。
- Feign:声明式 HTTP 客户端,集成 Ribbon 和 Hystrix,简化服务调用。
- Hystrix:熔断器,提供服务的容错与故障隔离能力。
- Zuul / Spring Cloud Gateway:API 网关,负责路由、过滤和请求转发(Gateway 是新一代替代方案)。
随着Spring Cloud Alibaba的兴起,我们项目中也融入了一些阿里巴巴的技术组件:
- 服务注册与配置中心:Nacos。
- 负载均衡:Ribbon。
- 服务调用:Feign。
- 服务保护:Sentinel。
- API网关:Gateway。
服务注册和发现是什么意思?
- 服务注册:微服务启动时,将自身的元数据(如 IP、端口、服务名)注册到注册中心(如 Eureka Server)。
- 服务发现:当服务需要调用其他服务时,从注册中心获取目标服务的可用实例列表,并根据策略(如负载均衡)选择具体实例。
- 核心价值:解耦服务间的硬编码依赖,实现动态扩缩容和故障转移。
Spring Cloud 如何实现服务注册与发现?
以 Eureka 为例,实现流程如下:
1. 服务注册中心(Eureka Server)
- 启动注册中心:
- 添加
@EnableEurekaServer注解到 Spring Boot 主类。 - 配置
application.yml:▼yaml复制代码server: port: 8761 eureka: client: register-with-eureka: false # 自身不注册 fetch-registry: false # 不拉取注册表
- 添加
2. 服务提供者(Eureka Client)
- 注册服务:
- 添加
@EnableDiscoveryClient注解。 - 配置
application.yml:▼yaml复制代码eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ spring: application: name: service-provider # 服务唯一标识 - 服务启动时,自动向 Eureka Server 发送注册请求,并定期发送心跳续约。
- 若 Eureka Server 未收到心跳(默认 90 秒),则注销该实例。
- 添加
3. 服务消费者(Eureka Client)
- 发现服务:
- 消费者同样配置
@EnableDiscoveryClient和 Eureka Server 地址。 - 通过 Ribbon 实现客户端负载均衡:
- 从 Eureka Server 拉取服务实例列表并缓存。
- 根据策略(如轮询、随机)选择实例。
- Feign 的集成:
- 使用
@FeignClient("service-provider")声明接口,Feign 自动处理服务发现和负载均衡。
- 使用
- 消费者同样配置
4. 整体流程
- 服务提供者启动 → 注册到 Eureka Server。
- 服务消费者启动 → 拉取注册表并缓存。
- 消费者调用服务 → Ribbon 从本地缓存中选择实例,发起请求。
- Eureka Server 通过心跳监控服务健康状态,更新注册表。
nacos与eureka的区别?
一、核心功能差异
-
功能范围
- Eureka:专注于服务注册与发现,是 Netflix 开源的服务治理组件,与 Spring Cloud Netflix 生态(如 Ribbon、Hystrix)深度集成。
- Nacos:除服务注册与发现外,提供 动态配置管理(支持配置更新推送)、服务元数据管理、命名空间隔离、多环境支持等功能,是更全面的服务治理平台。
-
实例类型
- Eureka:仅支持 临时实例,通过心跳机制(默认 30 秒一次)检测服务健康状态,若未及时续约(默认 90 秒未收到心跳),实例会被自动剔除。
- Nacos:支持 临时实例 和 非临时实例(永久实例):
- 临时实例:与 Eureka 类似,依赖心跳检测(默认 5 秒一次),异常时快速剔除。
- 非临时实例:由注册中心主动探测(如 HTTP 请求),即使宕机也不会被剔除,仅标记为不健康,适用于需长期保留实例的场景。
二、服务发现机制
-
数据同步模式
- Eureka:采用 定时拉取 模式(默认 30 秒一次),客户端主动从注册中心拉取服务列表,存在数据延迟问题。
- Nacos:支持 主动推送 模式,服务列表变更时,注册中心会实时推送更新到消费者,保证数据及时性。
-
健康检查
- Eureka:完全依赖客户端心跳检测,服务端不主动探测实例状态。
- Nacos:
- 临时实例:基于心跳检测(频率更高,默认 5 秒一次)。
- 非临时实例:服务端主动发起健康检查(如 HTTP 请求),可靠性更高。
三、数据一致性模型(CAP 理论)
- Eureka:采用 AP 模型(高可用性 + 分区容错性),在网络分区故障时优先保证可用性,允许短暂的数据不一致(如自我保护机制)。
- Nacos:
- 默认采用 AP 模型(临时实例场景)。
- 当集群中存在 非临时实例 时,切换为 CP 模型(一致性 + 分区容错性),确保数据强一致性。
四、生态系统与适用场景
-
生态系统
- Eureka:与 Spring Cloud Netflix 生态紧密集成,但 Netflix 已宣布 Eureka 进入维护模式,不再积极更新。
- Nacos:作为 Spring Cloud Alibaba 核心组件,支持 Dubbo、Kubernetes 等生态,功能迭代更活跃。
-
适用场景
- Eureka:适合简单服务发现场景,或已有 Netflix 技术栈的项目。
- Nacos:适合需要 动态配置管理、多环境支持、高实时性服务发现的复杂微服务架构。
五、其他关键区别
| 特性 | Eureka | Nacos |
|---|---|---|
| 连接方式 | 基于 HTTP 短连接 | 基于长连接(如 Netty),性能更高 |
| 配置管理 | 不支持 | 支持动态配置推送与管理 |
| 自我保护机制 | 触发后保留所有实例,避免误删 | 无类似机制,依赖实例类型差异化处理 |
| 多租户与命名空间 | 不支持 | 支持多命名空间、多环境隔离 |
总结
Nacos 在功能丰富性、实时性和扩展性上优于 Eureka,尤其适合需要动态配置管理和高可靠服务发现的场景。而 Eureka 更适合轻量级服务治理需求,但需注意其维护状态。实际选型需结合技术栈、业务需求及团队熟悉度综合考虑。
补充说明
- 高可用:Eureka Server 可集群部署,互相注册以实现高可用。
- 自我保护机制:当网络分区时,Eureka Server 会保护现有注册信息,避免过度注销实例。
- 替代方案:Spring Cloud 也支持 Consul、Nacos、Zookeeper 等注册中心,但 Eureka 是 Netflix 体系的原生实现。
通过上述机制,Spring Cloud 实现了动态、弹性的微服务架构,显著提升了系统的可维护性和伸缩性。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
作者分享
使用spring boot 3.4.4 整合knife4j 4.4.0接口文档时,在访问接口文档时可能会出现错误java.lang.NoSuchMethodError:'void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)',需在配置的全局异常类前添加@Hidden即可。详情见:https://springdoc.org/#Introduction
3
HashMap的put方法的具体流程?
2
路漫漫其修远兮......
1
ArrayList和LinkedList的区别是什么?
3
什么是服务雪崩,怎么解决这个问题?
3
