欢迎您光临本小站。希望您在这里可以找到自己想要的信息。。。

服务降级、限流 和 熔断

我来为您详细介绍服务降级、限流、熔断这三个重要的微服务稳定性概念。
在微服务架构中,服务降级限流熔断 是保障系统稳定性和高可用性的三大核心策略,它们各自解决不同的问题,但常常配合使用。以下是对这三个概念的详细介绍:


✅ 一句话区分(先给你个整体印象)

概念一句话理解
限流控制流量,防止系统被突发请求压垮。
熔断切断故障传播,防止一个服务挂掉拖垮整个系统。
降级牺牲非核心功能,保障核心业务可用。

一、服务限流(Rate Limiting)

✅ 定义:

限制单位时间内进入系统的请求数量,防止系统因突发高并发而崩溃。

✅ 触发条件:

  • 请求量超过系统承载能力(如 QPS、并发数)。

✅ 常见算法:

算法特点
令牌桶允许突发流量,适合 API 接口。
漏桶匀速处理请求,适合消息队列、写库等。
计数器简单暴力,适合低频场景。
滑动窗口更精细,适合高并发场景。

✅ 应用场景:

  • 秒杀活动接口限流(如每秒最多 1000 次请求)。
  • 防止恶意刷接口。
  • 保护下游服务(如数据库)不被打爆。

✅ 示例:

// Sentinel 限流规则
FlowRule rule = new FlowRule();
rule.setResource("seckill");
rule.setCount(100); // 每秒最多 100 次
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);

二、服务熔断(Circuit Breaker)

✅ 定义:

当某个服务失败率过高时,自动“切断”对该服务的调用,避免故障扩散,类似电路中的保险丝。

✅ 熔断器三状态:

状态描述
关闭正常调用服务。
打开直接拒绝调用,走降级逻辑。
半开允许少量请求试探服务是否恢复。

✅ 触发条件:

  • 错误率超过阈值(如 50%)。
  • 响应时间超时。
  • 异常数过多。

✅ 应用场景:

  • 下游服务超时或宕机。
  • 防止“雪崩效应”。

✅ 示例(Hystrix):

@HystrixCommand(fallbackMethod = "fallback")
public String callService() {
    return restTemplate.getForObject("http://user-service/info", String.class);
}

public String fallback() {
    return "用户服务暂不可用,请稍后再试";
}

三、服务降级(Degradation)

✅ 定义:

在系统资源紧张或部分服务不可用时,主动关闭非核心功能或返回兜底数据,保障核心功能可用。

✅ 触发方式:

  • 手动降级(配置开关)。
  • 自动降级(结合熔断触发)。
  • 基于系统负载(CPU、内存、线程池)。

✅ 常见策略:

策略示例
返回默认值推荐服务挂了,返回“暂无推荐”
返回缓存数据商品详情服务挂了,返回缓存中的旧数据
关闭非核心功能秒杀期间关闭“评价”、“推荐”等功能

✅ 应用场景:

  • 大促期间关闭非核心功能。
  • 服务熔断后返回友好提示。
  • 系统负载过高时保核心业务。

四、三者关系与协同工作流程

✅ 协同流程图(逻辑顺序):

高并发请求
   ↓
【限流】→ 拒绝部分请求,保护系统
   ↓
【熔断】→ 下游服务失败率过高,切断调用
   ↓
【降级】→ 返回兜底数据或关闭非核心功能

✅ 举个例子:秒杀活动

  1. 限流:秒杀接口每秒最多处理 1000 个请求,超出直接拒绝。
  2. 熔断:库存服务响应超时,触发熔断,后续请求不再调用库存服务。
  3. 降级:返回“库存未知,请稍后再试”或默认“有货”,保障用户能下单。

五、总结对比表

特性限流熔断降级
目的控制流量,防止系统过载切断故障,防止雪崩保核心业务,牺牲非核心功能
触发条件请求量超过阈值错误率/超时率超过阈值系统负载高或服务不可用
结果拒绝部分请求停止调用故障服务返回兜底数据或关闭功能
是否用户感知是(可能被拒)是(走降级逻辑)是(功能减少或数据不完整)
是否可恢复是(流量下降后自动恢复)是(服务恢复后自动试探)是(服务恢复后自动恢复)

✅ 总结一句话:

限流是“防流量”,熔断是“断故障”,降级是“保核心”


如需我帮你画一张图或出一份面试速记版,也可以继续说!

转载请注明:学时网 » 服务降级、限流 和 熔断

喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!