java面试题-微服务相关组件

Nacos

1.什么是Nacos?


Nacos是一个开源项目,由阿里巴巴推出,旨在为构建云原生应用提供动态服务发现、配置管理和服务管理平台。Nacos支持微服务的发现、配置和管理,提供简单易用的特性集,能够快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助用户更敏捷和容易地构建、交付和管理微服务平台,构建以“服务”为中心的现代应用架构,例如微服务范式、云原生范式。此外,Nacos提供多语言客户端和基于Spring生态的相关客户端,同时提供了可视化的管理平台。Nacos的设计允许它支持多环境以及多租户数据隔离,通过namespace实现不同环境(如开发、测试、生产等)的配置和服务隔离。Nacos还提供了一组简单易用的特性集,支持动态配置、服务健康监测、动态DNS服务等。

2.Nacos的主要特点有哪些?


Nacos的主要特点包括:

动态服务发现:Nacos支持基于DNS和RPC的服务发现,允许服务提供者使用原生SDK、OpenAPI或独立的Agent注册服务,而服务消费者可以通过DNS或HTTP&API发现服务。

服务健康监测:Nacos提供实时的健康检查机制,能够防止请求发送到不健康的主机或服务实例上,并提供健康检查仪表盘帮助管理服务的可用性及流量。

动态配置服务:Nacos允许中心化、外部化和动态化的管理应用配置和服务配置,消除了配置变更时重新部署应用和服务的需要,使得配置管理更加高效和敏捷。

动态DNS服务:Nacos提供动态DNS服务,简化了负载均衡、流量控制以及数据中心内网的DNS解析服务。

服务及其元数据管理:Nacos从微服务平台建设的视角管理数据中心的所有服务及元数据,包括服务的描述、生命周期、静态依赖分析、健康状态、流量管理、路由及安全策略、SLA以及metrics统计数据。

支持多语言客户端:Nacos提供了多语言客户端支持,包括Java、Go等,以及Spring生态的相关客户端,使得它能够与多种微服务框架和环境无缝集成。

配置快照与容灾:Nacos的客户端SDK会在本地生成配置的快照,当客户端无法连接到Nacos Server时,可以使用配置快照,从而提高了系统的整体容灾能力。

命名空间管理:Nacos支持命名空间的管理,用于进行租户粒度的配置隔离,如开发测试环境和生产环境的资源隔离等。

这些特点共同构成了Nacos强大的功能集,使其成为构建云原生应用的重要工具之一。

3.Nacos支持哪些服务发现和注册方式?


Nacos支持多种服务发现和注册方式,这些方式使得微服务架构中的服务提供者能够将其服务信息注册到Nacos服务器,同时服务消费者能够发现并调用这些服务。以下是Nacos支持的服务发现和注册方式:

基于HTTP的服务注册:服务提供者在启动时,通过HTTP RESTful API将服务实例信息(如服务名称、IP地址、端口号等)发送给Nacos服务器进行注册。

基于DNS的服务发现:Nacos支持基于DNS的服务发现,服务消费者可以通过DNS查询来发现服务提供者的地址信息。

服务健康检查:Nacos提供服务健康检查功能,确保只有健康的服务实例被服务消费者发现和调用。

长连接和心跳机制:服务提供者通过与Nacos服务器建立长连接,并定期发送心跳信息来维持服务实例的在线状态。

服务元数据管理:Nacos允许为服务添加自定义的元数据,这有助于服务间的相互调用和识别。

负载均衡:Nacos支持多种负载均衡策略,如轮询、随机选择、权重策略等,以实现请求的均匀分配。

服务分组和命名空间:通过服务分组和命名空间,Nacos可以更好地组织和管理服务,实现不同环境(如开发、测试和生产环境)的服务隔离。

多语言客户端支持:Nacos提供了多语言客户端支持,使得不同编程语言开发的服务可以无缝集成Nacos进行服务注册和发现。

这些方式共同构成了Nacos强大的服务注册与发现能力,使其成为微服务架构中的重要组件。通过这些机制,Nacos能够支持微服务的动态发现、配置管理、流量管理等关键功能,帮助开发者更高效地构建和管理微服务平台。

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


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

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服务是如何判定服务实例的状态?


通过发送心跳包,5秒发送一次,如果15秒没有回应,则说明服务出现了问题,
如果30秒后没有回应,则说明服务已经停止。

Sentinel

sentinel和Hystix线程隔离有什么区别?

hystix默认是基于线程池实现的线程隔离,每一个被隔离的业务都要创建一个单独的线程池,线程过多会带来额外的CPU开销,性能一般,但是隔离性更强。

Sentinel是基于信息量实现的线程隔离。不用创建线程池。性能较好,但是隔离性一般。

sentinel的限流与Gateway的限流有什么差别?

限流的算法主要有哪些?

1、计数器算法,包括窗口计算器,滑动窗口计数器算法

2、令牌桶算法

3、漏桶算法

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值