展示图
Eureka.jpeg三个角色:
- 注册中心
- 服务提供者
- 服务消费者
角色之间的关系
- 微服务启动,将自身的服务名,地址等信息注册到注册中心。
- 服务消费者从注册中心查询到服务列表,调用提供者的服务。
- 微服务与注册中心保持心跳检测,如果注册中心与某微服务长时间无法通信,就会注销该实例。
- 微服务网络地址发生变化,会重新注册到注册中心。
自我保护机制
eureka:
instance:
lease-expiration-duration-in-seconds: 10 #服务过期时间配置:
server:
enable-self-preservation: false # false 关闭自我保护机制[立即清除服务信息]
eviction-interval-timer-in-ms: 2000 #扫描失效服务的间隔时间(单位毫秒,默认是60*1000)即60秒
-
不存在自我保护机制时
当因为网络原因,服务未按时进行心跳续约,此时就把服务从服务列表中剔除并不妥当,因为服务也有可能未宕机。 -
当开启自我保护机制时:
Eureka就会把当前实例的注册信息保护起来,不允剔除。这种方式在生产环境下很有效,保证了大多数服务依然可用。
如果Eureka Server收到的心跳包不足正常值的85%(可配置)就会进入自我保护模式,在这种模式下,Eureka Server不会删除任何服务信息。
续约
在服务启动时,会创建一个后台心跳任务,定时去续约服务信息
服务取消
服务停止前会向服务治理中心发一个服务取消的请求,用于注销服务。
Eureka 保证AP
AP:保证可用性和容错性,放弃一致性。
Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而eureka客户端再向某个eureka服务端注册时如果发现连接失败,则会自动切换至其他节点。
只要有一台eureka server 是ok的,就能保证服务可用(保证服务可用)。只不过查询到的信息可能不是最新的(不保证强一致性)。
客户端如何拉取服务端已保存的服务信息
客户端拉取服务端服务信息是通过一个定时任务定时拉取的,每次拉取后刷新本地已保存的信息,需要使用时直接从本地直接获取。
网友评论