Eureka vs. Nacos:注册中心角色之间的不同特性

这篇具有很好参考价值的文章主要介绍了Eureka vs. Nacos:注册中心角色之间的不同特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

此文章简要介绍一下Eureka和Nacos在注册中心功能上规则、功能的不同

服务拉取机制

这一部分内容我们可以引入两个远程调用最初的问题来引入

  • 消费者如何得知提供者信息,包括url,健康状态等?
  • 当程序并发量大,提供者以集群部署时,应该如何选择?

根据此二问题,衍生出了服务拉取等环节(服务拉取:经过负载均衡的服务调用)

也为了应对这样的问题,我们需要一个统一的中介角色,来管理提供者和消费者,并且登记提供者的地址等信息。同时,在出现集群时,有对应的算法均衡负载。Eureka便是这样的一个角色。在微服务启动时,提供者将自己的集群信息发送到Eureka中,并每隔30s向Eureka发送心跳响应,保证提供者的健康状态。(若提供者宕机则剔除出注册中心)。

但是这个拉取并不是每一次需要远程调用时都需触发的。Eureka中规定了定时拉取&缓存的机制,用以提高服务的效率。每一次拉取之后,所有的服务都将缓存在一个服务列表中。同时若长时间多次使用此服务时。也需要对提供者的健康状态等信息做出更新。于是Eureka中规定,对统一服务的列表缓存每隔30s做出更新。 (前提是过了30s中此提供者仍需再次提供服务)

而在Nacos中,其规则不尽相同

Nacos会将实例区分为临时实例非临时实例

  • 对于临时实例,其心跳响应机制跟Eureka大致相同,但是其响应频率更高。若其宕机,Nacos直接将其从服务列表中剔除
  • 对于非临时实例,其不会对Nacos进行心跳相应。而是由Nacos主动发送请求,并确认对应状态。(有点像是变相的心跳响应)若其宕机,Nacos也不会剔除,仅仅标记其为不健康服务

在Eureka中,服务消费者会对Eureka定时拉取 (pull) ,拉取更新服务列表的信息。而由于Nacos与服务提供者的不同特性,相比之下服务更新的状态时效性较差。于是Nacos中增加了新的特性。在提供者和Nacos的状态更新中,若有实例宕机或健康状态改变,Nacos会主动推送(push)实例的变更信息。 从而保证服务列表中状态的一致性。

但是主动推送这一特性,对服务器带来的压力会较大。所以需结合使用场景,斟酌好使用临时实例或非临时实例。

如何将服务配置为临时或 非临时实例?

修改配置文件如:

spring.cloud.nacos.discovery.ephemeral: flase
# 非临时实例
spring.cloud.nacos.discovery.ephemeral: true
# 临时实例

CAP

Eureka和Nacos在CAP模式规则设计上的差别

CAP 定理,也称为 Brewer 定理,是分布式系统中的一个基本原则,它阐明了三个关键属性之间的固有权衡:一致性、可用性和分区容错性。CAP 定理由计算机科学家 Eric Brewer 于 2000 年提出,现已成为架构师和工程师设计分布式系统的基石概念。这些模式描述了在分布式系统中不同的设计目标和优先级。

  • C -> 一致性(Consistency)

一致性强调在所有分布式节点具有同时的数据视图,当需要修改时,确保修改后的最新数据能同步到所有节点当中。

  • A -> 可用性(Availability)

可用性强调在系统面对故障or宕机等特殊情况时,整个分布式系统仍能继续处理请求,返回响应,不会因部分节点的故障导致整体宕机。但此时不能保证其含有最新版本的数据

  • P -> 分区容忍性(Partition Tolerance)

指即使部分服务出现故障宕机,从而导致节点之间时区通信。但系统仍能维持其运行的能力。

实际开发中,根据应用场景的不同,以及业务功能的要求不同。我们需要在一致性和可用性之间做平衡取舍。而CAP定理可以给我们带来一份范本。

而在Eureka和Nacos的集群部署当中

  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;
  • Eureka采用AP方式

注意,虽然两者默认采用的都是AP模式,但并不代表同时就牺牲了一致性。两者的心跳机制便是保证数据一致性的重要规则。另外还有注册表同步,集群选举等保证一致性的重要措施。

