一、什么是Eureka
- Eureka是spring cloud中的一个负责服务注册与发现的组件。功能类似于Dubbo的注册中心,如zk。
- 基于Rest。
- 遵循AP原则。
C:一致性、A:可用性、P:分区容错性,三个无法同时满足
二、基本思想
- Eureka采用C/S架构,EurekaServer作为服务注册功能的服务器,他是服务注册中心。
- 系统中的其他服务,使用EurekaClient连接到EurekaServer并维持
心跳连接
,EurekaServer以此来监控系统中的各个微服务是否正常运行,EurekaClient可进一步分为ServiceProvider
和ServiceCustomer
。
三、配置
- 服务端
<!-- eureka服务端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
配置文件:
eureka:
# eureka实例
instance:
hostname: localhost
# 配置服务端信息
client:
#是否向eurekaServer注册自己,因为本身就是服务器所以不需要注册
register-with-eureka: false
#要不要去注册中心获取其他服务地址
fetch-registry: false
# eureka服务注册地址,默认地址为 http://localhost:8761/eureka/
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
在启动类添加注解:
@EnableEurekaServer
- 客户端
<!-- eureka服务端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
配置文件:
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
在启动类添加注解:
@EnableEurekaClient
使用上述服务端及客户端配置后,可在http://localhost:7001观察到服务注册情况
四、Eureka的自我保护机制
当某时刻Eureka发现某个微服务不可用时,Eureka不会立刻清理掉该微服务的注册信息,而是会对该信息进行保护。
- 默认情况下,当Eureka检测不到某服务的心跳连接时,Eureka会注销该服务实例(默认为90s)。然而导致检测不到服务心跳的原因很可能不是因为微服务本身崩掉了,也可能时分区网络出现了故障。Eureka通过自我保护机制解决这个问题,当EurekaServer在短时间内丢失过多客户端时(可能发生网络故障),该节点将进入自我保护模式,不再注销任何微服务,当网络恢复后EurekaServe退出自我保护机制。
- 可通过以下配置关闭自我保护机制:
eureka:
server:
enable-self-preservation: false
五、Eureka与ZooKeeper对比
- ZooKeeper保证的是CP
当zk集群的master节点down掉后剩余的节点会重新进行leader选举,问题在于选举时间是太长,且选举期间整个zk集群不可用,这就导致选举期间注册服务瘫痪,故无法保证可用性。 - Eureka保证的是AP
Eureka中各节点是平等的,几个节点down掉不会影响整个集群的注册和查询服务。当EurekaClient向某个EurekaServer注册时,如果发现连接失败则会自动切换至其他EurekaServer节点。当EurekaServer在15min内发现85%的节点都没有正常的心跳连接
,那么会出现以下情况:
- 保护自身维护的注册信息不被移除
- 该节点依旧接受服务注册和查询请求,但不会同步到其他节点
- 网络稳定时,当前节点的新信息会同步至其他节点
在spring boot导入组件的4步
- 引入依赖
- 编写配置文件
- 在启动类开启此功能 @EnableXXXX
- 配置类(注入)