微服务应用与开发知识点练习【Nacos、Ribbon、Sentinel】

1.微服务架构的主要优势是什么?( )

A.简化开发过程

B.提高单体应用的性能

C.允许各个服务独立开发、部署和扩展

D.减少代码量

  1. 在Spring Boot项目中,配置文件的默认名称是什么?( )

A. config.properties

B. application.properties

C. settings.yaml

D. config.yaml

3.搭建Spring Boot项目的初始文件结构时,哪个文件用于定义项目的依赖?( )

A. README.md

B. application.properties

C. pom.xml

D. Dockerfile

4.搭建高可用的Nacos集群时,建议至少运行多少个Nacos实例?( )

A. 1个

B. 3个

C. 5个

D. 7个

搭建高可用的Nacos集群时,建议至少运行3个Nacos实例的原因是基于分布式系统中的容错原则。在分布式系统中,为了确保服务的高可用性,通常会采用冗余部署的方式。三个实例是能够提供基本的容错能力的最小数量:在这种配置下,如果其中一个实例发生故障,剩余的两个实例仍然可以提供服务,从而保证了系统的正常运行。此外,三个节点也能够通过投票等机制来决定数据的一致性,遵循分布式系统中的CAP原理,通常在实际应用中选择CP(一致性与分区容错性)或AP(可用性与分区容错性),而三个节点是实现这些策略的一个基本配置。因此,虽然不是绝对必须,但3个实例是一个常见的、实用的起点,以平衡资源消耗与系统可靠性。

5.【单选题】 (2分) 在Nacos配置管理中,配置文件的命名空间用于?( )

A. 组织不同环境的配置

B. 控制服务的负载均衡策略

C. 管理数据库连接池

D. 定义日志输出级别

B. 控制服务的负载均衡策略 - 负载均衡策略通常不由配置管理服务如Nacos直接管理配置文件来控制,而是由专门的服务发现与负载均衡组件(如Nginx、Envoy或者Spring Cloud LoadBalancer等)根据服务注册信息来实现。

C. 管理数据库连接池 - 数据库连接池的配置(如HikariCP、Druid等)确实可以通过Nacos这样的配置中心管理,但它们属于应用程序的具体配置内容,而非命名空间直接负责的功能。命名空间更多是逻辑上划分配置集合的范畴,比如区分开发、测试、生产环境的配置。

D. 定义日志输出级别 - 日志输出级别(如DEBUG、INFO、WARN等)也是可以通过Nacos等配置中心管理的配置项之一,帮助应用动态调整日志详细程度,但这不是命名空间的直接职责。命名空间是为了隔离不同环境或模块的配置,而不是直接定义这类具体配置内容。

综上,命名空间在Nacos配置管理中的主要作用是组织和隔离不同的配置集,以便于应对多环境或多租户的场景需求。

6.以下哪个是Ribbon提供的负载均衡策略?( )

A. WeightedResponseTimeRule

B. RoundRobinRule

C. AvailabilityFilteringRule

D. 以上都是

A. WeightedResponseTimeRule(加权响应时间规则): 这种策略会根据服务器的平均响应时间和权重来计算每个服务器的分数,响应时间越快的实例被选中的概率越高。它旨在优化用户体验,给响应速度快的服务更多的请求权重。

B. RoundRobinRule(轮询规则): 最简单的负载均衡策略之一,按照顺序循环地将请求分配给各个实例。每个服务实例依次接收请求,适用于各实例处理能力相近且无特殊需求的场景。

C. AvailabilityFilteringRule(可用性过滤规则): 此策略会先从服务列表中过滤掉那些由于多次访问失败而标记为"circuit tripped"(断路器跳闸)的服务实例,以及那些一直响应慢的服务实例(其响应时间超过了设定的阈值)。之后,再对剩下的实例使用轮询或随机策略进行负载均衡。这一策略有助于避免将流量导向已知有问题的实例,提高了整体服务的可用性。

综上,Ribbon通过提供多种负载均衡策略,使得开发者可以根据实际需求灵活选择最合适的策略来优化服务调用的性能和稳定性。

7.在Ribbon中,配置负载均衡策略的配置文件默认位置是?( )

