微服务之Nacos、Eureka面试题

这篇具有很好参考价值的文章主要介绍了微服务之Nacos、Eureka面试题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Eureka的作用是什么?如何使用?

eureka面试题,面试题,微服务,eureka,java

2、服务消费者如何得知服务提供者的实例地址?

  1. 服务提供者服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端),这个叫服务注册
  2. eureka-server保存服务名称到服务实例地址列表的映射关系。
  3. 服务消费者根据服务名称,拉取实例地址列表,这个叫服务发现或服务拉取。

3、服务消费者如何从多个服务提供者实例中选择具体的实例?

  • 服务提供者从实例列表中利用负载均衡算法选中一个实例地址。
  • 向该实例地址发起远程调用

4、服务消费者如何得知某个服务提供者实例是否依然健康,是不是已经宕机?

  • 服务消费者会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己的状态,成为心跳
  • 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
  • 服务提供者拉取服务时,就能将该故障实例排除了。

5、@LoadBalanced注解是怎么实现的负载均衡功能的?

eureka面试题,面试题,微服务,eureka,java

  • SpringCloud底层其实是利用了一个名为Ribbon的组件,来实现负载均衡功能的。具体流程如下:
    1. 底层采用了一个负载均衡拦截器,拦截我们的RestTemplate请求。
    2. RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service。
    3. DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表。
    4. eureka返回列表,localhost:8081、localhost:8082。
    5. IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081。
    6. RibbonLoadBalancerClient修改请求地址,用localhost:8081替代user-service,得到http://localhost:8081/user/1, 发起真实请求。

探究:默认的负载均衡规则是什么?

ZoneAvoidanceRule:区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询

探究:如何修改负载均衡规则?

  • 设置bean:

    @Bean
    public IRule randomRule(){
        return new RandomRule();
    }
    
  • 配置文件方式(application.yml):

    user-service: # 给某个微服务配置负载均衡规则,这里是user-service服务
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
    

6、为什么第一次微服务请求消耗的时间比较长?

  • Ribbon默认是采用懒加载,即第一次访问时,才回去创建LoadBalanceClient,请求时间会很长。

  • 而饥饿加载在则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载。

    ribbon:
      eager-load:
        enabled: true # 开启饥饿加载
        clients: user-service  # 指定对user-service这个服务进行饥饿加载,可以指定多个服务
    

7、介绍一下Nacos服务分级存储模型?

  • 一个服务可以包含多个集群,例如在杭州,上海,每个集群下可以有多个实例,形成分级模型。
  • 微服务相互访问时,建议访问同集群实例,因为本地访问速度更快,房本集群内不可用时,才去访问其他集群。

探究:如何设置实例的集群属性?

  • 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可。

探究:如何根据同集群优先来实现负载均衡?

  • 默认的ZoneAvoidanceRule并不能根据同集群优先来实现负载均衡。

  • 因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例。

    user-service: # 给某个微服务配置负载均衡规则,这里是user-service服务
      ribbon:
        NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
    
    1. 优先选择统计群服务实例列表。
    2. 本地集群找不到提供者,才去其他集群寻找,并且会报警告
    3. 确定了可用实例列表后,再采用随机负载均衡挑选实例

探究:集群中机器的性能会有差异,如果根据这些差异进行负载均衡调整?

  • Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高
  • 注意:若权重修改为0,则该实例永远不会被访问。因此我们可以将某个服务的权重修改为0,然后进行更新,然后也不会影响到用户的正常访问别的服务集群,之后我们可以给更新后的该服务,设置一个很小的权重,这样就会有一小部分用户来访问该服务,测试该服务是否稳定(类似于灰度测试)。

8、你知道Nacos中的环境隔离吗?

  • Nacos提供了namespace来实现环境隔离功能

    • nacos中可以有多个namespace。
    • namespace下可以由group、service等。
    • 不同的namespace之间相互隔离,例如不同的namespace的服务互相不可见
  • 微服务配置namespace

    spring:
      cloud:
        nacos:
          server-addr: localhost:8848
          discovery:
            cluster-name: HZ
            namespace: ea980a8c-c886-4a2c-8653-d29c62d518bb # 命名空间,填上命名空间ID
    

