入口限流(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 倍流量放大成数倍,这是过载恶化的常见路径。