A. bootstrap.properties

B. ribbon.properties

C. application.properties

D. service-ribbon.properties

在Spring Cloud应用中,默认的配置文件是application.propertiesapplication.yml,其中可以配置Ribbon的负载均衡策略等设置。尽管可以使用特定的配置文件如bootstrap.properties来配置引导阶段的设置,但Ribbon的常规配置一般放在application.properties中。直接说ribbon.propertiesservice-ribbon.properties并不准确,因为虽然可以有专门针对Ribbon的配置文件,但按惯例和Spring Boot的约定,这些配置会合并到application.properties中进行统一管理。

8.Sentinel是用于什么的组件?( )

A. 数据库管理

B. 服务注册

C. 流量控制和熔断降级

D. 日志管理

A. 数据库管理 - 常见的数据库管理工具或框架有:MySQL、PostgreSQL等关系型数据库管理系统(RDBMS),MongoDB、Cassandra等NoSQL数据库,以及MyBatis、Hibernate等ORM(对象关系映射)框架用于Java应用与数据库交互。

B. 服务注册 - 服务注册与发现通常是微服务架构中的关键组件,常用的技术包括:Eureka(由Netflix开源,现已被Spring Cloud放弃维护)、Consul(HashiCorp提供)、Zookeeper(Apache项目,广泛应用于分布式系统)以及Nacos(阿里云开源,集成了配置管理和服务发现功能)。

D. 日志管理 - 日志管理工具帮助收集、存储、分析和检索日志数据,常用的有:Logback和Log4j(Java应用的日志记录库),ELK Stack(由Elasticsearch、Logstash、Kibana组成,用于日志分析和可视化),以及Splunk、Graylog等集中式日志管理系统。

9.在Sentinel中,限流规则可以基于以下哪种维度?( )

A. 请求IP

B. 方法调用

C. CPU使用率

D. 内存使用率

Sentinel中的限流规则主要是针对入口资源(如API接口、方法调用等)来进行流量控制,确保系统的稳定性。基于方法调用的限流是非常常见且直接的实践方式,它允许你针对特定的服务方法设置限流条件,以防止因某个方法被过度调用而导致的服务过载。

至于其他选项:

  • A. 请求IP:虽然理论上可以根据请求来源的IP地址进行限流,但这并不是Sentinel主要宣传或直接支持的限流维度。不过,Sentinel提供了灵活的规则配置能力,用户可能通过自定义规则来实现基于IP的限流。
  • C. CPU使用率、D. 内存使用率:这些更倾向于系统资源监控的指标,Sentinel主要用于流量控制和熔断降级,并不会直接基于CPU使用率或内存使用率来实施限流,但它可以根据系统负载情况(间接关联到CPU和内存使用)来动态调整限流策略,以保护系统资源不被耗尽。

10.通过Sentinel实现熔断时,可以基于以下哪种指标?( )

A. 内存占用率

B. 错误比例

C. 请求IP

D. 网络带宽

Sentinel在实现熔断时,主要关注的是服务的健康状况和异常比例,以此来判断是否需要触发熔断机制以防止服务雪崩。基于错误比例作为熔断指标是因为它直接反映了服务调用的成功率,是一种快速且直观判断服务是否处于异常状态的方法。当错误请求的比例超过预设阈值时,Sentinel会认为该服务可能出现了问题,随即启动熔断机制,暂时拒绝后续对该服务的调用,保护系统其他部分不受影响。

其他选项解释如下:

  • A. 内存占用率:虽然内存占用是系统稳定性的一个重要方面,但Sentinel的熔断机制主要是针对服务调用的异常情况设计的,而不是直接基于资源使用情况。
  • C. 请求IP:请求的来源IP地址通常不用于决定熔断行为,它更多用于追踪和统计来源信息,而非评估服务健康状态。
  • D. 网络带宽:虽然网络带宽对服务性能有直接影响,但 Sentinel 的熔断策略更侧重于服务调用的直接成功率和异常率,而不是底层网络传输的带宽使用情况。
  1. Nacos在服务注册与发现中使用了哪种协议来保持心跳检测?(C )A

A. HTTP

B. TCP

C. UDP

