关于Nacos和Eureka的区别及说明

 更新时间:2023年06月12日 14:23:12   作者:梨瓜  
这篇文章主要介绍了关于Nacos和Eureka的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Eureka是什么

Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心

由Netflix公司与2012将其开源出来,Eureka基于REST服务开发,主要用于实现AWS云的中服务定位,以实现中间层服务器的负载均衡和故障转移,遵循着CAP理论中的A(可用性)P(分区容错性)

Eureka详解

一个Eureka中分为eureka server和eureka clint,其中eurka server是作为服务的注册与发现中心,eureka client既可以作为服务的生产者,又可以作为服务的消费者

Eurak2.0之后已经停止开源

Nacos是什么

Nacos是阿里巴巴最新开源的项目,提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

更敏捷和容易地构建、交付和管理微服务平台。

Nacos支持基于DNS和基于RPC的服务发现,动态配置服务(配置中心),动态DNS服务

Nacos详解

  • Provider APP:服务提供者
  • Consumer APP:服务消费者
  • Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服务路由
  • Nacos Server:Nacos服务提供者,里面包含的Open API是功能访问入口,Conig Service、Naming Service 是Nacos提供的配置服务、命名服务模块。Consitency Protocol是一致性协议,用来实现Nacos集群节点的数据同步,这里使用的是Raft算法(Etcd、Redis哨兵选举)
  • Nacos Console:控制台

Nacos的实现原理

  • 1.客户端provider向nacos server的open api发起调用,把自己的服务地址链接,服务名称注册上去
  • 2.nacos server与服务提供者provider建立心跳机制,用来检测服务状态
  • 3.服务消费者consumer查询出提供服务实例列表
  • 4.并且默认10s去nacos server拉取服务实例列表
  • 5.当服务消费者检测到服务异常,基于UDP协议推送更新
  • 6.服务消费者即可调用了

Nacos和Eureka的区别

CAP理论

C一致性,A高可用,P分区容错性

  • eureka只支持AP
  • nacos支持CP和AP两种

nacos是根据配置识别CP或AP模式,如果注册Nacos的client节点注册时是ephemeral=true即为临时节点,那么Naocs集群对这个client节点效果就是AP,反之则是CP,即不是临时节点

 #false为永久实例,true表示临时实例开启,注册为临时实例
 spring.cloud.nacos.discovery.ephemeral=true

连接方式

  • nacs使用的是netty和服务直接进行连接,属于长连接
  • eureka是使用定时发送和服务进行联系,属于短连接 服务异常剔除

eureka:

Eureka client在默认情况每隔30s想Eureka Server发送一次心跳,当Eureka Server在默认连续90s秒的情况下没有收到心跳, 会把Eureka client 从注册表中剔除,在由Eureka-Server 60秒的清除间隔,把Eureka client 给下线

 	EurekaInstanceConfigBean类下
 	private int leaseRenewalIntervalInSeconds = 30;  //心跳间隔30s
    private int leaseExpirationDurationInSeconds = 90;  //默认90s没有收到心跳从注册表中剔除
 	EurekaServerConfigBean  类下
    private long evictionIntervalTimerInMs = 60000L; //异常服务剔除下线时间间隔

也就是在极端情况下Eureka 服务 从异常到剔除在到完全不接受请求可能需要 30s+90s+60s=3分钟左右(还是未考虑ribbon缓存情况下)

nacos:

nacos client 通过心跳上报方式告诉 nacos注册中心健康状态,默认心跳间隔5秒,

nacos会在超过15秒未收到心跳后将实例设置为不健康状态,可以正常接收到请求

超过30秒nacos将实例删除,不会再接收请求

操作实例方式

  • nacos:提供了nacos console可视化控制话界面,可以对实例列表进行监听,对实例进行上下线,权重的配置,并且config server提供了对服务实例提供配置中心,且可以对配置进行CRUD,版本管理
  • eureka:仅提供了实例列表,实例的状态,错误信息,相比于nacos过于简单

自我保护机制

相同点

保护阈值都是个比例,0-1 范围,表示健康的 instance 占全部instance 的比例。

不同点

1)保护方式不同

  • Eureka保护方式:当在短时间内,统计续约失败的比例,如果达到一定阈值,则会触发自我保护的机制,在该机制下,Eureka Server不会剔除任何的微服务,等到正常后,再退出自我保护机制。自我保护开关(eureka.server.enable-self-preservation: false)
  • Nacos保护方式:当域名健康实例 (Instance) 占总服务实例(Instance) 的比例小于阈值时,无论实例 (Instance) 是否健康,都会将这个实例 (Instance) 返回给客户端。这样做虽然损失了一部分流量,但是保证了集群的剩余健康实例 (Instance) 能正常工作。

2)范围不同

  • Nacos 的阈值是针对某个具体 Service 的,而不是针对所有服务的。但 Eureka的自我保护阈值是针对所有服务的。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring 使用 feign时设置header信息的操作

    Spring 使用 feign时设置header信息的操作

    这篇文章主要介绍了Spring 使用 feign时设置header信息的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 深入理解Mybatis一级缓存

    深入理解Mybatis一级缓存

    客户端向数据库服务器发送同样的sql查询语句,如果每次都去访问数据库,会导致性能的降低,那么怎么提高呢?下面小编给大家分享下mybatis为我们提供了一级缓存的策略
    2016-12-12
  • java图形界面编程实战代码

    java图形界面编程实战代码

    这篇文章主要介绍了java图形界面编程实战代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Java实现学生管理系统

    Java实现学生管理系统

    这篇文章主要为大家详细介绍了Java实现学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Kotlin内存陷阱inline使用技巧示例详解

    Kotlin内存陷阱inline使用技巧示例详解

    这篇文章主要为大家介绍了Kotlin内存陷阱inline使用技巧示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • MyBatis-Plus数据权限插件的简单使用

    MyBatis-Plus数据权限插件的简单使用

    在MyBatis-Plus中,通过DataPermissionInterceptor插件实现数据权限控制,首先需要创建自定义注解和处理类,利用JSQLParser库动态修改SQL,实现按角色权限过滤数据,配置类中注册拦截器,确保只有授权用户能访问指定数据,感兴趣的可以了解一下
    2024-10-10
  • java实现gif动画效果(java显示动态图片)

    java实现gif动画效果(java显示动态图片)

    这篇文章主要介绍了java实现gif动画效果示例(java显示动态图片),需要的朋友可以参考下
    2014-04-04
  • Java常用数字工具类 数字转汉字(1)

    Java常用数字工具类 数字转汉字(1)

    这篇文章主要为大家详细介绍了Java常用数字工具类,数字转汉字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Nacos Namespace/Group/DataID三者关系解读

    Nacos Namespace/Group/DataID三者关系解读

    本文介绍了Nacos中的命名空间(Namespace)、配置分组(Group)和配置集ID(DataID)的概念,并详细说明了它们之间的关系和应用场景,同时,还提供了三者在不同环境下的配置切换方案,包括DataID方案、Group方案和命名空间方案
    2024-12-12
  • java8列表中通过stream流根据对象属性去重的三种方式

    java8列表中通过stream流根据对象属性去重的三种方式

    这篇文章主要介绍了java8列表中通过stream流根据对象属性去重的三种方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论