Nacos基础知识及面经积累

Nacos基础知识及面经积累

一、基本架构及概念

image-20240331151249849

  • 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:控制台
1.注册中心的原理

服务注册中心,它是服务,其实例及元数据的数据库。服务实例在启动时注册到服务注册表,并在关闭时注销。服务和路由器的客户端查询服务注册表以查找服务的可用实例。服务注册中心可能会调用服务实例的健康检查 API 来验证它是否能够处理请求。

img

二、经典面试题

1.Nacos中的保护阈值的作用是什么?

假如现在有一个服务,本来有10个实例,但是现在挂掉了8个,剩下2个正常实例,此时本来由10个实例处理的流量,就全部交给这个两个正常实例来处理了,此时这两个实例很有可能是处理不过来的,最终导致被压垮,为了应对这种情况,Nacos提供了保护阈值这个功能,我们可以给某个服务设置一个0-1的阈值,比如0.5,那就表示,一旦实例中只剩下一半的健康实例了,比如10个实例,只剩下5个健康实例了,那么消费者在进行服务发现时,则会把该服务的所有实例,也包括不健康的实例都拉取到本地,然后再从所有实例中进行负载均衡,选出一个实例进行调用,在这种情况下,选出来的即可能是一个健康的实例,也可能是挂掉的实例,但是通过这种方式,很好的保护的剩下的健康实例,至少保证了一部分请求能正常的访问,而不至于所有请求都不能正常访问,这就是Nacos中的保护阈值,同时,这个功能在Spring Cloud Tencent中叫全死全活。

2.Nacos中的负载均衡是怎么样的?

Nacos的负载均衡指的是,在进行服务发现时进行负载均衡,正常情况下,在进行服务发现时,会根据服务名从Nacos中拉取所有的实例信息,但是Nacos中提供了一个功能,就是可以在拉取实例时,可以根据随机策略只拉取到所有实例中的某一个,这就是Nacos中的负载均衡,它跟Ribbon的负载均衡并不冲突,可以理解为Ribbon的负载均衡是发生在Nacos的负载均衡之后的。

3.Nacos的就近访问是什么意思?

首先,在Nacos中,一个服务可以有多个实例,并且可以给实例设置cluster-name,就是可以再进一步的给所有实例划分集群,那如果现在某个服务A想要调用服务B,那么Naocs会看调用服务A的实例是属于哪个集群的,并且调用服务B时,那就会调用同样集群下的服务B实例,根据cluster-name来判断两个实例是不是同一个集群,这就是Nacos的就近访问。

4.你是怎么理解CAP理论的?

CAP理论是分布式领域中最为重要的理论,CAP理论可以理解为目前硬件条件下对于分布式架构的一种限制,就是对于一个分布式系统,只能保证AP或CP,而不能同时保证CAP,首先对于一个分布式系统,P,也就是分区容错性是一定要保证的,对于一个分布式系统,得保证在网络出现分区后,分布式系统仍然能工作,所以得保证P,只不过当出现网络分区后,整个分布式系统如果想要保证数据一致性,那么就要损耗系统可用性,或者如果想要保证系统的可用性,就不能保证系统的一致性,这里说的是强一致性,因为如果网络出现问题,分布式系统中的数据就无法进行及时的同步,如果要求强一致性,那么就只能等网络好了之后,数据同步好了之后,才能提供给用户使用,同理,如果要求网络出现后问题,系统要能使用,那就可能数据会不一致,所以对于一个分布式系统,目前来说只能保证CP或AP。

5.Nacos中保证的是CP还是AP?

通常我们说,Nacos技能保证CP,也能保证AP,具体看如何配置,但其实只不过是Nacos中的注册中心能保证CP或AP,Nacos中的配置中心其实没什么CP或AP,因为配置中心的数据是存在一个Mysql中的,只有注册中心的数据需要进行集群节点之间的同步,从而涉及到是CP还是AP,如果注册的节点是临时节点,那么就是AP,如果是非临时节点,那么就是CP,默认是临时节点。

6.如何理解Nacos中的命名空间?

命名空间,也就是namespace,其实这个概念并不是Nacos中独有的,在Nacos中,不管是配置还是服务,都是属于某一个命名空间中的,默认情况下都是属于pulibc这个命名空间中的,我们可以在Nacos中新增命名空间,也就相当于开辟了另外一套存放服务和配置的地方,命名空间之间是独立的,完全不冲突的,所以我们可以利用Nacos中的命名空间来实现不同环境、不同租户之间的服务注册和配置。

7.你觉得注册中心应该是CP还是AP?

