SpringCloud面试题

x33g5p2x  于2022-02-21 转载在 Spring  
字(2.3k)|赞(0)|评价(0)|浏览(450)

SpringCloud面试题

什么是springcloud

  1. springCloud是一系列框架的有序集合,把其他公司中微服务架构常用组件整合起来,并使用springBoot简化开发,配置

什么是微服务,分布式,集群

  1. - 微服务技术将项目的各个模块拆分为可独立运行,部署测试的架构设计风格,这些小型服务都在独自的进行中运行,服务之间一般通过HttpRestFul api在进行通讯
  2. - 分布式: 一个业务分拆多个子业务,部署在不同的服务器上
  3. - 集群:同一个业务,部署在多个服务器上。比如之前做电商网站搭的redis集群以及solr集群都是属于将redis服务器提供的缓存服务以及solr服务器提供的搜索服务部署在多个服务器上以提高系统性能、并发量解决海量存储问题。

服务注册和发现是什么意思?Spring Cloud 如何实现?

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

Spring Cloud 和dubbo区别?

  1. - springCloudDubbo都是实现微服务有效的工具
  2. - dubbo只是实现了服务治理,而springcloud覆盖了微服务架构之下的众多部件
  3. - dubbo使用RPC通讯协议,SpringCloud使用RestFul风格进行完成通讯,dobbo效率高于springcloud

什么是Ribbon

  1. RibboNetfix发布的负载均衡器,它有助于控制HttpTCP的客户端的行为,为Ribbon配置服务提供者地址后,Ribbo就可基于某种负载均衡算法,自动的帮助服务消费者区请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询,随机等。

什么是feign,如何使用feign

  1. Feign是一个声明式的Rest客户端,他用了基于接口的注解方式,很方便实现客户端配置(声明式接口,发起远程调用)
  2. 实现Feign的过程
  3. - 在消费端引入open-feign依赖
  4. - 编写Feign接口
  5. 接口上添加注解 @FeignClient,设置value属性为 服务提供者的 应用名称
  6. 编写调用接口,接口的声明规则 提供方接口保持一致
  7. 注入该接口对象,调用接口方法完成远程调用
  8. - 在启动类添加 @EnableFeignClients 注解,开启Feign功能

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

  1. -服务熔断机制是一种应对雪崩效应的一种微服务链路保护机制,当某个微服务不可用或者响应时间太长时,会进行服务降级,从而熔断该节点微服务的调用,快速返回错误信息,当检测到该节点调用响应正常的时候,恢复链路。
  2. -服务降级:一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强。

什么是Hystrix

  1. -springcloud里面,熔断机制是采用hystrix实现的,用于监控微服务调用情况,当失败的情况达到预定的阀值(5秒失败20次),会打开断路器,拒绝所以的请求,直到服务恢复正常为止。
  2. - HystrixNetfix开源的一个延迟和容错库,用于隔离访问远程服务,第三方库,防止出现雪崩
  3. @EnableHystrix:开启熔断
  4. @HystrixCommand(fallbackMethod=”XXX”):声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback函数,返回错误提示

什么是雪崩,如何避免雪崩

  1. -雪崩:在微服务中,往往一个请求可能会调用多个微服务的接口才可以实现,如果一个微服务出现异常,就会出现阻塞,用户请求就得不到响应,这个线程就不会释放,服务器所支持的线程是有限的,请求一直出现阻塞,会导致服务器资源耗尽,从而导致其他服务不可以用,从而形成雪崩(雪崩就是指一个服务失败,导致整条链路的服务都失败的情形)
  2. -解决措施:
  3. Hystrix解决雪崩的主要手段是服务降级:
  4. 隔离:线程池隔离,信息量隔离
  5. 降级:异常,超时
  6. 熔断
  7. 限流

Hystrix隔离原理

  1. Hystrix为每一个依赖服务调用分配一个小的线程池,如果线程池已满,调用将被立即拒绝。
  2. 用户请求不在直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已经满,或者请求超时,就会进行降级处理

触发Hystrix服务降级的条件:

  • 线程池已满
  • 请求超时

Eureka和zookeeper都可以提供服务注册和发现功能,他们的区别是什么

  1. Zookepper 保证了CP (C:一致性,P:分区容错性)
  2. Eureke 保证了AP (A:高可用,P:分区容错性)
  3. 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值(等同于所有的节点访问同一份最新的数据副本)
  4. 可用性(A):保证每一个请求不管成功或者失败都有响应
  5. 分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续操作
  6. EurekaEureka各个节点都是平等的,一个节点挂掉了,剩下的节点任然可以提供注册和查询服务,只要有一台Eureka存在,就可以保证注册服务可用,Eureke还有保护机制,30秒发送一次心跳包,如果Eureka没有在规定时间内接受到85%的正常心跳包,就会就把清除过期的服务
  7. zookeeperzookeeper当一个节点挂了,剩下的节点会重新选取新的leader,选举的时间过长,这这个期间集群不可用,会导致整个注册服务瘫痪

相关文章