“Eureka” 是 Netflix 开源的一款服务注册与发现组件,它是 Spring Cloud 微服务架构中重要的一部分,主要用于服务的自动化注册与发现。了解 Eureka 的原理并进行实践,可以帮助你更好地掌握微服务架构下的服务管理。
Eureka 原理
-
服务注册中心:Eureka Server 作为一个服务注册中心,所有微服务都需要向这个中心注册自己的信息,比如 IP 地址、端口号、服务状态等。Eureka Server 还会定期从注册表中清理掉超时的服务实例。
-
服务注册:当微服务启动时,它会向 Eureka Server 发送一个包含其自身信息的注册请求。Eureka Server 接收到这个请求后,将这个服务实例的信息存储到注册表中。注册表通常存储在内存中,并且可以动态更新。
-
服务发现:当一个微服务需要调用其他服务时,它会向 Eureka Server 请求获取目标服务的位置信息(IP 和端口号等),然后通过这些信息调用目标服务。
-
心跳机制:微服务需要定期向 Eureka Server 发送心跳,以告知它仍然在线并正常运行。如果 Eureka Server 在一定时间内没有收到某个服务实例的心跳,则认为该实例已不可用,并从注册表中移除。
-
服务剔除:Eureka 通过剔除长时间未发送心跳的实例来保证注册表的准确性。如果某个实例恢复正常,可以重新向 Eureka Server 注册。
-
自我保护模式:当 Eureka Server 检测到大量服务实例在短时间内失去心跳时,会进入自我保护模式。在该模式下,Eureka Server 不会剔除任何实例,以避免由于网络分区或其他原因造成的误判。
实践步骤
-
搭建 Eureka Server:
- 创建一个 Spring Boot 项目,引入
spring-cloud-starter-netflix-eureka-server
依赖。 - 在主类上添加
@EnableEurekaServer
注解。 - 在
application.yml
文件中配置 Eureka Server 的相关信息。 - 启动 Eureka Server。
- 创建一个 Spring Boot 项目,引入
-
注册微服务到 Eureka Server:
- 创建一个新的 Spring Boot 项目,引入
spring-cloud-starter-netflix-eureka-client
依赖。 - 在
application.yml
中配置 Eureka Client 相关信息,包括eureka.client.serviceUrl.defaultZone
指向 Eureka Server 地址。 - 在主类上添加
@EnableEurekaClient
注解。 - 启动微服务,它会自动注册到 Eureka Server。
- 创建一个新的 Spring Boot 项目,引入
-
服务发现:
- 在另一个微服务中引入同样的 Eureka Client 依赖,并配置服务发现机制。
- 通过 Spring Cloud 的
RestTemplate
或者Feign
客户端,调用已经注册的服务。 - 使用
@LoadBalanced
注解实现客户端负载均衡。
-
故障模拟与自我保护模式:
- 可以通过停止一个服务实例来观察 Eureka Server 如何处理服务剔除,或者故意让网络不通以模拟网络分区,观察自我保护模式的触发与恢复。
通过这些步骤,你可以掌握 Eureka 在微服务架构中的核心原理,并了解如何在实际项目中应用它来实现服务的自动注册和发现。