微服务中限流、降级、熔断是保障系统高可用的 “三板斧”,核心目标是 “防止雪崩、保护核心服务”。

一、限流(流量控制:防请求洪峰)

核心目标:限制接口 / 服务的请求 QPS / 并发数,避免超出系统处理能力。

实现方案(按层级划分)
  • 网关层限流(全局入口):✅ 组件:Nginx / Spring Cloud Gateway + Sentinel;✅ 规则:按 IP / 接口 / 服务名限制 QPS(如单 IP 每秒 100 次请求);✅ 实战:Nginx 通过limit_req_zone做 IP 限流,Gateway 通过 Sentinel 做接口级限流,拦截大部分无效流量。
  • 应用层限流(服务内):✅ 组件:Sentinel / Guava RateLimiter(令牌桶算法);✅ 规则:按接口 QPS / 并发数限流(如订单创建接口 QPS 限制 2000);

二、降级(服务不可用时的兜底策略)

核心目标:当某个服务 / 接口异常(超时 / 报错率高)时,返回兜底数据,而非抛出异常,保证核心流程可用。

实现方案
  • 应用层降级(Sentinel/Resilience4j):

        ✅ 触发条件:接口超时 / 异常率超过阈值(如超时 > 500ms、异常率 > 50%);

        ✅ 兜底策略:返回默认值 / 缓存数据 / 降级提示;

        ✅ java运行(Sentinel 降级):

// 降级规则:接口异常率>50%时触发降级,降级时间窗口10s
@SentinelResource(value = "user/get", fallback = "userFallback")
@GetMapping("/user/get/{id}")
public Result getUser(@PathVariable String id) {
    // 调用用户服务,可能超时/报错
    return userService.getUser(id);
}

// 降级兜底方法
public Result userFallback(String id) {
    // 返回兜底数据(如缓存的用户基础信息)
    return Result.success(UserDTO.getDefaultUser(id));
}
  • 依赖服务降级:

        ✅ 场景:调用第三方服务(如支付、短信)超时;

        ✅ 方案:设置超时时间(如 Feign 调用超时 300ms),超时后触发降级,返回 “服务暂不可用”。

三、熔断(服务熔断:断开发故障的依赖)

核心目标:当依赖服务严重异常(如报错率 100%)时,暂时 “熔断” 调用链路,停止请求该服务,等待恢复后再恢复调用,避免雪崩。

实现方案(Resilience4j/Sentinel 熔断器模式)
  • 核心规则(熔断器状态机):

        ✅ 关闭状态:正常调用依赖服务;

        ✅ 打开状态:异常率超过阈值,如 50%,触发熔断,拒绝调用该服务,直接走降级逻辑;

        ✅ 半开状态:熔断时间窗口结束后,允许少量请求试探,若恢复正常则关闭熔断器,否则继续打开;

  • java运行代码(Resilience4j 熔断):
    // 熔断规则:调用支付服务异常率>50%时熔断,熔断窗口10s
    @CircuitBreaker(name = "payService", fallbackMethod = "payFallback")
    @GetMapping("/order/pay/{orderId}")
    public Result pay(@PathVariable String orderId) {
        // 调用支付服务
        return payService.pay(orderId);
    }
    
    // 熔断兜底方法
    public Result payFallback(String orderId, Exception e) {
        return Result.fail("支付服务暂时不可用,请稍后重试");
    }
    

四、核心配合策略

  1. 优先级:网关限流 → 应用限流 → 熔断 → 降级(从入口到内部层层防护);
  2. 规则配置:通过 Sentinel Dashboard / 配置中心动态调整规则(无需重启服务);
  3. 监控告警:对接 Prometheus+Grafana,监控限流 / 熔断触发次数,及时调整规则。

总结

  1. 微服务限流、降级、熔断是高可用核心手段,核心目标是:限流防过载、降级保可用、熔断防雪崩;
  2. 实现核心:网关层(Nginx)+ 应用层(Sentinel/Resilience4j) 结合,动态配置规则;

更多推荐