Eureka是什么?它是如何工作的?

Eureka是Netflix开发的服务发现框架,现在是Spring Cloud生态系统的一部分。它主要用于AWS云平台,用来定位服务,以实现中间层服务器的负载均衡和故障转移。在微服务架构中,服务发现是关键的一环,它允许服务和服务彼此发现并通信,这样客户端就不需要硬编码目标服务的位置。

Eureka的主要组件:

Eureka由两个主要组件组成:Eureka Server和Eureka Client。

Eureka Server

Eureka Server充当服务注册中心。它是一个服务发现机制的核心,所有可用服务的实例都在此注册,并通过心跳机制保持注册信息是最新的。Eureka Server提供了一个REST API,可供服务实例注册或用户查询当前注册的服务列表。

要创建Eureka Server,你需要一个Spring Boot应用程序,并使用@EnableEurekaServer注解启用Eureka Server功能:

java 复制代码
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

application.yml中配置Eureka Server:

java 复制代码
server:
  port: 8761
  
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

上述配置启动了一个运行在端口8761上的Eureka Server,并通过设置registerWithEureka: false和fetchRegistry: false告诉它不要尝试将自己注册为客户端或尝试获取注册表。

Eureka Client

Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。客户端服务在启动时向Eureka Server注册自身,并定期发送心跳来维持其在注册表中的状态。

要使应用成为Eureka Client,你需要在Spring Boot应用上添加@EnableEurekaClient或@EnableDiscoveryClient注解:

java 复制代码
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaClientApplication.class, args);
    }
}

工作原理:

服务注册:当Eureka Client启动时,它会向Eureka Server发送一个注册请求,将其自身的网络地址等信息注册到Eureka Server。

服务续约:Eureka Client定期向Eureka Server发送心跳(默认每30秒一次)来维持其在注册表中的状态。如果Eureka Server在一定时间内(默认90秒)没有接收到某个实例的心跳,它将注销该实例。

服务下线:当Eureka Client正常关闭时,它会向Eureka Server发送一个下线请求,告知Eureka Server自己将要下线。

获取注册的服务:Eureka Client可以从Eureka Server获取当前所有注册服务的信息列表,客户端内部会缓存这个信息列表,并周期性地更新。

服务副本:Eureka Server可以运行多个实例,它们之间相互复制注册信息,形成高可用集群。

通过Eureka的这些机制,Spring Cloud应用可以实现自动化的服务注册、发现和状态维护,这极大地简化了分布式系统中的网络通信和基础设施管理。

相关推荐
小股虫5 小时前
分布式事务:在增长中台,我们如何做到“发出去的内容”和“记录的数据”不打架?
分布式·微服务·云原生·架构·团队建设·方法论
忧郁蓝调266 小时前
Redis不停机数据迁移:基于 redis-shake 的跨实例 / 跨集群同步方案
运维·数据库·redis·阿里云·缓存·云原生·paas
java1234_小锋7 小时前
ZooKeeper集群中服务器之间是怎样通信的?
分布式·zookeeper·云原生
easy_coder7 小时前
从“未知故障”到“自治诊断”:基于双路召回与RAG的智能诊断系统构建
人工智能·云原生·云计算
eddy-原8 小时前
ELKStack 与 Kubernetes 核心基础知识点综合作业
云原生·容器·kubernetes
无心水12 小时前
【神经风格迁移:工程化】27、神经风格迁移全栈进阶实战:Docker容器化与K8s部署,从单机到云原生
docker·云原生·架构·神经风格迁移·docker容器化·ai部署·vgg算法
victory043112 小时前
K8S 从Harbor当中拉取镜像 连接方法
云原生·容器·kubernetes
勇气要爆发13 小时前
Kubernetes (K8S):云时代的“超级舵手”
云原生·容器·kubernetes
杜子不疼.13 小时前
Spring Cloud Alibaba 微服务架构:注册中心 + 配置中心搭建
微服务·云原生·架构
大新新大浩浩13 小时前
ubuntu2204 + k8s 1.32.5 +GPU-Operator 24.9.2搭建GPU-k8s平台
云原生·容器·kubernetes