Eureka概述
经过一年的学习,对Spring Cloud了解加深,所以这里重新书写一下对Eureka的理解和大家分享
Spring Cloud针对服务注册与发现,进行了一层抽象,并提供了三种实现:Eureka(支持得最好)、Consul、Zookeeper。本文详细讲解Eureka的用法。
Eureka角色
Eureka 是 Netflix 开源的服务注册发现组件,服务端通过 REST 协议暴露服务,提供应用服务的注册和发现的功能。
所有的Eureka服务都被称为实例(instance)。Eureka服务又分为两类角色:Eureka Server和Eureka Client
Eureka-Client又分为Application Provider 和Application Consumer
- Application Provider :服务提供者,内嵌 Eureka-Client ,它向 Eureka-Server 注册自身服务、续约、下线等操作
- Application Consumer :服务消费者,内嵌 Eureka-Client ,它从 Eureka-Server 获取服务列表,分为全量获取和增量。
注意:Application Provider 和 Application Consumer 只是角色,同一个服务即可以是服务的提供者,又可以是服务的消费者。甚至,在注册中心的集群环境下,Eureka Server,即可以Eureka Server,又是Eureka Client。 Eureka Server比较好理解,Eureka Client是他向其它Eureak Server同步消息,它又变成了Eureker Client
Eureka的配置主要分为三类:
- eureka.instance.*: Eureka实例注册配置项,这些是无论Eureka是做Server,Client都需要的公共配置项。对应的配置类为org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean。
- eureka.server.*: Eureka做为Eureka Server才需要配置的选项,即使用eureka做注册中心时才需要配置这个选项。对应的配置类为org.springframework.cloud.netflix.eureka.EurekaClientConfigBean。
- eureka.client.*: Eureka做为Eureka Client才需要配置的选项,即服务需要向注册中心注册或使用注册中心中的服务时才需要配置这些选项。对应的配置类为org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean。
Eureka架构图
首次注册
- 服务提供者在启动会向Eureka Server注册信息(包括服务名(Eureka Service Id)、service id、ip、port、心跳周期等),EurekaServer获取注册请求,将服务实例信息存入到读写缓存中。
- 服务消费者根据Eureka service id向Eureka Server获取要访问服务的注册信息,第一次请求会一次性拉取对应Eureka service id的全部服务实例信息。
- Eureka Server收到请求后,会首先在只读缓存查找,如果找到则直接返回,否则再查找读写缓存,如果找到则将再存入到只读缓存中,然后返回查找结果。
- 服务提供者获取信息的,将服务实例信息缓存到本地,在使用时根据算法从N个服务中中选取一个服务并向这个服务发送请求。