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