我觉得大部分情况下,注册中心应该是AP,如果注册中心是CP的,那么表示,当我们向注册中心注册实例或移除实例时,都要等待注册中心集群中的数据达到一致后,才算注册或移除成功,而这是比较耗时的,随着业务应用规模的增大,应用频繁的上下线,那么就会导致注册中心的压力比较大,会影响到服务发现的效率以及服务调用了,而如果注册中心是AP的,那么注册中心集群不管出现了什么情况,都是可以提供服务的,就算集群节点之间数据出现了不一致,对于业务应用而言,可能拉取到了一个已经下线了的服务节点,但是现在一般的微服务框架或组件都提供了服务容错和重试功能,也可以避免这个问题,而如果是AP,对于注册中心而言就不需要消耗太多的资源来实时的保证数据一致性了,保证最终一致性就可以了,这样注册中心的压力会小一点,另外像Zookeeper来作为注册中心,因为Zookeeper保证的就是CP,但是如果集群中如果大多数节点挂掉了,就算还剩下一些Zookeeper节点,这些节点也是不能提供服务的,所以这个也不太合适,所以综合来看,注册中心应该保证AP会更好,就像Euraka、Nacos他们默认保证的就是AP。

8.nacos 作为配置中心要配置什么

Nacos作为配置中心,需要配置以下内容:

  1. **数据源配置:**包括数据库连接信息、用户名、密码等。这些信息将用于Nacos存储配置数据的数据库。
  2. **配置项:**定义需要在Nacos中管理和存储的配置项。可以根据业务需求自定义配置项的名称、类型、默认值等。
  3. 集群配置:如果需要使用Nacos作为分布式配置中心,需要配置集群信息,包括集群节点的IP地址、端口号等。
  4. 权限配置:根据需求设置不同用户或角色的权限,以保证配置数据的安全性。
  5. 监控配置:可以配置Nacos的监控指标,包括监控数据的收集周期、存储方式等。
  6. 通知配置:可以配置Nacos在配置变更时发送通知的方式,比如邮件、短信等。
  7. **注册中心配置:**如果需要将Nacos用作服务注册中心,需要配置相关信息,如注册中心的地址、端口等。
9.为什么要将服务注册到nacos?
  1. 服务发现与负载均衡:Nacos可以作为服务注册中心,帮助应用实现服务发现和负载均衡。通过在Nacos上注册服务,其他应用可以方便地发现和调用该服务,提高了应用的可用性和可扩展性。
  2. 动态配置管理:Nacos提供了动态配置管理功能,可以动态地修改应用的配置信息,而无需重启应用。这样可以方便地对应用进行配置调整,提高了配置的灵活性和可管理性。
  3. 服务健康检查:Nacos可以定期检查已注册的服务的健康状态,及时发现故障或不可用的服务,并对其进行下线或重启操作。这样可以提高服务的稳定性和可靠性。
  4. 跨区域部署:Nacos支持多区域的服务注册和发现,可以方便地将服务部署到不同的区域,实现跨区域的服务调用和负载均衡。这对于构建分布式系统和实现高可用架构非常有价值。

总而言之,将服务注册到Nacos可以提供服务发现、负载均衡、动态配置管理、服务健康检查等功能,帮助应用实现高可用、可扩展和灵活的架构。

10.Nacos服务是如何判定服务实例的状态?

Nacos服务通过以下几个步骤来判定服务实例的状态:

  1. **心跳检测:**Nacos会定期向每个注册的服务实例发送心跳请求,以检测其是否存活。如果Nacos在一段时间内没有收到实例的心跳回复,就会将该实例标记为不可用。
  2. 健康检查:Nacos可以配置一些健康检查的规则,例如HTTP接口的返回状态码、响应时间等。Nacos会定期调用这些接口,根据返回结果来判断服务实例的健康状况。如果实例返回的结果不符合预期的健康规则,Nacos会将其标记为不可用。
  3. **负载均衡:**Nacos还会根据实例的负载情况来判定其状态。如果某个实例的负载过高,超过了一定的阈值,Nacos可能会将其标记为不可用,以避免过多的请求落在该实例上,导致服务质量下降。

需要注意的是,Nacos的状态判定是基于一定的策略和规则进行的,具体的判定方式可以根据实际需求进行配置和扩展。以上是一般情况下Nacos服务判定服务实例状态的方式,避免了敏感内容的提及。

11.Nacos服务消费方是如何调用服务提供方的服务的?

Nacos是一个用于服务发现和配置管理的开源平台,可以帮助服务消费方找到并调用服务提供方的服务

