高并发系统架构设计
核心指标
- QPS:每秒查询数
- TPS:每秒事务数
- RT:响应时间
- 并发数:QPS * RT
性能优化层次
应用层
- 连接池:复用TCP连接
- 线程池:控制并发数
- 异步非阻塞:提升吞吐
- 缓存:减少计算和IO
数据层
- 读写分离:主从复制
- 分库分表:水平拆分
- 索引优化:加速查询
- 慢查询优化:explain分析
网络层
- CDN:静态资源就近访问
- 负载均衡:Nginx、LVS
- 压缩传输:gzip、br
- HTTP/2:多路复用
缓存策略
Cache-Aside
// 读
String value = cache.get(key);
if (value == null) {
value = db.load(key);
cache.put(key, value);
}
// 写
db.update(key, value);
cache.delete(key); // 延迟双删
缓存穿透
- 布隆过滤器:快速判断不存在
- 空值缓存:缓存null结果
- 请求限流:恶意key拦截
缓存雪崩
- 过期时间加随机值
- 多级缓存:本地+Redis
- 熔断降级:保护后端
缓存击穿
限流降级
限流算法
- 计数器:固定窗口
- 滑动窗口:平滑限流
- 令牌桶:恒定速率
- 漏桶:削峰填谷
降级策略
- 自动降级:超时/失败率触发
- 人工降级:配置开关
- 默认值:返回缓存或默认
- 熔断:快速失败保护系统
数据库优化
索引设计
- 查询条件建索引
- 联合索引遵循最左前缀
- 覆盖索引避免回表
- 索引选择性高的字段优先
分库分表
- 水平拆分:数据量大
- 垂直拆分:业务分离
- 分片键选择:均匀分布、避免跨片查询
- 路由算法:hash、range、一致性hash
架构演进
- 单体应用:简单快速
- 垂直拆分:按业务分离
- 服务化:SOA、微服务
- 分布式:中间件、服务网格
- 云原生:容器、K8s