Nacos经典7道面试题

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

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

我的公众号:IT周瑜,里面有更多经典面试题

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

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

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

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

你是怎么理解CAP理论的?

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

Nacos中保证的是CP还是AP?

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

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

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

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

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

### 关于Nacos的Top 10 面试问题及解答 #### 1. Nacos 是什么? Nacos 致力于帮助开发者发现、配置和管理微服务。它提供了一组简单易用的功能集合,用于实现动态服务发现和服务健康监测等功能[^2]。 #### 2. Nacos 支持哪些注册中心功能? Nacos 提供的服务发现机制允许客户端通过 DNS 或 HTTP 接口来查询和监听服务实例的变化情况。这使得应用程序能够轻松找到所需的服务并与其通信。 #### 3. 如何使用 Nacos 进行配置管理? 借助 Nacos 的配置管理特性,可以集中化存储应用的所有环境下的配置文件,并支持实时更新而无需重启服务;同时也提供了版本控制以及回滚能力以保障生产安全。 ```java // 获取默认命名空间下名为 "example" 的配置项 String dataId = "example"; Properties properties = new Properties(); properties.put(PropertyKeyConst.SERVER_ADDR, "localhost:8848"); ConfigService configService = NacosFactory.createConfigService(properties); String content = configService.getConfig(dataId, "DEFAULT_GROUP", 5000L); System.out.println(content); ``` #### 4. Nacos 中的服务发现原理是什么样的? 当一个服务向 Nacos 注册之后,其它消费者就可以通过 API 查询到该服务的信息(如 IP 地址)。每当有新的实例加入或离开集群时,这些变动都会被及时通知给所有订阅者。 #### 5. 怎样保证 Nacos 自身高可用性? 为了提高系统的可靠性,建议部署多个 Nacos 节点组成集群模式运行。此外还应该考虑数据持久化方案的选择,比如 MySQL 数据库等外部存储介质。 #### 6. Nacos 和 Eureka 主要区别有哪些方面? 两者都属于 Spring Cloud 生态圈内的组件之一,但在设计理念上有所不同:Eureka 更加侧重于 Netflix OSS 微服务体系架构中的角色定位;相比之下,Nacos 则更加强调统一管理和多场景适用性的特点。 #### 7. 使用 Nacos 实现灰度发布的方式有哪些? 可以通过设置不同的权重比例让部分流量流向新版本的应用程序上来达到渐进式升级的效果。另外也可以利用命名空间隔离不同环境之间的资源访问权限从而更好地支撑蓝绿/金丝雀发布的实施过程。 #### 8. 如果遇到 Nacos 客户端无法连接服务器的情况怎么办? 首先要确认网络连通性和防火墙策略是否正常工作;其次查看日志记录排查是否存在异常错误提示信息;最后尝试调整参数配置优化性能表现,例如增加超时时间或者减少重试次数等等措施加以解决。 #### 9. 在大规模分布式环境中怎样评估 Nacos 表现? 随着业务规模不断扩大,应当密切关注各项指标变化趋势,包括但不限于响应延迟、吞吐量大小等方面的表现状况。同时也要定期进行压力测试验证其极限承载能力和稳定性水平能否满足实际需求。 #### 10. 对于新手来说学习 Nacos 建议从哪里入手比较好呢? 官方文档无疑是最好的起点之一,里面不仅涵盖了详细的安装指南和技术细节说明等内容,而且还有丰富的案例分析可供参考借鉴。除此之外,在线社区论坛也是不容错过的好去处,那里聚集了许多经验丰富的从业者愿意分享自己的见解心得[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值