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

上一篇:分布式事务和锁


下一篇:服务注册中心 Eureka 服务发现Discovery