数据存储方式

  1. Eureka的数据存储方式

    • Eureka使用内存中的数据结构来存储服务实例信息,例如使用HashMap等数据结构。
    • 默认情况下,Eureka并不提供对服务实例信息的持久化支持,这意味着当Eureka服务器重启或者发生故障时,原有的服务实例信息将会丢失,需要重新注册。
  2. Nacos的数据存储方式

    • Nacos提供了多种数据存储方式,可以根据实际需求选择合适的存储方式来存储服务实例信息,包括内嵌数据库、MySQL、Redis等。
    • 内嵌数据库是Nacos的默认存储方式,可以在启动Nacos时自动创建并初始化数据库表,将服务实例信息持久化到数据库中。
    • 使用外部数据库(如MySQL、Redis)可以提供更高的可靠性和扩展性,保证了服务实例信息的持久化和高可用性,同时也方便了数据的管理和备份。

相较之下,Eureka的这种设计适合于轻量级的应用场景。其本身并没有内置的持久化机制,这种设计灵活性较高,用户可以根据自己的实际情况选择合适的持久化方式,并自定义持久化的规则。但同时也需要具备更多的开发能力,自行实现对Eureka Server的持久化支持。

在自定义配置项中,可以通过配置Eureka Server示例信息的过期时间eureka.server.eviction-interval-timer-in-ms,以及自我保护模式下的过期时间eureka.server.renewal-percent-threshold,确保示例信息不会因未更新而被删除。另外也可以结合Redis等配置持久化缓存,但没有直接的接口使Eureka进行持久化。

加载策略

在Eureka中,默认采用的是饥饿加载,Nacos则默认使用惰性加载

两者定义:

  1. 饥饿加载(Eager Loading)

    • 饥饿加载是指在需要使用对象或数据之前就提前加载它们到内存中。
    • 在关系数据库中,饥饿加载可以通过一次性查询所有相关数据来实现,例如使用 SQL 中的 JOIN 操作,将多个表的数据一次性加载到内存中。
    • 在对象关系映射(ORM)中,饥饿加载可以通过在查询对象时同时加载其关联对象的数据来实现,例如使用 Hibernate 中的 Fetch 操作。
    • 减少后续查询或访问时的延迟,提高系统性能和响应速度。
    • 可能会导致不必要的数据加载和内存消耗。

一次性把所有数据和服务都加载到内存当中,启动时缓慢,但是减少使用对应服务时的加载时间。

  1. 惰性加载(Lazy Loading)

    • 惰性加载是指在需要使用对象或数据时才进行加载,延迟加载到最后可能需要使用的时候。
    • 在关系数据库中,惰性加载可以通过延迟执行查询来实现,例如在 ORM 中使用延迟加载的关联对象,在需要访问关联对象数据时才真正执行查询。
    • 在前端开发中,惰性加载也常用于延迟加载页面内容或组件,例如使用懒加载技术来减少初始页面加载时的资源消耗。
    • 节省了不必要的资源消耗和加载时间。
    • 增加访问时的延迟。

用到什么再加载什么,大量使用不同的未加载的服务可能导致效率非常低

当Eureka Server启动时,它会立即尝试从所有注册的服务中心获取服务实例信息,并将这些信息加载到内存中。这一方式确保在系统启动后尽快获取和管理服务实例的信息,以便其他服务可以快速地发现和调用这些服务。

在Nacos中,服务注册和发现是惰性加载的。当Nacos Server启动时,并不会立即加载所有服务实例信息到内存中,而是在有具体的服务实例注册或者查询时才会进行加载和处理。节省了不必要的资源和内存消耗。

一般来说,Eureka的饥饿加载适合于对服务实例信息实时性要求较高的场景,如支付服务等,与内存资源充足的场景,如云原生应用。

而Nacos的惰性加载则适合于对系统资源消耗和加载时间有一定要求的场景,如电子商城中所有的商品具体信息。文章来源地址https://www.toymoban.com/news/detail-850039.html