D. GRPC

12.负载均衡的主要目的是?( )

A. 增加应用程序的安全性

B. 提高服务器的利用率

C. 均衡分配请求到多个服务实例

D. 减少代码复杂度

负载均衡的主要目的是通过将接收到的网络请求或服务调用均衡地分发到多个服务实例上,以此来优化资源使用、提高系统响应速度和处理能力,以及确保系统的高可用性和伸缩性。这有助于避免单一服务实例过载,同时提升用户体验。

  1. 在Spring Cloud中,Ribbon是一个什么组件?( )

A. 服务发现组件

B. 负载均衡组件

C. 配置管理组件

D. 日志管理组件

14.使用Ribbon时,如果需要全局定义负载均衡策略,应该配置哪个文件?( )

A. application-global.properties

B. bootstrap.properties

C. application.properties

D. ribbon-global.properties

虽然没有硬性规定必须使用application.properties,但在Spring Cloud应用中,通常会在application.propertiesapplication.yml中定义全局的配置,包括Ribbon的负载均衡策略。这样配置是因为application.properties是Spring Boot应用的核心配置文件,适用于大部分应用级别的配置。不过,对于特定于某一个服务客户端的配置,也可以在对应的服务名下创建<clientName>-ribbon.properties<clientName>-ribbon.yml进行配置。但是,题目问的是全局定义,所以最合适的答案是C。

15.以下哪一条不是微服务的特征?( )

A. 由一组小的服务组成一个完整的应用(或网站)

B. 服务之间通过轻量级的通信机制互相沟通

C. 完全去中心化

D. 所有服务必须一起,同时部署

16.以下哪个命令可以列出Docker中的所有容器?( )

A. docker images

B. docker ps -a

C. docker run

D. docker start

B. docker ps -a

A. docker images:此命令用于列出本地的所有Docker镜像,包括镜像的ID、创建时间、大小以及镜像的标签等信息。它帮助用户管理和查看已下载或构建的Docker镜像。

C. docker run:这是Docker中最常用的命令之一,用于创建一个新的容器并运行一个命令。此命令会检查本地是否存在指定的镜像,如果不存在则会尝试从Docker Hub或其他指定的仓库下载。通过docker run,您可以指定各种运行时参数,如端口映射、环境变量、卷挂载等。

D. docker start:此命令用于启动一个或多个已经停止的容器。您需要指定容器的ID或名称作为参数。与docker run不同,docker start不会创建新的容器,仅是让已存在的容器恢复执行。

17.Ribbon在Spring Cloud中主要用于什么?( )

A. 服务发现

B. 负载均衡

C. 配置管理

D. 日志管理

18.)以下哪个命令可以用于构建Docker镜像?( )

A. docker run

B. docker build

C. docker create

D. docker start

A. docker run
用途: 这个命令用于运行一个容器。您可以使用它来启动一个新的容器并执行命令。如果镜像不存在于本地,Docker 也会尝试从 Docker Hub 上下载该镜像。

C. docker create
用途 : 类似于 docker run,但是该命令仅创建一个新的容器而不启动它。这在您想要设置一些容器配置,但希望稍后手动启动容器时很有用。

D. docker start
用途: 用于启动一个已经被创建但未运行的容器。这个命令需要配合容器的 ID 或者名称来使用。

每个命令服务于容器生命周期的不同阶段,从创建、配置到运行和管理容器。

19.在Spring Boot中整合Nacos注册中心,需要在配置文件中设置哪个属性?( )

A. spring.nacos.url

B. nacos.server-addr

C. server.port

D. eureka.client.serviceUrl

A. spring.nacos.url - 实际上,正确的配置属性应该是 spring.cloud.nacos.discovery.server-addr 而非 spring.nacos.url,这个属性用于指定Nacos服务发现组件连接到Nacos服务器的地址。不过,按照Spring Cloud Alibaba的官方文档和约定,更准确的配置项是 nacos.server-addr,因此A选项表述不够准确。

C. server.port - 此配置项用于设置Spring Boot应用自身运行时的HTTP服务器端口。当应用启动时,它会在指定的端口上监听并接收HTTP请求。这是应用层面的配置,与服务注册或发现无关。

