微服务常见面试题

一、说说你对springcloud的理解?

Spring cloud是⼀个基于Spring Boot实现的服务治理框架,⽤于微服务架构中管理和协调各个服务。它提供了一系列组件方便用户快速搭建微服务,如服务发现注册nacos、 配置中⼼nacos、服务网关gateway,客户端负载配置Ribbon、服务间调用openfeign、短路器Hystrix、分布式事务服务Seata等

微服务常见面试题_第1张图片

二、nacos 注册中心工作流程

  • 1、服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据。比如IP地址、端口等信息,Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。
  • 2、服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被踢除。默认5秒发送一次心跳。
  • 3、服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。
  • 4、服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务(35秒/次)定时拉取服务端最新的注册表信息更新到本地缓存。nacos支持服务列表变更的消息推送模式,服务列表更新及时
  • 5、服务健康检查:Nacos Server会开启一个定时任务来检查注册服务实例的健康情况,对于超过15秒没有收到客户端心跳的实例,会将它的healthy属性置为false(客服端服务发现时不会获取),如果某个服务实例超过30秒没有收到心跳,直接踢除该实例(被踢除的实例如果恢复发送心跳则会重新注册)

三、nacos配置中心动态监听

nacos采用的是pull模式(客户端从服务端主动拉取数据),但不是简单的pull模式,而是一种长轮训机制,它结合了push和pull两者优势,客户端采用长轮训的方式定时发起pull请求,去检查服务配置信息是否发生了变更,如果服务端有配置发生变化,就直接返回,如果没有变化,则服务端会hold住这个请求,也就是服务端拿到这个连接之后在指定的时间内一直不返回结果,直到这段时间内配置发生变化,服务端会把原来hold住的请求进行返回,长连接默认时间是30秒

四、Feign服务调用原理

  1. 通过 @EnableFeignClient 触发 Spring 应用程序对@FeignClient 修饰类的扫描
  2. 解析到 @FeignClient 修饰类后, Feign 框架注册一个 FeignClientFacotoryBean 进入 Spring 容器
  3. Spring 容器在初始化其他用到 @FeignClient 接口的类时, 获得FeignClientFacotryBean 产生的一个代理对象 Proxy.
  4. 基于 java 原生的动态代理机制, 针对 Proxy 的调用, 都会被统一转发给 Feign 框架定义的一个 Handler ,由该 Handler 完成后续的 HTTP 转换,发送,接收等工作
  5. Feign在默认情况下使用的是JDK原生的URLConnection发送HTTP请求,没有连接池,用Apache的HTTP Client替换Feign原始的http client, 从而获取连接池、超时时间等与性能息息相关的控制能力

五、说说Ribbon是如何实现负载均衡的?

  • 发送请求,被LoadBalancerInterceptor拦截器拦截,请求被交给ribbon来处理

  • 负载均衡客户端(LoadBalancerClient)在初始化的时候,向注册中心获取服务注册列表,并通过服务健康检查,来判断服务的可用性,如果服务的可用性发生了改变或者服务数量和之前的不一致,则从注册中心更新或者重新拉取。负载均衡客户端有了这些服务注册列表,就可以根据具体的IRule来进行负载均衡。

  • 使用负载均衡算法(默认轮询算法)从所有的服务实例信息中选择一台机器出来

  • 将请求发送给负载均衡选择出来的服务实例上去

六、ribbon支持负载均衡策略

  • 随机策略——RandomRule
  • 轮询策略——RoundRobinRule    注:Ribbon默认策略
  • 重试策略——RetryRule
  • 最空闲策略:BestAvailableRule
  • 可用过滤策略——AvailabilityFilteringRule:该策略根据服务状态 (宕机和繁忙) 来分配权重,过滤掉那些因为一直连接失败或高并发的服务实例。它使用一个 AvailabilityPredicate() 方法来包含过滤逻辑。
  • 响应时间加权策略——WeightedResponseTimeRule:每隔30秒计算一次服务器响应时间,以响应时间作为权重,响应时间越短的服务器被选中的概率越大。
  • 区域权衡策略——ZoneAvoidanceRul

七、spring cloud 降级和熔断的区别与说明

1、服务降级:当服务调用出现响应时间过长或者运行异常,就会调用服务降级方法快速响应。
2、服务熔断,只有在一定时间内服务调用失败(报错、超时、宕机)达到一定次数,才会启动服务熔断,进而调用服务降级方法快速响应。假设服务宕机或者在单位时间内调用服务失败的次数过多,即服务降级的次数太多,那么则服务熔断。
3、服务降级每次都会先调用原服务方法,调用失败才会执行服务降级方法;服务熔断状态会直接调用服务降级方法。

八、sentinel为什么可以对我们的业务进行限流,原理是什么?

我们在访问web应用时,在web应用内部会有一个拦截器,这个拦截器会对请求的url进行拦截,拦截到请求以后,读取sentinel控制台的流控规则,基于流控规则对流量进行限流

九、nacos和eureka区别

  • nacos和eureka的范围不同,Nacos的阈值是针对某个具体Service的,而不是针对所有服务的;但Eureka的自我保护阈值是针对所有服务的。
  • nacos支持CP和AP两种;eureka只支持AP。
  • nacos使用netty,是长连接;eureka是短连接,定时发送。

你可能感兴趣的:(面试题,微服务,java,spring,cloud)