在Nacos中,服务提供方会将自己提供的服务注册到Nacos的服务注册中心。服务消费方需要通过Nacos的服务发现功能,从注册中心中获取可用的服务实例信息

服务消费方可以通过以下步骤来调用服务提供方的服务:

  1. 配置Nacos客户端:服务消费方需要在自己的应用中引入Nacos客户端依赖,并配置Nacos服务注册中心的地址
  2. 服务发现服务消费方使用Nacos客户端提供的API,向Nacos注册中心发起服务发现请求。Nacos将返回可用的服务实例列表,包括实例的IP地址和端口号。
  3. **负载均衡:**服务消费方可以使用负载均衡算法从服务实例列表中选择一个实例来调用服务。常见的负载均衡算法有轮询、随机等。
  4. 调用服务:服务消费方使用选定的服务实例的地址和端口号,通过网络请求的方式调用服务提供方的接口。

总的来说,Nacos帮助服务消费方在运行时动态地发现和调用服务提供方的服务,实现了服务间的解耦和灵活性。同时,通过合适的配置和负载均衡算法,Nacos还能提高系统的可靠性和性能。

12.Nacos中的负载均衡底层是如何实现的?

Nacos中的负载均衡底层是通过一种称为”权重轮询算法”的机制来实现的。这种算法会根据服务实例的权重值,按照一定的顺序依次将请求分发给各个实例。具体而言,Nacos会维护一个可变的权重总和,然后根据每个实例的权重值进行相应的调整。当有新的请求到达时,Nacos会选择一个权重值最大的可用实例,将请求发送给该实例,并相应地减少该实例的权重值。这样可以实现请求在各个实例之间的均衡分发,提高系统的整体性能和可靠性。

值得注意的是,Nacos还支持其他的负载均衡算法,如随机算法和一致性哈希算法,这些算法可以根据具体的场景和需求来选择。通过灵活配置和选择适当的负载均衡算法,Nacos可以满足不同服务的负载均衡需求,提供高效稳定的服务调用能力。

13.Ribbon 是什么?Ribbon 可以解决什么问题?

Ribbon 是一个开源的负载均衡器和客户端负载均衡库,由 Netflix 公司开发。它主要用于帮助开发人员在分布式系统中实现客户端负载均衡,提供了一种简单而灵活的方式来管理和分发请求。

Ribbon 可以解决以下问题:

· 负载均衡:Ribbon 可以将请求均匀地分发到多个服务实例上,以实现负载均衡。它可以根据不同的负载均衡策略(如轮询、随机等)选择合适的服务实例,从而提高系统的可用性和性能。

· 故障转移:当某个服务实例不可用时,Ribbon 可以自动切换到其他可用的实例上,确保系统的稳定性和可靠性。这种故障转移的机制可以有效地解决单点故障和服务不稳定的问题。

· 服务发现:Ribbon 可以与服务注册中心(如 Eureka)结合使用,自动地从注册中心获取可用的服务列表。这样,开发人员不需要手动配置服务的地址和端口,而是通过服务名来访问服务,使得服务的管理更加简单和灵活。

· 客户端负载均衡:Ribbon 不仅仅可以用于服务间的负载均衡,还可以在客户端级别实现负载均衡。例如,在微服务架构中,一个服务可能依赖于多个其他服务,Ribbon 可以帮助该服务在调用依赖服务时实现负载均衡,提高系统的吞吐量和性能。

总而言之,Ribbon 是一个强大而灵活的负载均衡器和客户端负载均衡库,可以帮助开发人员解决分布式系统中的负载均衡、故障转移和服务发现等问题,提高系统的可用性和性能。

14.Ribbon负载策略都有哪些?

Ribbon是一个负载均衡器,它用于在微服务架构中分发请求到不同的服务实例上。它提供了8种负载策略,这些策略包括:

  1. RandomRule(随机策略):随机选择一个可用的服务实例来处理请求。
  2. RoundRobinRule(线性轮询策略):按照轮询的方式依次选择可用的服务实例来处理请求。
  3. RetryRule(重试策略):在RoundRobinRule的基础上,增加了重试机制,如果请求失败,则会尝试重新选择一个可用的服务实例。
  4. WeightedResponseTimeRule(加权响应时间策略):根据服务实例的响应时间和实例的权重来选择一个可用的服务实例,响应时间越短,权重越高。
  5. BestAvailableRule(最空闲策略):选择一个最空闲的可用服务实例来处理请求,忽略响应时间和权重。
  6. ZoneAvoidanceRule(区域感知轮询策略):根据服务实例所在的可用区域来选择一个可用的服务实例,以实现区域间的负载均衡。
  7. AvailabilityFilteringRule(可用性过滤策略):根据服务实例的可用性来选择一个可用的服务实例,忽略响应时间和权重。
  8. ClientConfigEnabledRoundRobbinRule(客户端配置启动线性轮询策略):继承该策略默认的 choose() 方法就能实现线性轮询机制。