D. eureka.client.serviceUrl - 这个配置项是用于Eureka服务发现客户端的,用来指定Eureka服务器的地址。当你使用Eureka作为服务注册中心时,会通过这个配置告诉应用Eureka服务器的位置。但在整合Nacos作为注册中心的情景下,这个配置与Nacos无关,不会被使用。

20.Ribbon默认采用的负载均衡策略是什么?( )

A.随机策略

B.轮询策略

C.最少连接策略

D.权重策略

Ribbon默认采用的负载均衡策略是轮询策略(Round Robin Rule)。这是因为轮询是最简单且广泛应用的一种负载均衡算法,它公平地将请求依次分配给每个服务实例,每个实例轮流接受请求,从而实现请求的均衡分布。这种策略不考虑服务器的当前连接数或响应时间等因素,仅基于轮流分配的原则,易于理解和实现,特别适用于各服务实例性能相近的场景。其他策略如随机策略、最少连接策略或权重策略可能需要根据具体需求手动配置启用。

21.为了让Ribbon使用自定义的负载均衡策略,可以通过什么方式配置?( )

A. 在代码中硬编码

B. 修改Ribbon源码

C. 在配置文件中指定策略类

D. 使用第三方库

22.Sentinel的主要功能不包括以下哪一项?( )

A. 流量控制

B. 熔断降级

C. 服务发现

D. 系统自适应保护

23.Sentinel的流控规则中,QPS代表什么?( )

A. 请求并发数

B. 每秒查询数

C. 最大线程数

D. 请求大小

24.在Sentinel中配置限流规则时,控制台的默认端口是?( )

A. 8080

B. 8719

C. 9090

D. 7070

  1. 下列描述中,正确的是( )。

A. Nacos具有服务注册、发现和配置中心功能

B. 微服务就是Spring Cloud Alibaba

C. Ribbon提供认证和鉴权功能

D. 以上都不对

26.Spring Cloud Alibaba中的Nacos主要用于什么?( )

A. 数据库管理

B. 服务发现与配置管理

C. 负载均衡

D. 日志管理

27.在Spring Cloud Alibaba中,Sentinel主要用于什么?( )

A. 远程调用

B. 熔断和限流

C. 服务发现

D. 配置管理

28.Nacos的配置管理功能主要用于?( )

A. 负载均衡

B. 持久化存储

C. 管理应用程序的配置

D. 服务限流

29.Nacos支持的配置文件格式不包括以下哪一个?( )

A. properties

B. yaml

C. json

D. xml

Nacos 支持的配置文件格式确实包括 properties、yaml 和 json,因为这些都是常见且便于人阅读和编辑的配置文件格式,适合用于存储和管理微服务的配置信息。相比之下,虽然 XML 也是一种常见的配置文件格式,特别是在Java企业应用中(如Spring框架的XML配置),但Nacos官方文档和实践主要推荐和强调使用 properties、yaml 和 json 格式。因此,选项D "xml" 是Nacos支持的配置文件格式中不直接包含的一种。

30.为了使Spring Boot应用程序使用Nacos进行服务注册,需要引入哪个依赖?( )

A. spring-boot-starter-data-jpa

B. spring-cloud-starter-alibaba-nacos-discovery

C. spring-cloud-starter-gateway

D. spring-boot-starter-web

31.【判断题】 (2分)

Nacos默认支持的通信协议是HTTP/REST。( T)

32.【判断题】 (2分)

Nacos集群的每个节点都需要访问相同的MySQL数据库实例。( T)

以便它们能够共享配置信息和服务发现数据,保持集群间的数据一致性。

33.【判断题】 (2分)

Spring Boot项目中的application.properties文件用于配置项目的各种参数。( T)

一个Docker镜像是一个只读的、层次化的文件系统,包含了运行一个容器所需要的所有内容,包括操作系统、库、框架、运行时环境(如Java、Python等)、应用程序代码及其依赖等。每个镜像都是从基础镜像开始,通过添加新的层来安装软件、复制文件或者设置环境变量等操作,最终构建出一个完整的运行环境。当容器从镜像启动时,Docker会在镜像的顶层添加一个可写层,用于保存容器运行时的任何变化,这样就确保了镜像的原始状态不会被改动,同时也实现了启动容器的快速和一致性。

