Eureka学习

Eureka学习,第1张

Eureka学习

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分钟。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3978646.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存