Eureka架构图
一、Eureka简介
1、Spring Cloud Netflix的核心子模块,包含Eureka Server和Eureka Client:
1)Eureka Server提供服务注册服务,存储所有可用服务节点
2)Eureka Client用于简化与Eureka Server之间的通讯复杂度,同时也是一个内置的、使用轮询(round-robin)负载算法的负载均衡器
2、Eureka依赖配置
1)Eureka Server:
<!--pom dependency-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
#properties:
server:
port: 8761
eureka:
instance:
hostname: localhost
prefer-ip-address: true
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka/
//启动类:
@EnableEurekaServer
2)Eureka Client:
<!--pom dependency-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
#properties:
server:
port: 8201
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
//启动类:
@EnableDiscoveryClient
3)给服务起别名
spring:
application:
name: xxx
@EnableDiscoveryClient与@EnableEurekaClient的区别:
@EnableDiscoveryClient:可以集成大部分注册中心
@EnableEurekaClient:只对Eureka使用
3、获取服务
private LoadBalancerClient eurekaClient;
ServiceInstance choose = eurekaClient.choose(“服务名”);
二、核心特性
1、服务注册(register)
Eureka Client在第一次心跳时向Eureka Server注册(注册时是有时间差的)
注册时会提供诸多自身元数据:主机号、端口、健康指标、URL等
2、服务续约(renew)
Eureka Client通过发送心跳进行续约
默认情况下每30秒发送一次心跳
如果90秒内Eureka Server未收到续约,则进行服务剔除
3、服务下线(cancel)
Eureka Client优雅退出时会发送cancel命令
Eureka Server收到cancel命令是会删除该节点
4、获取注册列表信息
Eureka Client会缓存由Server获取的注册表信息
Eureka Client会定期更新注册表信息(默认30秒)
Eureka Client会处理注册表的合并等内容
三、多注册中心比较(理论、特性、应用)
1、一致性(强一致性、弱一致性、最终一致性):Consistency
2、可用性:Availability
3、分区容错性:Partition tolerance
常见注册中心:Eureka、Zookeeper等
Eureka主要保证AP特性
Zookeeper是典型的CP特性
四、Eureka慢注册
Eureka注册慢的根本原因在于Eureka的AP特性(即统一扫描、统一放行)
Eureka Client延迟注册,默认30秒
Eureka Server的响应缓存,默认30秒
Eureka Server的缓存刷新,默认30秒
服务注册慢的解决方案:可以修改eureka.instance.leaseRenewalIntervalInSeconds配置加快客户端连接到其他服务的过程
注意:在生产中,最好坚持使用默认值,因为在服务器内部有一些计算对服务续约做出假设
五、Eureka的自我保护
Eureka Server会自动更新续约更新阈值
Eureka Server续约更新频率低于阈值则进入保护模式
自我保护下Eureka Server不会剔除任何注册信息