35.【判断题】 (2分) 在Spring Cloud中,Ribbon用于配置管理。( F)

Ribbon在Spring Cloud中主要用于客户端负载均衡,而不是配置管理。它允许你通过在客户端实现智能的负载均衡算法,从服务实例列表中选择一个服务来调用,而不是直接管理配置。配置管理在Spring Cloud中通常是通过Spring Cloud Config或Spring Cloud Alibaba的Nacos来实现的。

36.【判断题】 (2分) Nacos可以同时作为注册中心和配置中心。(T )

Nacos(Dynamic Naming and Configuration Service)确实可以同时作为服务注册中心和服务配置中心使用。它提供了服务发现、配置管理、服务健康监测等一站式解决方案,支持动态配置服务,这意味着应用程序在运行时可以获取并更新配置,无需重启。

37.【判断题】 (2分) Nacos集群模式下,所有节点都必须在同一个物理服务器上运行。(F )

Nacos集群模式并不要求所有节点都部署在同一个物理服务器上。实际上,为了实现高可用性和负载均衡,通常会将Nacos的多个节点部署在不同的物理服务器或者虚拟机上。这样即使单个服务器发生故障,其他服务器上的Nacos节点仍然可以继续提供服务,保证了系统的稳定性和可靠性。

38.【判断题】 (2分) Spring Boot项目需要额外配置@EnableDiscoveryClient注解才能与Nacos注册中心整合。( F)T

39.【判断题】 (2分) Ribbon不支持基于权重的负载均衡策略。(F )

Ribbon实际上支持基于权重的负载均衡策略,WeightedResponseTimeRule就是一种根据每个服务实例的响应时间和权重来动态调整请求分配的策略。此外,用户还可以通过配置来实现自定义的基于权重的负载均衡策略。因此,Ribbon是支持基于权重的负载均衡的。

40.【判断题】 (2分) Sentinel支持对方法调用进行限流控制。( T)

Sentinel确实支持对方法调用进行限流控制。它是阿里巴巴开源的一款用于流量控制和熔断降级的微服务框架,能够帮助开发者在微服务架构中控制资源的访问,比如对某个方法的调用频率进行限制,以保护系统在高并发情况下的稳定性。

41.【判断题】 (2分) Sentinel支持的流控模式包括直接拒绝和匀速排队。(T )

Sentinel确实支持多种流控(流量控制)模式,其中包括直接拒绝(当请求超出阈值时直接拒绝服务)和匀速排队(平滑控制请求通过的速率,类似于漏桶算法)等策略。这些策略帮助系统在面对突发流量时能够更加稳定地运行,确保服务质量。

42.【判断题】 (2分) Spring Cloud Gateway是用于服务发现的组件。(F )

Spring Cloud Gateway并非直接用于服务发现的组件,尽管它能够与服务发现组件(如Eureka、Consul或Nacos)集成,利用这些服务发现组件提供的信息动态路由到后端服务。Spring Cloud Gateway主要是一个API网关,用于提供路由、过滤和代理功能,以便在微服务架构中实现统一的API管理和请求转发。服务发现是它能够实现动态路由的一个辅助功能,但不是其核心定位。

43.【判断题】 (2分) 使用Dockerfile可以定义如何构建Docker镜像。( T)

使用Dockerfile确实可以定义如何构建Docker镜像。Dockerfile是一个文本文件,其中包含了一系列指令,用户可以指定基础镜像、工作目录、环境变量、运行的命令、添加的文件等内容。通过执行docker build命令并指定Dockerfile所在的路径,Docker就会根据Dockerfile中的指令逐步构建出一个新的镜像

44.【判断题】 (2分) Nacos只能用于Java应用的服务注册和配置管理。( F)

Nacos并不只限于Java应用,虽然它最初由阿里巴巴开发并广泛应用于Java生态中,用于服务发现和服务配置管理。Nacos实际上是语言无关的,只要客户端能够实现与Nacos服务端的HTTP或gRPC协议交互,任何语言编写的应用都可以利用Nacos进行服务注册与发现以及配置管理。因此,Nacos也可以支持其他语言如Python、Go、.NET等的应用。

