14 如何设计一个支持百万QPS的系统

vvEcho 2026-03-18 11:15:52
Categories: Tags:

接入层

负载均衡策略:
轮询 / 最少连接 / 一致性哈希,根据业务场景选择

接入层限流:
使用 令牌桶 / 漏桶算法控制瞬时流量
对不同业务接口可做分级限流

网关优化:
HTTP2 / gRPC 支持多路复用
keep-alive / 长连接减少 TCP 握手开销

应用层优

所有实例无状态 → 可以水平扩展
状态存储在缓存或DB
jvm调优,会用G1或ZGC减少停顿

缓存策略

Redis 集群 / Memcached
读多写少场景,缓存热点数据

缓存穿透 / 缓存雪崩 / 缓存击穿
过期 + 本地缓存 + 异步更新

数据库设计

分库分表,避免单表或单库成为瓶颈
Sharding Key 选择要均匀,防止热点
读写分离,主库写,从库读
配合缓存,减少主库压力

异步化和消息队列

写操作异步化
请求先写 MQ,再由消费者批量写 DB
高峰流量不会打垮 DB

队列削峰
消息队列充当缓冲区
支持多消费者、分区消费

幂等设计
防止重复消息导致数据异常

监控与运维

实时监控
QPS、RT、CPU、内存、GC、队列长度
Prometheus + Grafana / SkyWalking

自动扩容
CPU/内存或请求超阈值 → 自动加实例

异常恢复

MQ 消费失败 → 重试队列
DB 写入失败 → 回滚/补偿机制

高可用与容灾

多机房部署
多副本数据存储
服务健康检查 + 自动切换
幂等设计保证请求重试安全