9、比较Nacos和Eureka的异同点?

eureka面试题,面试题,微服务,eureka,java

  • Nacos与Eureka的共同点
    1. 都支持服务注册服务拉取
    2. 都支持服务提供者心跳方式做健康监测
  • Nacos与Eureka的区别
    1. Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式(但是对服务器压力比较大,不推荐

      spring:
        cloud:
          nacos:
            discovery:
              ephemeral: false # 设置为非临时实例
      
    2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除

    3. Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

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

    5. Nacos支持定时拉取和订阅推送两种模式;Eureka只支持定时拉取模式

10、Nacos如何做到统一配置管理?

  1. 微服务中引入nacos-config依赖,项目启动

    <!--nacos配置管理依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
  2. 微服务中加载bootstrap.yml文件,获取Nacos地址,配置文件id。这里会根据spring.cloud.nacos.server-addr获取Nacos地址,再根据${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。

    spring:
      application:
        name: user-service # 服务名称
      profiles:
        active: dev #开发环境,这里是dev 
      cloud:
        nacos:
          server-addr: localhost:8848 # Nacos地址
          config:
            file-extension: yaml # 文件后缀名
    
  3. 读取本地配置文件application.yml,与Nacos拉取到的配置合并

  4. 创建Spring容器

  5. 加载bean

探究:如何实现热更新?

pattern:
  dateformat: yyyy-MM-dd HH:mm:ss
  • 方式一:在@Value注入的变量类上添加注解@RefreshScope(刷新作用域)

    @Slf4j
    @RestController
    @RequestMapping("/user")
    @RefreshScope
    public class UserController {
    
        @Value("${pattern.dateformat}")
        private String dateformat;
    
        @GetMapping("/test")
        public String test() {
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
        }
    }
    
  • 方式二:使用@ConfigurationProperties注解

    @Component
    @Data
    @ConfigurationProperties(prefix = "pattern")
    public class PatternProperties {
        private String dateformat;
    }
    

11、你知道Nacos配置共享的优先级吗?

  • 当Nacos、微服务配置同时出现相同属性时,优先级也有高低之分
  • 服务名-profile.yaml > 服务名.yaml(不包含环境,因此可以被多个环境共享) > 本地配置
    • user-service-dev.yaml > user-service.yaml > application.yaml

12、SpringCloud常见组件有哪些?

SpringCloud包含的组件很多,有很多功能是重复的。其中最常用组件包括:

  • 注册中心组件:Eureka、Nacos等
  • 负载均衡组件:Ribbon
  • 远程调用组件:OpenFeign
  • 网关组件:Zuul、Gateway
  • 服务保护组件:Hystrix、Sentinel
  • 服务配置管理组件:SpringCloudConfig、Nacos

13、Nacos的服务注册表结构是怎样的?

  • Nacos采用了数据的分级存储模型,最外层是Namespace,用来隔离环境。然后是Group,用来对服务分组。接下来就是服务(Service)了,一个服务包含多个实例,但是可能处于不同机房,因此Service下有多个集群(Cluster),Cluster下是不同的实例(Instance)。
  • 对应到Java代码中,Nacos采用了一个多层的Map来表示。结构为Map<String, Map<String, Service>>,其中最外层Map的key就是namespaceId,值是一个Map。内层Map的key是group拼接serviceName,值是Service对象。Service对象内部又是一个Map,key是集群名称值是Cluster对象。而Cluster对象内部维护了Instance的集合

eureka面试题,面试题,微服务,eureka,java文章来源地址https://www.toymoban.com/news/detail-839495.html

14、Nacos如何支撑数十万服务注册压力?

  • Nacos内部接收到注册的请求时,不会立即写数据,而是将服务注册的任务放入一个阻塞队列就立即响应给客户端。然后利用线程池读取阻塞队列中的任务,异步来完成实例更新,从而提高并发写能力。

15、Nacos如何避免并发读写冲突问题?

  • Nacos在更新实例列表时,会采用CopyOnWrite技术,首先将旧的实例列表拷贝一份,然后更新拷贝的实例列表,再用更新后的实例列表来覆盖旧的实例列表。
  • 这样在更新的过程中,就不会对读实例列表的请求产生影响,也不会出现脏读问题了。

到了这里,关于微服务之Nacos、Eureka面试题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • eureka迁移到nacos--双服务中心注册

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

    2024年02月10日
    浏览(34)
  • Nacos vs. Eureka:微服务注册中心的对比

    Nacos vs. Eureka:微服务注册中心的对比 前言: 欢迎来到本篇博客,今天我们将深入研究两个常用的微服务注册中心:Nacos 和 Eureka。微服务架构的兴起使得服务注册中心成为整个体系中不可或缺的一部分,而选择一个适合自己项目的注册中心显得尤为重要。 1. Nacos 和 Eureka 简介

    2024年02月03日
    浏览(41)
  • 微服务架构的服务注册和发现究竟采用Nacos还是Eureka ?

    微服务架构已经成为了构建分布式应用程序的主要方式之一,而服务注册与发现在微服务架构中扮演着至关重要的角色。在这个领域,有两个非常流行的工具,它们分别是Nacos和Eureka。我们来深入探讨这两者之间的区别,以帮助您在选择适合您项目的服务注册与发现工具时提

    2024年02月02日
    浏览(47)
  • 【微服务开篇-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)
  • 微服务理解、Nacos与Eureka、Feign和Gateway

    目录 分布式架构 微服务是一种经过良好架构设计的分布式架构方案 SpringCloud是目前国内使用最广泛的微服务框架 服务拆分原则 Eureka Ribbon负载均衡 Ribbon负载均衡的原理 Ribbon负载均衡策略IRule Ribbon饥饿加载 Nacos注册中心 Nacos同集群优先的负载均衡 权重配置 环境隔离 Nacos与

    2024年02月06日
    浏览(45)
  • 分布式微服务技术栈-SpringCloud<Eureka,Ribbon,nacos>

    分布式架构的一种 把服务进行 拆分 springcloud 解决了 服务拆分过程中的 治理问题 与单体应用 进行区分 (单体架构 把业务所有功能集中开发,打成一个包部署) 每个模块独立开发和部署(服务集群) 服务之间互相调用 出现分布式技术 Webservice ESB Hession Dubbo 异步通信 消息队

    2024年02月07日
    浏览(50)
  • 微服务SpringCloudday1 认识微服务与服务注册(Eureka与nacos)

    随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 了解微服务架构的优缺点 单体架构 :将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点: 架构简单 部署成本低

    2024年02月12日
    浏览(33)
  • Nacos服务注册和配置中心(Config,Eureka,Bus)1

            Spring Cloud是若干个框架的集合,包括spring-cloud-config、spring-cloud-bus等近20个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案, Spring Cloud Alibaba可以集成Zuul、Gateway等网关组件,也可集成R

    2024年02月16日
    浏览(34)
  • Nacos服务注册和配置中心(Config,Eureka,Bus)2

            Nacos领域模型,Namespace命名空间、Group分组、集群这些都是为了进行归类管理,把服务和配置文件进行归类,归类之后就可以实现一定的效果,比如隔离。对于服务来说,不同命名空间中的服务不能够互相访问调用         Namespace:命名空间,对不同的环境进行

    2024年02月16日
    浏览(53)
  • Nacos vs Eureka的区别:微服务注册中心的选择

    摘要:本文将详细讲解Nacos和Eureka两个微服务注册中心的区别,并提供代码示例,帮助读者选择合适的注册中心来管理他们的微服务架构。 引言: 在微服务架构中,注册中心是一个关键组件,用于管理和协调各个微服务实例的注册和发现。Nacos和Eureka是两个常见的开源微服务

    2024年02月03日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包