到了这里,关于Eureka vs. Nacos:注册中心角色之间的不同特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常见的注册中心Nacos、Eureka

    常见的注册中心 1.Eureka(原生,2.0遇到瓶颈,停止维护) 2.Zookeeper(支持,专业的独立产品。例如:dubbo) 3.Consul(原生,GO语言开发) 4.Nacos         相对于 Spring Cloud Eureka 来说,Nacos 更强大。         Nacos = Spring Cloud Eureka + Spring Cloud Config         Nacos 可以与 S

    2023年04月22日
    浏览(76)
  • 浅谈注册中心Eureka、Nacos

    (强一致性、单调一致性、会话一致性、最终一致性、弱一致性) C:一致性 (所有节点在同一时间具有相同的数据) Consistency;  A:可用性 (保证每个请求不管成功或者失败都有响应) Availability;  P:分区容错性 (系统中任意信息的丢失或失败不会影响系统的继续运作) 

    2024年02月08日
    浏览(44)
  • 【微服务开篇-RestTemplate服务调用、Eureka注册中心、Nacos注册中心】

     本篇用到的资料: https://gitee.com/Allengan/cloud-demo.git https://gitee.com/Allengan/cloud-demo.git 目录 1.认识微服务 1.1.单体架构 1.2.分布式架构 1.3.微服务 1.4.SpringCloud 1.5.总结 2.服务拆分和远程调用 2.1.服务拆分原则 2.2.服务拆分示例 2.2.1.导入Sql语句 2.2.2.导入demo工程 2.3.实现远程调用案例

    2024年02月08日
    浏览(37)
  • 微服务(二)——注册中心(Eureka、Nacos)

    注册中心: 需求:当一个服务提供者 Service 部署了多个实例交给 User 远程调用时: 服务消费者 User 应该调用哪个实例,如何获取其对应地址和端口? User 如何获知实例是否健康? 注册中心作用: 帮助管理服务,并帮助服务调用者选择并调用服务 实时监测服务实例是否健康

    2024年02月12日
    浏览(39)
  • SpringCloud(2) 注册中心Eureka、Nacos

    注册中心是微服务中必须要使用的组件,考察我们使用微服务的程度。 注册中心的核心作用是:服务注册和发现。 常见的注册中心: Eureka、Nacos 、Zookeeper 下面我们以 Eureka 注册中心为例,说一下注册中心的作用: 假如我们有一个订单服务 order-service ,需要消费用户服务 u

    2024年02月11日
    浏览(41)
  • Spring Clould 注册中心 - Eureka,Nacos

     视频地址:微服务(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)  微服务涉及的的知识  总结:  邮储的物联网项目实用的是apollo作为配置中心,nocos作为注册中心,feign进行服务间调用   SpringClould 与SpringBoot的版本兼容  clould-demo:demo 提取码:cocf 实现RestTemple也可以通过ht

    2024年02月12日
    浏览(41)
  • SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

    单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点:架构简单;部署成本低(打jar包、部署、负载均衡就完成了) 缺点:耦合度高(维护困难、升级困难,不利于大项目开发) 分布式架构 根据业务功能对系统做拆分,每个业务功能模块作为独立

    2024年02月13日
    浏览(34)
  • eureka迁移到nacos--双服务中心注册

    服务注册中心的迁移有多种方式,官网使用nacos sync,还有民间开发的双注册中心组件eureka-nacos-proxy,但是我用了不太顺利,所以用的是阿里巴巴的双注册中心组件edas-sc-migration-starter spring boot:2.5.3 引入依赖 正常启动即可发现两边都已经注册 如果要用open feign,需要在启动类

    2024年02月10日
    浏览(34)
  • Java分布式微服务1——注册中心(Eureka/Nacos)

    远程调用 向其他服务器请求信息(远程调用) 先在application或者configuration中注册一个Bean方便之后使用(可忽略) 使用restTemplate方法发送请求 getForObject/postForObject/… 1、Eureka注册中心 上面的url是硬编码写死的,很不方便切换,所以使用Eurake注册中心来管理服务提供者的地址 E

    2024年02月14日
    浏览(56)
  • 注册中心ZK、nameServer、eureka、Nacos介绍与对比

    微服务架构是存在着很多跨服务调用,每个服务都存在着多个节点,如果有多个提供者和消费者,当提供者增加/减少或者消费者增加/减少,双方都需要感知发现。所以诞生了注册中心这个中间件。 市面上有很多注册中心,如 Zookeeper、NameServer、Eureka、Nacos,下面我来讲一下它

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包