高并发概述
→ 返回 高并发
高并发不是「把机器堆多」,而是在正确边界做削峰、合并、异步与一致性取舍。本专题用多个国民级场景讲清「什么问题 → 什么解法」,并串联通用能力。
选型入口:场景选型指南
业务场景库
| 场景 | 核心矛盾 | 一致性 | 详解 |
|---|---|---|---|
| 微信步数日榜 | 海量上报、实时排行 | 最终一致 | 排行榜与实时计数 |
| 12306 春节 | 查询风暴、不能超卖 | 强一致 | 12306春节高峰 |
| 秒杀 / 双 11 | 瞬时抢购、热点 SKU | 强一致 | 秒杀与抢购 |
| 红包雨 / 福袋 | 亿级点击、金额守恒 | 准确 + 异步展示 | 红包雨与入账峰值 |
| 热搜 / 突发新闻 | 单条内容读爆炸 | 可短暂旧 | 热搜与读风暴 |
| 直播弹幕 / 礼物 | 写洪峰、低延迟展示 | 展示可有损 | 直播弹幕与礼物 |
| 点赞 / 播放量 | 极高频 +1 | 数字可近似 | 点赞与播放计数 |
| 验证码 / 短信 | 活动瞬间海量发码 | 频控必须准 | 验证码与通知洪峰 |
| 支付回调 | 促销后集中通知 | 幂等、恰好一次 | 支付回调与结算峰值 |
| 投票 / 限量抽签 | 一人一票、名额有限 | 票准确 / 不能超发 | 投票与限量抽签 |
一致性光谱
展示可丢 / 可近似 最终一致 强一致(库存·金额)
──────────────────────────────────────────────────────────────►
直播弹幕 点赞·热搜·步数榜 红包·投票入账 秒杀·12306·抽签
问题分层模型
用户洪峰
▼
接入层:CDN / 网关 / 限流 / 排队 / 令牌 ← 数据层外缓冲
▼
计算层:Redis 聚合 / 扣库存 / MQ 消费 ← 内存 + 消息
▼
数据层:同步订单库存 / 异步批量 / 对账 ← MySQL 等
| 层级 | 典型手段 |
|---|---|
| 接入缓冲 | 虚拟排队、验证码、舱壁隔离 |
| 内存/MQ | ZSet、INCR、Lua DECR、Kafka 分区 |
| 数据层 | 强一致写 / 批量 UPSERT / 从库读 |
各场景一分钟解法
微信步数日榜
上报 → MQ 立即返回 → max(步数) 合并 → Redis 排行 → 批量落库。
→ 排行榜与实时计数
12306 春节
查询走缓存;下单走令牌 + 原子扣库存;支付/关单走 MQ。
→ 12306春节高峰
秒杀抢购
静态页 + 秒杀令牌 + Redis 预扣 + 幂等订单 + 超时回滚库存。
→ 秒杀与抢购
红包雨
红包分桶防热 key;NX 防重复;MQ 异步入账;金额对账。
→ 红包雨与入账峰值
热搜读风暴
CDN + L1 + Redis;热帖本地缓存;写走 MQ 合并;读走从库。
→ 热搜与读风暴
直播弹幕
Kafka 按房间分区 → 时间窗合并 → WebSocket 推送;不全量落 MySQL。
→ 直播弹幕与礼物
点赞 / 播放
SADD 去重 + INCR;定时批量刷 DB;读 Pipeline。
→ 点赞与播放计数
验证码 / 短信洪峰
多维冷却 + MQ 异步发送 + Worker 对齐通道 QPS;校验只打 Redis。
→ 验证码与通知洪峰
支付回调
验签 → 幂等表 → 条件更新订单 → 200 快速 ACK → MQ 发货/分账。
→ 支付回调与结算峰值
投票 / 限量抽签
投票:SADD 判重 + INCR;抽签:Lua 扣 remain + DB 唯一约束防超发。
→ 投票与限量抽签
通用解法对照表
| 你的问题 | 推荐解法 |
|---|---|
| 怕打穿数据库 | 接入限流 + MQ + 只缓存读 |
| 不能超卖 | Lua / 乐观锁 + 幂等订单 |
| 不能重复领取 | 唯一约束 + Redis NX |
| 数字可以不准 | INCR + 异步合并写库 |
| 榜单可以慢几秒 | MQ 合并 + ZSet |
| 午夜 / 整点峰 | 分区消费 + 客户端错峰 + 扩容 |
| 单 key 过热 | 分桶、本地缓存、副本 |
与其它架构章节
设计检查清单(汇总)
| 检查项 | 适用场景 |
|---|---|
| 同步路径是否过重 | 全部 |
| 能否超卖 / 超发 | 抢票、秒杀、红包 |
| 幂等与重复提交 | 抢票、秒杀、红包、点赞 |
| 热 key | 榜、热搜、秒杀 SKU、红包活动 |
| 展示缓存是否当扣减依据 | 抢票、秒杀 |
| 降级策略 | 全部 |
| 对账 | 红包、库存、榜、计数 |