首页/数据/NoSQL 速查/过载保护:限流、排队与降级
选型与架构50 条

过载保护:限流、排队与降级

过载时系统吞吐会随并发上升而下降,保护手段是限制在途请求:入口限流、队列上限、快速失败与按优先级降载。数据库层配合超时、只读降级与熔断,把压力挡在存储之前。

NoSQL 速查数据更新于 2026-10-12

入口限流(nginx 示例)

入口限流(nginx 示例)
limit_req_zone $binary_remote_addr zone=api:10m rate=20r/s;

server {
  location /api/ {
    limit_req zone=api burst=40 nodelay;
    proxy_pass http://app_backend;
  }
}

应用侧降载(伪代码)

应用侧降载(伪代码)
sem = BoundedSemaphore(200)      # 在途请求上限

def handle(req):
    if not sem.acquire(blocking=False):
        return reject_503()           # 快速失败,不排队堆积
    try:
        return process(req)
    finally:
        sem.release()

# 降级路径:重查询走缓存或直接关闭
def search(req):
    if degraded_mode and req.is_heavy:
        return cached_or_plain_result(req)
重试要带退避与抖动并计入重试预算:故障时无节制重试会把 1 倍流量放大成数倍,这是过载恶化的常见路径。

易错点

  • 队列不限长度:请求越排越久,超时后又重试,实际是自我加压
  • 过载时仍然全量返回数据:分页大小、时间范围与导出任务要能动态收窄

数据来源与参考

  • AWS Well-Architected: 过载保护(概念参考)
  • NGINX Docs: limit_req
  • Elasticsearch Guide: Circuit breaker
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