Eureka学习

本文介绍了Eureka作为服务注册与发现组件的核心特性,包括CAP原理中的AP选择、服务注册与续约、服务获取、自我保护机制以及多网卡IP配置。Eureka在服务注册时,服务实例启动后会延迟40s注册,并且更新到服务器的缓存需要30s,客户端获取服务列表也会有30s的缓存更新周期,整个过程可能导致服务上线延迟超过2分钟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eureka:

1、布鲁尔定理(CAP)

Consistency 一致性 同一数据在集群的所有节点,同一时间的值是相同的。
Availability 可用性 集群部分节点挂掉,集群是否还能处理客户端请求
Partition Tolerance 分区容忍性 允许数据分区,即部分集群节点之间无法通信。

分布式是不能同时满足以上三个方面要求的,其中ZooKeeper遵守的是CP原则,而Eureka则认为与数据一致性相比,可用性更加重要,因此设计时遵守的是AP原则。

2、服务注册(Register)

Eureka服务器会维护一份已注册的服务列表,其数据结构为嵌套双层HashMap。第一层HashMap存储为应用名称、服务实例。第二层存储为服务实例、对应该实例的注册信息、服务端口、服务ip、url等信息。

当服务实例状态发生变化时,会向Eureka服务器更新自己的状态,同时同步到其他对等的Eureka服务器。可以通过配置eureka.client.register-with-eureka = false来不执行上述操作。

3、服务续约(Renew)

服务启动成功并成功注册到Eureka服务器后,会默认每隔30秒,向服务器发送心跳。这就是续约操作,其中逻辑也是更新自己的服务实例状态并同时同步其他服务器节点。

对于Eureka服务器来说,当在90秒内,也就是连续3次没有收到客户端的心跳,就会将该服务实例剔除掉。但是在服务器启动自我保护机制的时候,是不会执行剔除操作。

#每次发送心跳的间隔时间
eureka.instance.lease-renewal-interval-in-seconds =30
#判断服务实例失效的时间
eureka.instance.lease-expiration-duration-in-seconds =90

这两个配置项一般建议使用默认值。

4、获取服务

客户端会从服务器获取服务列表,并缓存到本地,然后以默认30s的时间间隔,定期从服务器获取服务列表,更新到自己的本地缓存。

Eureka服务器和客户端之间可以使用JSON/XML格式进行通讯,默认情况下,客户端是通过使用压缩JSON格式获取注册列表。

5、Eureka自我保护机制

Eureka服务器的自我保护机制默认是开启的,触发条件:

1)Eureka服务器每分钟收到的心跳小于一个阈值。心跳阈值计算公式为:

服务实例总数 * (60/心跳间隔时间) * 自我保护系数(0.85)

其中保护系数可以通过eureka.server.renewal-percent-threshold设置。

2)此外,默认情况下,每五分钟Eureka服务器会从对等节点同步注册信息,如果因为某种原因同步失败,也会触发服务器的自我保护机制。这个五分钟可以通过eureka.server.wait-time-in-ms-when-sync-empty设置。

6、多网卡及指定IP

如果电脑是多网卡配置的话,很可能在服务进行续约注册时候发生错误,这时可以通过以上来指定使用固定的ip来进行注册及续约:

eureka.instance.prefer-ip-address = true
eureka.instance.ip-address = 192.168.1.132

7、注册一个服务到使用需要多长时间

Eureka中使用缓存的地方很多,当注册一个新的服务时。

1)需要更新Eureka服务器中缓存,默认时间30s
2) 客户端从Eureka服务器拉取注册列表,缓存本地,默认时间30s
3) 如果使用Ribbon作负载均衡,ribbon会从客户端拉取注册列表,并将负载均衡的结果缓存30s。
4)服务实例启动完毕后,也不是立即向服务端去注册的,而是会在一个延迟时间,默认是40s后,才会向Eureka服务器发起注册。

总的计算下来,一个服务实例从启动到可以使用,最多可能超过2分钟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值