15.@LoadBalanced的作用是什么?

@LoadBalanced的作用是为了实现负载均衡。负载均衡是指将请求分发到多个服务器上,以达到分担负载、提高系统性能和可靠性的目的。

在分布式系统中,当有多个服务提供相同的功能时,可以使用负载均衡来将请求均匀地分发到这些服务上。@LoadBalanced是一个注解,通常用于在Spring Cloud中配置和使用负载均衡的功能。

通过在服务调用的代码中添加@LoadBalanced注解,我们可以利用Spring Cloud提供的负载均衡算法,自动将请求发送到多个服务实例中的一个。这样可以避免某个服务实例过载,提高系统的吞吐量和稳定性。

@LoadBalanced的作用是将负载均衡的责任交给了Spring Cloud,开发人员无需关注具体的负载均衡算法和实现细节。只需要通过@LoadBalanced注解,就可以让系统自动选择可用的服务实例,并将请求发送到其中之一。

总结来说,@LoadBalanced的作用是简化负载均衡的配置和使用,提高系统的可靠性和性能。在实际开发中,我们可以将其应用于微服务架构中的服务调用,以实现负载均衡和高可用性。

16.Nacos设置治理模式子配置?(情况差别,设置差别)

Nacos是一个开源的分布式服务发现和配置管理平台,它为微服务架构下的服务治理提供了支持。Nacos的设置治理模式可以根据不同的情况和需求进行差别化的配置。

首先,根据不同的使用场景,Nacos可以设置不同的治理模式。比如,在生产环境中,我们可以选择将Nacos配置为高可用模式,以确保服务的稳定性和可靠性。而在开发和测试环境中,可以选择较为简单的单机模式,以减少部署和维护的复杂性。

其次,根据不同的需求,Nacos可以设置不同的治理策略。例如,可以根据服务的重要性和访问频率,设置服务的权重和负载均衡策略,以优化服务的性能和可用性。同时,Nacos还提供了服务熔断和降级的功能,可以根据服务的健康状态和负载情况,动态调整服务的访问策略,以防止故障的扩散和影响整体系统的稳定性。

此外,Nacos还支持多租户模式的配置,可以根据不同的用户和团队,设置不同的访问权限和配置管理策略,以确保系统的安全性和隔离性。同时,Nacos还提供了多种存储模式的选择,可以根据实际需求,选择适合的存储方式,以满足不同规模和性能要求的系统。

总而言之,Nacos的设置治理模式可以根据不同的情况和需求进行差别化的配置,以满足不同环境和业务场景下的服务治理需求,提供稳定、可靠和高效的服务。

17.Nacos设置中的治理模式子配置是怎么样的?(namespace,group,service/data-id)

Nacos中的治理模式可以通过命名空间(namespace)分组(group)服务/数据ID(service/data-id)来进行设置。

命名空间(namespace)是Nacos中的一个隔离单元,用于将**服务实例和配置信息进行隔离。**每个命名空间都有独立的配置和服务注册表。通过命名空间,可以实现多租户的隔离和管理。可以根据实际需求创建不同的命名空间,将不同的服务和配置信息进行分组管理。

分组(group)是对相同服务的实例进行分类和管理。在同一个命名空间内,可以为相同的服务创建不同的分组,以便更好地组织和管理服务实例。

服务/数据ID(service/data-id)是在Nacos中用于**标识一个具体的服务或配置信息的唯一标识符。**通过服务/数据ID可以定位到特定的服务实例或配置信息,进行相应的操作和管理。

通过使用命名空间、分组和服务/数据ID这些设置,可以在Nacos中实现对服务实例和配置信息的精细化管理和治理。这些设置可以帮助用户更好地组织和管理不同的服务和配置信息,提高系统的可维护性和可管理性。

18.Nacos客户端能否能够读取共享设置?(能够)

是的,Nacos客户端可以读取共享设置。Nacos提供了一个可选的共享配置模块,允许用户将配置信息共享给其他应用程序。当一个应用程序需要访问共享配置时,它可以使用Nacos客户端来读取这些共享设置。这样,不同的应用程序就可以共享同一个配置,提高了配置的复用性和灵活性。同时,Nacos客户端还支持根据需求动态刷新配置,确保应用程序能够及时获取最新的配置信息。因此,Nacos客户端能够很好地满足共享设置的读取需求,提高了配置管理的效率和可靠性。

