MST

星途 面试题库

面试题:Spring Cloud微服务架构的服务熔断与降级策略

当微服务架构中的某个服务出现故障时,如何利用Spring Cloud实现服务熔断和降级?请说明具体的实现方式以及它们之间的区别。
18.6万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

服务熔断实现方式

  1. 引入依赖:在pom.xml中添加spring-cloud-starter-netflix-hystrix依赖。
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  1. 开启熔断功能:在启动类上添加@EnableHystrix注解。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.netflix.hystrix.contrib.javanica.annotation.EnableHystrix;

@SpringBootApplication
@EnableHystrix
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}
  1. 定义熔断方法:在需要熔断保护的方法上添加@HystrixCommand注解,并指定熔断后的降级方法。
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.stereotype.Service;

@Service
public class YourService {

    @HystrixCommand(fallbackMethod = "fallbackMethod")
    public String yourMethod() {
        // 正常业务逻辑
        return "正常响应";
    }

    public String fallbackMethod() {
        // 熔断后的降级处理逻辑
        return "服务暂时不可用,请稍后重试";
    }
}

服务降级实现方式

  1. 全局降级配置:创建一个实现FallbackFactory接口的类,用于生成全局降级逻辑。
import com.netflix.hystrix.contrib.javanica.FallbackFactory;
import org.springframework.stereotype.Component;

@Component
public class YourFallbackFactory implements FallbackFactory<YourService> {
    @Override
    public YourService create(Throwable cause) {
        return () -> "全局降级处理,服务不可用";
    }
}

然后在需要全局降级的方法上使用@HystrixCommand注解并指定fallbackFactory

@HystrixCommand(fallbackFactory = YourFallbackFactory.class)
public String yourMethod() {
    // 正常业务逻辑
    return "正常响应";
}
  1. 局部降级:与熔断中定义的fallbackMethod类似,在@HystrixCommand注解中指定具体的方法作为降级逻辑。

服务熔断和降级的区别

  1. 触发机制
    • 熔断:通常是由于某个服务调用持续失败或响应时间过长,达到一定阈值后触发。熔断就像电路中的保险丝,当电流过大(请求失败过多)时自动切断电路(停止调用故障服务),防止故障扩散。
    • 降级:更多是基于系统整体的负荷情况,比如流量过大、资源不足等,主动放弃一些非核心服务的正常功能,以保证核心服务的可用性。可以手动触发,比如运维人员根据监控数据决定对某些服务进行降级。
  2. 恢复策略
    • 熔断:触发熔断后,会进入一个熔断状态,在一段时间内(熔断时间窗)不会再尝试调用故障服务。当熔断时间窗结束后,会进入半熔断状态,尝试少量调用,如果调用成功则恢复正常,否则继续熔断。
    • 降级:降级一般是由人工或系统自动调整(如根据流量、资源使用率等指标),当系统负荷降低或故障排除后,手动或自动恢复正常服务。
  3. 作用层面
    • 熔断:主要保护自身服务不被下游故障服务拖垮,防止级联故障。
    • 降级:更侧重于从整个系统层面进行资源调配和服务可用性保障,在资源紧张时牺牲部分非关键功能,保证核心业务。