【微服务】面试 2、服务雪崩

服务雪崩概念

  • 主要内容:在微服务项目中,微服务间存在远程调用。若某一服务(如服务 d)出现故障,调用它的服务(如服务 a)会失败。若调用方持续向故障服务发起请求,由于服务连接数有限且失败连接未释放,可能导致调用方连接数占满,无法对外提供服务,进而引发连锁反应,使整个微服务链路不可用,这就是服务雪崩。
  • 核心概念:一个服务的失败可能引发整个链路服务的失败。
  • 关键知识点:服务间的远程调用关系、服务连接数的限制以及故障传递导致的雪崩现象。

服务雪崩的解决方法

  • 主要内容:可使用熔断降级和限流来解决服务雪崩问题。其中,熔断降级可利用 spring cloud 中的 hystix 组件实现,限流则是限制访问,主要用于预防。重点讲解熔断降级。
  • 核心概念:通过特定组件和策略防止服务雪崩。
  • 关键知识点:hystix 组件提供熔断降级功能,限流的预防作用及与熔断降级的区别。

服务降级介绍

  • 主要内容:以服务 d 为例,其包含修改和保存两个接口,若保存接口出现问题(如抛异常),服务 a 调用该接口时可加入降级逻辑。降级逻辑可提示用户"网络有问题,请稍后再试",此时保存功能暂时不可用。
  • 核心概念:在接口出现问题时,通过自定义逻辑使部分服务功能暂时不可用,以保障服务稳定性。
  • 关键知识点:服务降级的触发条件(接口异常)、降级逻辑的设置方式(如提示信息)以及对服务功能的影响(部分功能不可用)。

服务降级的具体处理

  • 主要内容 :通常在使用接口发起远程调用时设置降级逻辑,如通过 feign client 调用 其它 服务时,在相关位置设置 fallback 指定降级逻辑,且降级逻辑类与接口方法存在对应关系。正常访问时走远程调用,接口失败则走降级逻辑,如直接提示"获取数据失败"。
  • 核心概念:在代码层面实现服务降级的具体操作和逻辑关联。
  • 关键知识点:代码中设置降级逻辑的位置和方式,降级逻辑类与接口方法的对应关系,以及正常与异常情况下的执行路径。

服务熔断介绍

  • 主要内容 :由 hystrix 组件提供,有关闭、打开、半开三个状态,默认关闭,可在引导类上加注解开启。当请求失败率在一定时间内(如十秒内失败率超过 50%)达到阈值,断路器从关闭状态切换到打开状态,所有请求被拒绝。一段时间后进入半开状态,尝试放行一次请求,根据请求结果决定断路器的后续状态。
  • 核心概念:基于请求失败率等条件对服务进行熔断控制,以防止故障服务对系统的持续影响。
  • 关键知识点:服务熔断的组件、状态及其转换条件,不同状态下对请求的处理方式,以及重试的时间间隔和机制。

服务降级与服务熔断的区别

  • 主要内容:服务降级针对的是某一个接口,是部分服务功能不可用,是服务自我保护或保护下游服务的方式;服务熔断则是针对整个服务不可用,当满足特定的失败率条件时触发。
  • 核心概念:明确两种应对服务雪崩机制在作用对象和触发条件上的差异。
  • 关键知识点:服务降级针对接口、部分功能不可用,服务熔断针对整个服务不可用,以及各自的触发条件和应用场景。

面试题回答要点

  • 主要内容:向面试官解释服务雪崩是一个服务失败导致整个链路服务失败的情形。解决方案包括服务降级和服务熔断,分别阐述其原理、特点及两者区别。如服务降级是服务自我保护或保护下游服务的方式,与接口整合编写降级逻辑;服务熔断默认关闭需手动打开,根据请求失败率触发和恢复。
  • 核心概念:全面、准确地回答服务雪崩相关面试问题,展示对知识的理解和应用能力。
  • 关键知识点:服务雪崩的定义、解决方法(降级和熔断)的详细内容及两者区别,回答问题的逻辑和要点。
相关推荐
风象南5 分钟前
SpringBoot配置属性热更新的轻量级实现
java·spring boot·后端
洛阳泰山6 分钟前
Spring Boot 整合 Nacos 实战教程:服务注册发现与配置中心详解
java·spring boot·后端·nacos
Y4090016 分钟前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记
YuTaoShao7 分钟前
【LeetCode 热题 100】994. 腐烂的橘子——BFS
java·linux·算法·leetcode·宽度优先
布朗克1687 分钟前
java常见的jvm内存分析工具
java·jvm·数据库
都叫我大帅哥1 小时前
深入浅出 Resilience4j:Java 微服务的“免疫系统”实战指南
java·spring cloud
Cao_Shixin攻城狮3 小时前
Flutter运行Android项目时显示java版本不兼容(Unsupported class file major version 65)的处理
android·java·flutter
Dcs6 小时前
还在用 Arrays.hashCode?Java 自己也能写出更快的版本!
java
fouryears_234178 小时前
Spring,Spring Boot 和 Spring MVC 的关系以及区别
java·spring boot·spring·mvc
阿葱(聪)8 小时前
java 在k8s中的部署流程
java·开发语言·docker·kubernetes