19.在Nacos中效劳供给者是怎样向Nacos注册核心(Registry)续约的?

在Nacos中,服务提供者可以通过以下步骤向Nacos注册中心进行续约:

  1. 配置服务提供者的注册信息:服务提供者需要在配置文件中指定Nacos注册中心的地址和端口号。这些信息将用于与注册中心建立连接。
  2. 建立与注册中心的连接:服务提供者通过使用Nacos提供的客户端SDK,与注册中心建立连接。SDK会提供相应的API来实现此功能。
  3. 注册服务:服务提供者将自己的服务信息注册到Nacos注册中心。这些信息包括服务名称、IP地址、端口号等。注册中心将会保存这些信息,并提供给服务消费者使用。
  4. 续约服务:在服务提供者启动后,它会定时向注册中心发送心跳请求,以告知注册中心该服务仍然可用。这个过程被称为续约。续约的频率可以通过配置进行调整。
  5. 处理续约失败:如果服务提供者的续约请求失败,可能是由于网络故障或注册中心不可用等原因。在这种情况下,服务提供者将会尝试重新建立与注册中心的连接,并重新进行续约操作。

并提供给服务消费者使用。
4. 续约服务:在服务提供者启动后,它会定时向注册中心发送心跳请求,以告知注册中心该服务仍然可用。这个过程被称为续约。续约的频率可以通过配置进行调整。
5. 处理续约失败:如果服务提供者的续约请求失败,可能是由于网络故障或注册中心不可用等原因。在这种情况下,服务提供者将会尝试重新建立与注册中心的连接,并重新进行续约操作。

通过以上步骤,服务提供者可以向Nacos注册中心注册并维持服务的可用性。这样,服务消费者就可以通过Nacos注册中心获取到可用的服务列表,并进行相应的调用。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于Nacos面试题及答案: 1. 什么是NacosNacos是一个开源的分布式服务发现、配置管理和服务治理平台,它提供了服务注册和发现、配置管理、服务路由和流量管理等功能,是构建微服务架构的重要组成部分。 2. Nacos的主要特点有哪些? Nacos具有以下特点: - 功能丰富:Nacos提供了服务注册和发现、配置管理、服务路由和流量管理等功能,能够满足企业构建微服务架构的需求。 - 可扩展性强:Nacos支持多数据中心的部署和插件机制,可以方便地扩展和定制。 - 高可用性和可靠性:Nacos采用了去中心化的设计和Raft算法,保证了服务注册和发现、配置管理的高可用性和可靠性。 - 易于使用:Nacos提供了可视化的Web界面和开放的API接口,可以方便地进行服务注册和发现、配置管理等操作。 - 社区活跃:Nacos有一个活跃的开源社区,能够及时解决问题和提供技术支持。 3. Nacos支持哪些服务发现和注册方式? Nacos支持基于HTTP和RPC协议的服务发现和注册方式,可以使用RESTful API或Dubbo等框架进行服务发现和注册。 4. Nacos的配置管理如何实现? Nacos的配置管理通过配置中心实现,可以将应用程序所需的配置信息统一管理,并提供实时的配置变更通知功能,支持多种配置格式(如properties、XML、JSON等)。 5. Nacos的自我保护机制是什么? Nacos的自我保护机制是指,在Nacos集群中,当有大量服务实例下线或网络故障时,Nacos会开启自我保护机制,保证服务注册和发现的正常运行。 6. Nacos支持哪些配置格式? Nacos支持多种配置格式,包括properties、XML、JSON、YAML等。 7. Nacos如何实现服务路由? Nacos可以通过服务网关、DNS或API网关等方式实现服务路由。 8. Nacos如何实现流量管理? Nacos可以通过流量控制、负载均衡和熔断降级等方式实现流量管理。 9. Nacos的集群模式有哪些? Nacos的集群模式包括单机模式、集群模式和多数据中心模式。 10. Nacos和Zookeeper、Consul、Eureka服务发现和配置管理工具有什么区别? Nacos和这些工具的区别在于数据一致性的类型。Eureka是AP类型的,支持最终一致性;Zookeeper和Consul是CP类型的,支持强一致性;而Nacos支持CP AP模式,可以根据配置识别为CP模式或AP模式,默认是AP模式。 希望以上回答能够帮助你更好地理解Nacos。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Nacos 相关面试题及答案](https://blog.csdn.net/weixin_44603464/article/details/130136228)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值