Nacos注册中心细节分析(Nacos和Eureka的对比)
1.不管是哪个注册中心(Nacos或Eureka),两者的服务提供者在启动时都会把自己的信息提交给注册中心,注册中心会将收到的信息保留下来,当服务消费者需要消费时,就可以找注册中心要这个信息—定时拉取服务。
2.消费者拉取之后,会将拉取到的信息存到缓存当中,作为服务列表缓存,列表会每隔30s拉取一次,保证服务提供的信息是正确的。
3. 消费者拿到服务列表信息后,再进行负载均衡去调用服务提供者。
4. 在Nacos中,nacos会将服务提供者划分成临时实例和非临时实例,默认情况下,所有的实例都为临时实例,临时实例采用心跳监测,在哪一天临时实例不跳了,nacos会将这个临时实例剔掉。非临时实例不会做心跳监测,而是由nacos主动发请求询问该实例是否还存在,如果不存在,会被标记为不健康,会等待该实例恢复健康。
5. nacos会主动做消息推送,主动推送变更消息。Eureka是pull,而nacos是pull+push两者结合,每隔一段时间会去更新,假设有服务提供者的实例挂掉,会立即通知服务消费者,让消费者进行更新。
临时实例和非临时实例
服务注册到Nacos时,可以选择注册为临时或非临时实例,通过下面的配置来设置:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: Hubei #集群名称
ephemeral: false #是否是临时实例
临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会
总结
- Nacos与eureka的共同点
①都支持服务注册和服务拉取
②都支持服务提供者心跳方式做健康检测 - Nacos与 Eureka的区别
①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
②临时实例心跳不正常会被剔除,非临时实例则不会被剔除
③Nacos支 持服务列表变更的消息推送模式,服务列表更新更及时
④Nacos集群 默认采用AP方式,当集群中存在非临时实例时,采用CP模式; Eureka采用AP方式