属于大家的
VPS知识分享站

黑五流量高峰怎么扛?压测、缓存、限流与扩容的顺序

先说结论:黑五能不能扛住,不取决于当天加了几台机器,而取决于你提前两周做了什么。顺序应该是“先压测拿基线 → 再堆缓存 → 再限流排队 → 最后才扩容”,扩容放在最后,是因为大部分站点在扩容前就能靠缓存和限流省掉一半压力。

时间点先对齐:2026 年黑五在 11 月 27 日,TikTok Shop 的黑五大促从 11 月 11 日就开打,真正的流量从 11 月上旬就开始爬坡。现在离黑五还有一个月,刚好够做一轮压测和一次演练。

陡峭上升的发光流量曲线冲向服务器集群
先压测拿到单机 QPS 和拐点,扩容才有依据。

第一步:先拿到基线

没有基线,后面所有扩容都是拍脑袋。至少测三个数:

  • 单机 QPS:在正常响应时间下,一台机器能扛多少请求
  • 拐点:QPS 到多少时 p95 开始飙升、错误率上升
  • 瓶颈:先到顶的是 CPU、内存、数据库连接还是带宽
# 示例:用 wrk 压首页和商品页
wrk -t4 -c200 -d60s --latency https://example.com/
wrk -t4 -c200 -d60s --latency https://example.com/product/123

# 压测时同时看
top
ss -s
mysqladmin status

读接口和写接口要分开压。商品页、搜索页是读,下单、支付、库存扣减是写,瓶颈通常不在同一个地方。目标峰值按日常峰值的 3 到 5 倍估,再留 30% 余量。

第二步:缓存能省掉一半压力

大促期间最划算的动作是缓存,不是加机器。按层次排:

  1. CDN:图片、JS/CSS、视频、可公开的静态页,尽量命中边缘
  2. 页面缓存:商品详情、分类页、活动页做短 TTL 缓存,登录态和购物车除外
  3. 对象缓存:Redis 缓存热点商品、库存快照、配置
  4. 数据库缓存:查询缓存、连接池、只读副本

缓存设计要提前想清楚三件事:key 怎么定、什么时候失效、穿透和雪崩怎么防。大促前把热点 key 预热,给不同 TTL 加随机值,避免同一秒全部过期。

三层缓存挡在数据库前面,请求逐层过滤
CDN、页面缓存、Redis 分层挡住大部分读请求,比加机器便宜。

第三步:限流和排队

缓存之后还有流量,就限流。限流不是“把用户挡在门外”,而是“把请求排好队,别让数据库先死”。

limit_req_zone $binary_remote_addr zone=bf:10m rate=20r/s;
limit_conn_zone $binary_remote_addr zone=bfconn:10m;

server {
    limit_req zone=bf burst=40 nodelay;
    limit_conn bfconn 30;
}

分层限流:静态资源宽松,商品页中等,登录/搜索/下单严格。下单可以加队列,前端显示排队进度,后端按数据库能承受的速度消费。秒杀类活动用令牌桶或 Redis 原子扣减,避免超卖。

第四步:扩容,扩在正确的地方

扩容前先确认应用是无状态的:session 放 Redis,上传文件放对象存储,定时任务别在多台机器上重复跑。满足这三点,加机器才有意义。

  • 应用层:加实例,挂负载均衡,先灰度再全量
  • 数据库:连接池、只读副本、慢查询优化;不要指望临时加从库解决写瓶颈
  • 静态资源:全部走 CDN 或对象存储,别让应用服务器发图片
  • 带宽:大促前确认出口带宽和流量包,别到峰值被限速
请求队列被漏斗和护盾整理成平滑流量
限流不是拒绝用户,是把请求排队,别让数据库先死。

带宽和负载均衡也要提前确认。很多团队只盯着 CPU,结果峰值一来先撞到出口带宽或 SLB 的连接数上限。把大促期间的流量包、带宽峰值、回源带宽和证书到期时间列一张表,逐项确认,别等当天才发现被限速。

另外提前确认云厂商的配额和库存:要用的实例规格是否有货、快照和自定义镜像是否可用、弹性 IP 和负载均衡额度够不够。大促当天再申请配额,审批和库存都可能卡住,临时扩容会变成一句空话。

第五步:数据库和大促脚本

大促出事,十次有八次在数据库。提前做四件事:

  1. 开慢查询日志,把超过 200ms 的 SQL 全部过一遍,补索引
  2. 检查库存扣减逻辑,用事务或原子操作,保证不超卖、不重复扣
  3. 下单、支付、退款接口做幂等,防止重试造成重复订单
  4. 把报表、导出、对账这类重查询挪到从库或离线任务

第六步:预案和演练

写一页纸的应急卡:谁负责切流量、谁负责回滚、谁对外沟通、什么情况下触发降级。大促前至少演练一次“主库连接打满”或“某个接口超时”的场景,确认每个人知道去哪看、点哪里。

降级顺序建议:关非核心功能(推荐、评论、统计)→ 静态化活动页 → 限流加排队 → 切备用链路 → 最后才是扩容和回滚。每次变更都记录时间和操作人。

监控看什么

  • 5xx 比例、p95/p99 响应时间
  • 数据库连接数、慢查询数、锁等待
  • Redis 命中率、内存、连接数
  • 队列积压和消费速度
  • CDN 命中率和回源带宽
  • 订单创建成功率、支付成功率

告警阈值提前调低一点,大促期间宁可多响几次,也别等用户投诉才发现。

常见问题 FAQ

Q1:黑五当天加机器来得及吗?

来不及。加机器要经过镜像、启动、挂载、灰度,数据库也不一定能立刻分担。提前两周扩容并压测,当天只做小幅调整。

Q2:压测会不会把生产打挂?

会。压测要在预发或克隆环境做,至少不要打真实支付和库存。生产只能做小流量灰度。

Q3:缓存加多少层合适?

按业务需要,不是越多越好。CDN + 页面缓存 + Redis 通常够用;每加一层都要想清楚失效和一致性。

Q4:限流会不会误伤真实用户?

会,所以要分层。按 IP 限流会误伤 NAT 用户,按用户/设备/接口限流更精准;下单链路用排队而不是直接拒绝。

Q5:大促后要做什么?

把峰值数据、瓶颈、故障和成本写成复盘,更新容量模型和应急卡;该降配的降配,别让临时扩容变成长期账单。

总结

还有一条经验:大促前一周冻结非必要变更,把发布窗口关掉。很多故障不是流量打挂的,是当天上线的新代码打挂的。

黑五扛压的顺序是:压测拿基线、缓存挡大头、限流保数据库、扩容补余量、预案兜底。提前两周做,比当天临时加机器有效得多。把 502、DDoS、超售这些坑提前排掉,峰值来了才有余力处理真正的问题。

需要一台美国节点做压测或大促备用环境,可以按小时开一台萤光云美国 VPS,压完再释放。

相关推荐

赞(0)
未经允许不得转载:VPS知识分享站 » 黑五流量高峰怎么扛?压测、缓存、限流与扩容的顺序