面试可以先用一句话打底:
服务注册与发现,本质上就是把每个服务实例的地址统一注册到注册中心,调用方先去注册中心拿可用实例列表,再做负载均衡调用。
一、什么是服务注册与发现
在微服务里,服务实例很多,而且 IP、端口可能会变。
如果服务 A 想调用服务 B,不能把地址写死。
所以就需要一个"中间通讯录":
-
服务启动时 ,把自己的 IP、端口、服务名注册到注册中心,这叫服务注册
-
服务消费者调用时 ,先去注册中心查有哪些可用实例,这叫服务发现
-
拿到实例列表后,再通过 Ribbon、LoadBalancer 之类做负载均衡调用
同时,注册中心一般还会通过心跳机制判断实例是否存活,不健康的实例会被摘除。Eureka 和 Nacos 都提供服务发现能力;Nacos 官方还明确提供实时健康检查和服务管理能力。
你可以把它理解成:
注册中心像一个通讯录,服务启动时先登记,别人调用时先查通讯录。
二、服务注册与发现的基本流程
-
服务提供者启动后,把自己的实例信息注册到注册中心
-
注册中心保存服务名和实例列表
-
服务提供者定期发送心跳,证明自己还活着
-
服务消费者调用时,从注册中心拉取实例列表,再选一个实例发请求
一句话总结就是:
服务自己上报地址,调用方按服务名找地址。
三、Nacos 和 Eureka 的区别
1. 功能定位不同
Eureka 主要是服务注册与发现 。Spring Cloud Netflix 官方文档也是把它定位为 Service Discovery 组件。
Nacos 不仅支持服务发现 ,还同时支持配置管理和服务管理,是一个注册中心 + 配置中心的一体化平台。
2. 健康检查和实例类型
Nacos 官方文档说明它支持实时健康检查 ,还能支持临时实例 和持久化(非临时)实例 。
Eureka 主要依赖客户端心跳维持实例状态。
3. 一致性和设计取向
-
Eureka 更偏 AP
-
Nacos 支持 AP / CP 切换能力,场景更灵活
4. 生态和使用场景
如果项目是 Spring Cloud Alibaba 体系,通常更常用 Nacos ,因为它把服务注册和配置管理都整合了,落地更方便。
如果是传统 Spring Cloud Netflix 体系,才更常看到 Eureka。
四、你怎么选
-
只需要基础注册发现,Eureka 也能满足
-
既要注册中心又要配置中心,还想统一管理服务,一般更倾向 Nacos
所以项目里现在大多数国内微服务场景,回答成:
更常选 Nacos,因为功能更全。
五、1 分钟面试回答版
服务注册与发现的原理,本质上就是把服务实例地址 统一交给注册中心管理。
服务提供者启动后,会把自己的服务名、IP 和端口注册到注册中心,并通过心跳维持健康状态;
服务消费者调用时,不再写死目标地址,而是先去注册中心按服务名拉取可用实例列表,再通过负载均衡选择一个实例发起调用。
Nacos 和 Eureka都能做服务注册发现,但区别在于 Eureka 更偏单一的注册中心,而 Nacos 除了服务发现,还集成了配置管理和服务管理能力;另外 Nacos 支持实时健康检查,也支持临时和持久化实例,功能更全面。实际项目里,如果是 Spring Cloud Alibaba 体系,一般更倾向用 Nacos;如果是早期 Spring Cloud Netflix 体系,才更常用 Eureka。