SpringCloud面试题

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

SpringCloud面试题

什么是springcloud

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

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

- 微服务技术将项目的各个模块拆分为可独立运行,部署测试的架构设计风格,这些小型服务都在独自的进行中运行,服务之间一般通过Http的RestFul api在进行通讯

- 分布式: 一个业务分拆多个子业务,部署在不同的服务器上

- 集群:同一个业务,部署在多个服务器上。比如之前做电商网站搭的redis集群以及solr集群都是属于将redis服务器提供的缓存服务以及solr服务器提供的搜索服务部署在多个服务器上以提高系统性能、并发量解决海量存储问题。

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

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

Spring Cloud 和dubbo区别?

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

什么是Ribbon

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

什么是feign,如何使用feign

Feign是一个声明式的Rest客户端,他用了基于接口的注解方式,很方便实现客户端配置(声明式接口,发起远程调用)

实现Feign的过程 
- 在消费端引入open-feign依赖
- 编写Feign接口
    接口上添加注解 @FeignClient,设置value属性为 服务提供者的 应用名称
    编写调用接口,接口的声明规则 和 提供方接口保持一致
    注入该接口对象,调用接口方法完成远程调用
- 在启动类添加 @EnableFeignClients 注解,开启Feign功能

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

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

什么是Hystrix

-springcloud里面,熔断机制是采用hystrix实现的,用于监控微服务调用情况,当失败的情况达到预定的阀值(5秒失败20次),会打开断路器,拒绝所以的请求,直到服务恢复正常为止。 

- Hystrix是Netfix开源的一个延迟和容错库,用于隔离访问远程服务,第三方库,防止出现雪崩

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

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

-雪崩:在微服务中,往往一个请求可能会调用多个微服务的接口才可以实现,如果一个微服务出现异常,就会出现阻塞,用户请求就得不到响应,这个线程就不会释放,服务器所支持的线程是有限的,请求一直出现阻塞,会导致服务器资源耗尽,从而导致其他服务不可以用,从而形成雪崩(雪崩就是指一个服务失败,导致整条链路的服务都失败的情形)

-解决措施:
    Hystrix解决雪崩的主要手段是服务降级:
    	隔离:线程池隔离,信息量隔离
    	降级:异常,超时
    	熔断
    	限流

Hystrix隔离原理

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

触发Hystrix服务降级的条件:

  • 线程池已满
  • 请求超时

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

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

zookeeper:zookeeper当一个节点挂了,剩下的节点会重新选取新的leader,选举的时间过长,这这个期间集群不可用,会导致整个注册服务瘫痪

相关文章