45.【判断题】 (2分) Ribbon的负载均衡策略只能通过编程方式实现,不能通过配置文件配置。( F)

Ribbon的负载均衡策略既可以通过编程方式实现自定义策略,也可以通过配置文件进行配置。在Spring Cloud应用中,通常在配置文件(如application.yml或application.properties)中设置负载均衡策略,例如,使用ribbon.NFLoadBalancerRuleClassName属性来配置具体的负载均衡策略类名。因此,Ribbon的负载均衡策略不仅限于编程方式实现,也可以灵活地通过配置来调整。

46.【判断题】 (2分)

Ribbon默认的负载均衡策略是轮询(RoundRobinRule)。( T)

47.【判断题】 (2分) Sentinel不支持实时监控和查看流控效果。( F)

Sentinel支持实时监控和查看流控效果。它提供了一个Dashboard,可以用来实时监控各项指标,包括但不限于流量、线程数、响应时间等,并能直观地展示流控、降级等规则的生效情况。因此,开发者可以通过Sentinel的控制台观察到流量控制的实际效果,进行实时监控和管理。

48.【判断题】 (2分) 微服务架构可以有效地提高系统的可靠性和可维护性。( T)

微服务架构通过将大型复杂的应用程序拆分成一组小型、独立的服务来实现,每个服务都运行在其独立的进程中,服务之间通过API进行通信。这种架构有多个优势,包括但不限于:

  1. 模块化:每个服务都是一个独立的单元,负责一组特定的功能,这使得理解和维护变得更为简单。
  2. 故障隔离:如果一个服务出现问题,不会影响到整个系统,从而提高了系统的可靠性和稳定性。
  3. 独立部署:每个服务可以独立部署,不需要协调其他服务的发布,加快了开发和发布的速度。
  4. 技术多样性:不同服务可以选择最适合的技术栈,不必受整个系统的限制。
  5. 可扩展性:可以根据需要独立扩展每个服务,更容易应对高负载情况。

49.【判断题】 (2分) 在Spring Cloud Alibaba中,Nacos仅用于配置管理。(F )

Nacos在Spring Cloud Alibaba中不仅仅用于配置管理,它还是一个更全面的微服务管理平台,提供了以下主要功能:

  1. 服务发现与注册:Nacos允许服务在启动时注册到Nacos服务器,并且能够通过Nacos发现其他服务的位置,这是微服务架构中的关键需求。
  2. 配置管理:确实,Nacos提供了动态配置服务,允许您在微服务架构中以中心化、外部化和动态化的方式管理配置,但这只是其功能之一。
  3. 服务健康监测:Nacos可以监控注册服务的健康状态,提供服务的健康检查功能。
  4. 动态DNS服务:Nacos可以作为DNS服务器使用,为服务提供动态域名解析能力。

50.【判断题】 (2分)

使用Docker可以提高应用程序的可移植性和一致性。(T )

Docker通过将应用程序及其依赖打包进一个轻量级、可移植的容器中,确实可以提高应用程序的可移植性和一致性。这是因为容器化后的应用可以在几乎任何支持Docker的环境中无缝运行,无论是在开发、测试还是生产环境,都能确保应用的行为一致,极大地降低了因环境差异导致的问题。

相关推荐
猿java1 小时前
什么是 Hystrix?它的工作原理是什么?
java·微服务·面试
爱加瓦小瑞小瑞4 小时前
Sentinel服务保护
sentinel
天天扭码7 小时前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
凡人的AI工具箱7 小时前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
跳跳的向阳花7 小时前
03-03、SpringCloud第三章,负载均衡Ribbon和Feign
spring cloud·ribbon·负载均衡
运维&陈同学8 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
码上有前1 天前
解析后端框架学习:从单体应用到微服务架构的进阶之路
学习·微服务·架构
gjh12081 天前
什么是微服务?
微服务
问窗1 天前
微服务中Spring boot的包扫描范围
java·spring boot·微服务
聂 可 以1 天前
IDEA一键启动多个微服务
java·微服务·intellij-idea