内容简介:Spring Cloud Eureka体系总览
Eureka是Netflix公司开源的一款基于REST的服务自动注册和发现的产品,如下图所示Eureka可以分为三个部分:
Eureka-Server:提供服务注册和发现。
Eureka-Client-Service-Provider:服务提供者,通过Rest告知服务端注册,更新,取消服务。
Eureka-Client-Service-Consumer:服务消费者,通过Rest从服务端获取需要服务的地址列表,然后配合一些负载均衡策略来调用相关的服务。
Eureka Server
服务注册(Register)
Eureka Server中会保存一份所有Service注册信息的map,将InstanceInfo中的元数据信息存储在一个 ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> 对象中,它是一个双层Map结构,第一层的存储 服务名-appName ,第二层的存储 实例名-instanceId 属性。
如果没有设置 eureka.instance.appName 默认使用 spring.application.name ,如果没有设置 eureka.instance.instanceId 则默认是 CLIENT IP:PORT 。
服务续约(Renew)
Eureka Client每隔一段时间都会向Eureka Server发送一个心跳声明自己目前处于正常的状态。
服务剔除(Canel)
Eureka会定期检查是否有服务已经失效,检测的标准就是超过指定的时间没有进行续约的服务,这个指定的时间可以通过 eureka.instance.lease-expiration-duration-in-seconds=90 来指定,Eureka Server定期检查的时间可以通过 eureka.instance.lease-renewal-interval-in-seconds=30 来设置。
Peer复制
当一个Eureka Client向一个Eureka Server实例注册/续约/剔除之后,这台Eureka Server需要将相关的信息同步更新到其他的Eureka Server。
Service Provider
Service Provider(Eureka Client)主要负责下面几个任务:
- 向Eureka Server注册服务。
- 向Eureka Server服务续约。
- 当服务关闭期间,向Eureka Server注销。
- Eureka Client还需要配置一个Eureka Server的URL列表。
注册
Service Provider要对外提供服务,一个很重要的步骤就是向Eureka Server去注册。
服务续约
Service Provider每个一定时间就会通知Eureka Server来表明自己依然还活着,这个参数默认是30s,可以通过 eureka.instance.leaseRenewalIntervalInSecends 来设置。
服务剔除
在Service Provider要Shutdown的时候,需要及时通知Eureka Server将自己剔除,避免Consumer调用不存在的服务,这可以通过调用 DiscoveryManager.getInstance().shutdownComponent() 来实现。
Consumer
Fetch Service Registry
通过 eureka.client.fetch-registry=true 来允许从Eureka Server获取服务列表。
Update Service Registry
Consumer会在本地保存一份所有服务的缓存列表,每隔一定的时间都会重新向Eureka Server查询来更新这份列表,这个参数可以通过 eureka.client.registry-fetch-interval-seconds=30 来指定这个时间。p.s: Consumer也是属于Eureka Client。
为什么服务注册会慢
当Erueka Client向Eureka Server注册一个服务,有时候我们会发现不能从Consumer立即读取到注册服务,主要有下面四个原因:
- Eureka Client每隔一定时间(默认是30s)才会向Eureka Server发送心跳信息。
- Eureka Client自身在本地也有一份服务列表缓存。
- Eureka Server也保持了一份缓存。
- 通过Ribbon做负载均衡的时候,Ribbon也保存了一份服务列表的缓存。
以上所述就是小编给大家介绍的《Spring Cloud Eureka体系总览》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design systems
Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!