高吞吐后端韧性工程:限流、熔断、背压与读写分离实战

2026-06-12 14:22:52

高吞吐后端韧性工程实战

案例背景:日活 500 万电商,大促峰值 8 万 QPS 下单请求
目标:核心链路可用性 99.95%,P99 < 300ms(非 AI)

一、韧性设计四支柱

           ┌─────────┐
  请求 ──→ │  限流   │ ──→ 拒绝超载,保护下游
           └────┬────┘
                ↓
           ┌─────────┐
           │  熔断   │ ──→ 下游故障时快速失败
           └────┬────┘
                ↓
           ┌─────────┐
           │  背压   │ ──→ 队列有界,不 OOM
           └────┬────┘
                ↓
           ┌─────────┐
           │  隔离   │ ──→ 读写分离、舱壁线程池
           └─────────┘

二、限流:Sentinel 规则设计

2.1 多层限流

层级 维度 阈值示例
Gateway 全站 IP 100 req/s
Gateway 用户 ID 20 req/s
服务 接口 /order/create 5000 QPS
服务 热点参数 商品 SKU 500 QPS

2.2 热点参数限流

@SentinelResource(value = "createOrder", blockHandler = "createOrderBlock")
public Order createOrder(@HotParam Long skuId, OrderRequest req) {
    return orderService.create(req);
}

public Order createOrderBlock(Long skuId, OrderRequest req, BlockException ex) {
    throw new BizException("商品太火爆,请稍后再试");
}

Sentinel 控制台动态推送规则,生产环境建议规则 Git 化管理


三、熔断与降级

Resilience4j 配置示例:

resilience4j.circuitbreaker:
  instances:
    inventoryService:
      slidingWindowSize: 100
      failureRateThreshold: 50
      waitDurationInOpenState: 30s
      permittedNumberOfCallsInHalfOpenState: 10

resilience4j.timelimiter:
  instances:
    inventoryService:
      timeoutDuration: 2s

降级策略

  • 库存服务超时 → 返回「库存查询中,订单待确认」异步单
  • 推荐服务失败 → 返回静态热门列表
  • 核心下单链路禁止静默失败

四、消息队列背压

Producer → Kafka (partition=32) → Consumer (batch=100, max.poll=500ms)

背压信号

  1. Consumer Lag > 10 万 → 暂停非核心 Producer
  2. 队列深度告警 → 前端展示「排队 N 人」
  3. 有界队列LinkedBlockingQueue(capacity=10000),满则拒绝

RocketMQ 消费失败进 DLQ,人工/自动补偿流程必备。


五、MySQL 读写分离

5.1 架构

写 → Master
读 → ShardingSphere 路由 → Slave1 / Slave2
强一致读 → 写后读 Master(同请求 ThreadLocal 标记)

5.2 延迟感知

Slave 复制延迟 > 1s 时,自动路由 Master 读,避免「下单成功但查不到」。

spring.shardingsphere.rules.readwrite-splitting:
  data-sources:
    ds0:
      write-data-source-name: master
      read-data-source-names: slave0,slave1
      load-balancer-name: round_robin

六、缓存与热点 Key

问题 方案
缓存击穿 互斥锁 + 逻辑过期
缓存雪崩 TTL 随机偏移 ± 10%
热点 Key Local Cache(Caffeine)+ Redis 双层

大促前 人工预热 TOP 100 SKU 缓存,CDN 静态化商品详情页。


七、压测验证

  1. 全链路压测:生产隔离影子库/影子 Topic
  2. 指标验收:限流触发率、熔断次数、Lag、P99
  3. 故障注入:Chaos Mesh 随机 Kill Pod
# wrk 压测示例
wrk -t12 -c400 -d60s -s create_order.lua https://api.example.com/order

八、运维 Runbook(节选)

现象:下单成功率骤降

  1. 查 Gateway 429 比例 → 是否限流过严
  2. 查 inventory 熔断状态 → 是否下游故障
  3. 查 Kafka Lag → 是否消费跟不上
  4. 查 MySQL 慢查询 → 是否锁等待

小结

高吞吐不是「堆机器」——限流保生存、熔断防扩散、背压防 OOM、隔离防牵连。国内大促实践表明,提前在 Gateway 层截断 30% 无效流量,比下游扩容成本低一个数量级。