springcloud的重要套件–eureka
Eureka是一个基于rest的服务,包括server和client,server就是注册中心,而client按照角色可以分为服务提供者和消费者。
所有的client都将到server注册服务,而配置订阅服务的client将从server拉取服务信息。
在client启动后,将会向server发送心跳,默认周期为30秒,如果server在90秒(默认)未接受到client的心跳,将会将该client的节点删除。
client支持缓存,即拉取服务列表后进行本地缓存,当eureka server出现不可用的情况时,client的消费端依然能够根据服务列表进行调用服务。
server支持集群部署,server之间通过异步复制的方式完成数据的同步,首尾相连形成一个闭环即可。异步复制达到数据的同步,这就意味着在某一特定的时间,server的数据可能不一致的,所以该方案实现了高可用性,但是不能保证强一致性。
eureka.server.enable-self-preservation,默认为true,即server的自我保护机制是处于开启状态的。
微服务涉及到服务器之间的远程网络调用,所以需要考虑到网络的不可靠性,网络的波动可能导致未能发现服务发送的心跳包,如果固化采用90秒无心跳包就认为服务下线是非常不合理的,所以server的自我保护机制就针对短时间出现大量服务无心跳包的发送,从而进入自我保护的模式,不删除任意的服务节点。当网络趋于稳定,能够正常接收心跳包的时候,将自动解除自我保护模式。
综上所得:
1,所有的eureka客户端都要采用rest风格
2,所有的eureka客户端都要到eureka注册中心进行注册,而配置eureka.client.registry-fetch-interval-seconds= 30 或者url.eureka的客户端将从注册中心订阅服务。
3,所有的客户端都将每30秒发送心跳到注册中心进行交互,而消费者身份的eureka客户端将缓存消费者的信息。默认是轮循调用。
4,注册中心默认90秒移除服务节点,即扫描无效节点时间为60秒。
5,注册中心的集群必须形成一个闭环,比如两个eureka注册中心,应该进行相互注册,通过异步复制的方式实现数据的一致。