zoukankan      html  css  js  c++  java
  • SpringCloud经典面试题

    SpringCloud经典面试题

    1. 什么是SpringCloud?

      SpringCloud流应用程序启动器是基于SpringBoot的Spring集成应用程序,提供于外部系统的集成。SpringCloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序

    2. 使用SpringCloud有什么优势?

      1. 与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销、宽带问题、安全问题

      2. 服务发现-服务发现工具管理集群中的流程和服务如何查找和相互交谈。它涉及一个服务目录,在目录中注册服务,然后能够查找并连接到该目录中的服务

      3. 冗余-分布式中的冗余问题

      4. 负载均衡-负载均衡改善跨多个计算机资源的工作负荷,诸如计算机、计算机集群、网络链路、中央处理单元或磁盘驱动器的分布

      5. 性能-由于各种运营开销导致的性能问题

      6. 部署复杂性-Devops技能的要求

    3. 服务注册和发现是什么意思?SpringCloud如何实现?

      当开始一个项目时,我们通常会在属性文件中进行所有的配置,随着越来越多发服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会发生问题。Eureka服务注册和发现可以在这种情况下提供帮助。由于所有服务都在Eureka服务器上注册并通过Eureka服务器完成查找,因此无需处理服务地点的任何更改和处理

    4. 负载均衡的意义是什么?

      在计算中,负载均衡可以改善跨计算机、计算机集群、网络连接、中央处理单元或磁盘驱动器等多种计算资源的 工作负载分布。负载平衡旨在优化资源使用、最大化吞吐量、最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性,负载均很通常涉及到专用软件或者硬件,例如多层交换机或域名系统服务器进程

    5. 什么是Hystrix?它如何实现容错?

      Hystrix是一个延迟和容错库,旨在隔离远程系统、服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协做。

    6. 什么是服务熔断?什么是服务降级?

      熔断机制是应对雪崩效应的一种微服务链路保护机制,当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回"错误"的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制由Hystrix实现,Hystrix会监控微服务调用的状况,当失败的调用到一定的阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制

      服务降级,一般是从整体负荷考虑,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强

      Hystrix相关注解

      @EnableHystrix:开启熔断

      @HystrixCommand(fallbackMethod="XXX"):声明一个失败回滚处理函数XXX,当被注解的方法执行超时时(默认是1000毫秒),就会执行fallback函数,返回错误提示

    7. Eureka和Zookeeper(zk)都可以提供服务注册与发现的功能,请说说区别?

      1. zk保证了cp(C:一致性,P:分区容错性),当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但是不能容忍直接down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但是zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新选leader。问题在于,选取leader时间过长,30~120s,并且选取期间zk集群都不可用,这样就会导致在选取期间注册服务瘫痪。在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够恢复,但是漫长的选取时间导致的注册长期不可用是不能容忍的

      2. Eureka保证了CA(C:一致性;A:高可用),Eureka各个节点是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点仍然可以提供注册和查询服务。而Eureka的客户端向某个Eureka注册或发现时发生连接失败,则会自动切换到其他节点,只要有一台Eureka还在,就能够保证注册服务可用,只是查到的信息可能不是最新的。除此之外,Eureka还有自我保护机制如果在15分钟内超过85%的节点没有正常的心跳,那么Eureka就认为客户端与注册中心发生看网络故障,此时会出现以下几种情况:

        1. Eureka不再从注册列表中移除因为长时间没有收到心跳而应该过期的服务

        2. Eureka仍然能够接受新服务的注册与查询请求,但是不会被同步到其他节点上(即保证当前节点仍然可用)

        3. 当网络稳定时,当前实例新的注册信息会被同步到其他节点。因此,Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zk那样使得整个服务瘫痪

    8. 说一下RPC的实现原理

      首先需要有处理网络连接通讯的模块,负责 连接建立、管理和消息的传输。其次需要有编解码的模块,因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列话,剩下的就是客户端和服务端的部分,服务器端暴露要开放的服务接口,客户调用服务接口的一个代理实现,这个代理实现负责收集数据、编码并传输给服务器然后等待结果返回

    9. Rest和RPC对比

      1. RPC只要的缺陷是服务提供方和调用方之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突

      2. REST是轻量级接口,服务的提供和调用不存在代码之间的耦合,只需要一个约定进行规范

    10. 常见的微服务技术栈

      1. 服务开发:SpringBoot 、Spring、 Spring MVC

      2. 服务配置与管理:Netfix公司的Archaiusm,阿里的Diamond

      3. 服务注册与发现:Eureka和zookeeper

      4. 服务调用:Rest 、RPC、gRPC

      5. 服务熔断器:Hystrix

      6. 服务负载均衡:Ribbon、Nginx

      7. 服务接口调用:feign

      8. 消息队列:kafka、Rabbitmq、activemq

      9. 服务配置中心管理:SpringCloudConfig

      10. 服务路由:Zuul

      11. 事件消息总线:SpringCloudBus

    11. SpringCloud如何实现服务的注册?

      1. 服务发布时,指定对应的服务名将服务注册到注册中心(Eureka、zookeeper)

      2. 注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或者feign进行服务直接的调用发现

    12. Ribbon:是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。feign默认集成了ribbon

    13. feign的优点是什么?

      1. feign采用的是基于接口的注解

      2. feign整合了ribbon,具有负载均衡的能力

      3. 整个了Hystrix,具有熔断的能力

      4. 使用:

        1. 添加Pom依赖

        2. 启动类添加@EnableFeignClients

        3. 定义一个接口@FeginClient(name="XXX")指定调用那个服务

    14. Ribbon和Feign的区别

      区别RibbonFeign
      服务 调用其他服务 调用其他服务
      启动类注解不同 @RibbonClient @EnableFeignClients
      服务指定的位置不同 在@RibbonClient注解上声明 在定义抽象方法的接口中使用@FeignClient
      调用方式不同 需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤很繁琐。 Feign需要将调用的方法定义成抽象方法即可
    15. 什么是SpringCloudBus?

      SpringCloudBus将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务之间的通讯,也可用于监控。如果修改 了配置文件,发送一次请求,所有的客户端便会重新读取配置文件

      使用:

      1. 添加依赖

      2. 配置Rabbitmq

    16. SpringCloud路断器的作用?

      当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应,当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)

      断路器有三种状态:

      1. 完全打开状态:一段时间内达到一定的次数无法调用多次监控没有恢复的迹象,那么下次请求就不糊请求到该服务

      2. 半开:短时间内有恢复迹象。断路器会将部分请求发给该服务,正常调用时断路器关闭

      3. 关闭:当服务一直处于正常状态能正常调用

    17. SpringCloudGateway

      SpringCloudGateway是SpringCloud官方推出的第二代网关框架,取代Zuul网关。在微服务系统中有着非常重要的作用,网关常见的功能有路由转发、权限校验、限流控制等作用。使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加predicates(断言)和filters,简单说就是根据具体的请求规则,有具体的route去处理,Filters是各种过滤器,用来对请求做出各种判断和修改

    18. Ribbon负载均衡能干什么?

      1. 将用户的请求平均的分配到多个服务器上

      2. 集中式LB,即在服务的消费方和提供方之间使用独立的LB设置(可以是硬件,如F5;也可以是软件 ,如nginx),由该设施负责把访问请求通过某种策略转发到服务的提供方

      3. 进程内LB将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从地址中选择一个合适的服务器

      4. 注意:Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方可通过它来获取到服务提供方的地址

    19. 什么是Zuul路由网关?

      1. Zuul包含了对请求的路由和过滤两个最主要的功能:其中路由功能负责将外部请求转发到具体 的微服务实例上,是实现外部访问统一入口的基础;而过滤器功能则负责对请求的出来过程进行干预,是实现请求校验,服务聚合等功能的基础

      2. Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其它微服务的消息,也就是以后访问微服务都是通过Zuul跳转后获得

    20. 分布式配置中心能干什么?

      1. 集中管理配置文件不同环境不同配置,动态化的配置更新,分布式部署环境比如:dev/test/prod/beta/release

      2. 运行期间动态调整配置,不在需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息

      3. 当配置发生变动时,服务不需要重启感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露

      4.  

       

       

       

       

       

  • 相关阅读:
    快速制作高保真原型不得不知的小技巧
    EXC_BAD_ACCESS的本质详解以及僵尸模式调试原理
    Android开发的那些坑和小技巧
    谈Runtime机制和使用的整体化梳理
    在Mac OSX下设置前端开发环境
    uglifyjs压缩JS
    背投广告js
    鼠标到哪tl到哪
    word-wrap同word-break的区别(转)
    HTML中的转义字符
  • 原文地址:https://www.cnblogs.com/juddy/p/14373328.html
Copyright © 2011-2022 走看看