TL;DR(30 秒扫完)
- 量化先行:QPS(如 10 万)、P99 延迟(如 100ms)、可用性(如 99.99%)、错误率(如 <0.1%)
- 架构分层(自上而下):CDN+DDoS 防护 → 网关 → 负载均衡 → 业务层 → 缓存层 → 数据层 → 异步层
- 各层优化:协议(HTTP/2/Protobuf)+ 缓存(多级)+ 数据库(分库分表/读写分离)+ 异步(MQ 削峰)+ 线程模型
- 韧性 + 可观测:限流/熔断/降级 + Prometheus/SkyWalking/ELK
关键结论
结论 A高性能设计第一步是量化目标,没给 SLA 的数字就是空谈
结论 B架构分层是"CDN → 网关 → LB → 业务 → 缓存 → 数据 → 异步",自上而下
结论 C写路径优化和读路径优化都要讲(分库分表/批量写/异步写/CQRS)
结论 D可观测性(Metrics/Tracing/Logging)是必需的,否则不知道哪里出问题
完整讲解(费曼四步)
STEP 1 · 概念
高性能分布式系统是通过分层架构、协议优化、缓存、异步、数据分片等手段,让系统在量化 SLA(QPS/P99/可用性)约束下满足业务需求。STEP 2 · 大白话
类比快递网络:- CDN = 全国仓库(就近取货)
- 网关 = 分拨中心(限流、鉴权)
- 负载均衡 = 快递员调度(分单)
- 缓存 = 常用件预置(快取)
- 数据库 = 总仓(最终存储)
- MQ = 排队通道(削峰)
STEP 3 · 底层
STEP 1:量化目标(80% 候选人缺这步)| 指标 | 目标示例 | 说明 |
|---|---|---|
| QPS/TPS | 10 万 QPS | 每秒查询/事务数 |
| P99 延迟 | <100ms | 99% 请求的响应时间 |
| 可用性 | 99.99% | 允许 4.3 分钟/年不可用 |
| 错误率 | <0.1% | 5xx 或业务错误比例 |
| RPO | <1 秒 | 最多丢失 1 秒数据 |
| RTO | <30 秒 | 故障恢复时间 |
1. 接入层:CDN(静态加速)+ DDoS 防护(Cloudflare/高防 IP)
2. 网关层:Nginx/APISIX/Spring Cloud Gateway(限流/鉴权/路由)
3. 负载均衡层:L4(LVS)+ L7(Nginx)+ 客户端 LB
4. 业务层:无状态微服务,水平扩展
5. 缓存层:多级缓存(Caffeine 本地 + Redis 分布式)
6. 数据层:MySQL 分库分表 + ES(搜索)+ HBase(冷数据)
7. 异步层:Kafka/RocketMQ 削峰、事件驱动
STEP 3:各层优化手段
网络接入层:- CDN:静态资源全球加速
- DDoS 防护:Cloudflare、高防 IP
- 网关:Nginx/APISIX/Spring Cloud Gateway(限流、鉴权、路由)
- L4(LVS)+ L7(Nginx)+ 客户端 LB(Ribbon/LoadBalancer)
- 一致性哈希、会话保持
- HTTP/2 多路复用(避免队头阻塞)
- gRPC(HTTP/2 + Protobuf)
- Protobuf 比 JSON 小 3-10 倍
- TCP 长连接、HTTP keep-alive
- gzip/zstd 压缩
- 多级缓存:本地(Caffeine)→ 分布式(Redis Cluster)→ 数据库
- 缓存穿透:布隆过滤器
- 缓存击穿:互斥锁
- 缓存雪崩:随机 TTL
- 读写分离、分库分表、CQRS
- 连接池(HikariCP)、慢查询监控、批量操作
- 冷热数据分离(ES/HBase 存冷数据)
- MQ(Kafka/RocketMQ)吸收流量峰值
- 事件驱动、最终一致性
- 先写 MQ 再异步落库
- Netty Reactor(Boss + Worker)
- 虚拟线程(JDK21)应对高并发 IO
- 线程池隔离(避免共享池打满)
- 限流(Sentinel 令牌桶)
- 熔断(Hystrix/Sentinel)
- 降级(兜底值)
- 超时/重试/幂等
- Metrics:Prometheus(指标)+ Grafana(可视化)
- Tracing:SkyWalking/Jaeger/OpenTelemetry(链路追踪)
- Logging:ELK(Elasticsearch + Logstash + Kibana)
- CDN + Nginx 限流(按 QPS 8 万)
- 网关做黑名单过滤
- Kafka 削峰(后端按 1000 QPS 消费落库)
- Redis 库存预扣(Lua 原子操作)
- 订单 MQ 异步持久化
- 结果异步通知用户
STEP 4 · 简化
口诀:先量化(QPS/P99/SLO)→ 再分层(CDN/网关/LB/业务/缓存/数据/异步)→ 各层优化 → 韧性 + 可观测。没数字就是空谈。
常见误区
只讲读路径,写路径缺席
写路径(分库分表/批量写/异步写/CQRS)同样重要
数据库层优化缺席
连接池、慢查询、批量、读写分离、分库分表——这是"高性能"的重灾区
协议层优化缺席
HTTP/2 多路复用、Protobuf、压缩——能提性能 3-10 倍
"过滤异常请求"没具体说
是限流?鉴权?参数校验?WAF?必须说清楚
延伸追问
你说 P99 目标 100ms,如何验证?
要点:压测工具(JMeter/AB),指标采集(SkyWalking APM),看 P50/P95/P99 分布;容量规划(单机 QPS × 80% × 机器数 = 系统 QPS)。
多级缓存如何保证一致性?
要点:Cache-Aside 模式(先查缓存,未命中查库并回写);更新时"先更库再删缓存";延迟双删;Redis 发布订阅通知本地缓存失效。
数据库是瓶颈时怎么办?
要点:先看慢查询(SHOW SLOW QUERIES)、加索引、读写分离、分库分表、热点数据缓存、离线任务(ETL 到 ES/HBase)、异步写入(先写 MQ 再异步落库)。
虚拟线程能解决所有高并发问题吗?
要点:虚拟线程对 IO 密集型有效,CPU 密集型无效(还是受限于 CPU 核数);需要 JDK21+;对 synchronized 有 pinning 问题,建议用 ReentrantLock。
速查表
STEP 1:量化目标(QPS 10 万 / P99 100ms / 可用性 99.99% / 错误率 <0.1%)
STEP 2:架构分层(CDN → 网关 → LB → 业务 → 缓存 → 数据 → 异步)
STEP 3:各层优化(协议/缓存/数据库/异步/线程模型)
STEP 4:韧性(限流/熔断/降级/超时/重试/幂等)+ 可观测(Metrics/Tracing/Logging)
秒杀举例:CDN+Nginx 限流 → 网关过滤 → Kafka 削峰 → Redis 预扣 → 异步持久化
关键:没数字就是空谈;写路径和读路径都要讲;协议/缓存/DB 三层缺一不可
Anki 候选卡片
Q: 高性能分布式系统设计第一步是什么?
A: 量化目标(QPS/P99/可用性/错误率)——没数字就是空谈
Q: 架构分层 7 层(自上而下)?
A: CDN+DDoS 防护 → 网关 → 负载均衡 → 业务层 → 缓存层 → 数据层 → 异步层
Q: 各层优化手段(协议/缓存/DB/异步/线程)?
A: HTTP/2+Protobuf(协议)/ 多级缓存(本地+分布式)/ 分库分表+读写分离(DB)/ MQ 削峰(异步)/ Netty Reactor+虚拟线程(线程模型)
Q: 写路径优化和读路径优化?
A: 读路径(缓存+索引);写路径(分库分表/批量写/异步写/CQRS)
Q: 可观测性三大支柱?
A: Metrics(Prometheus+Grafana)/ Tracing(SkyWalking/Jaeger/OpenTelemetry)/ Logging(ELK)
Q: 多级缓存如何保证一致性?
A: Cache-Aside 先查缓存未命中查库回写;更新时"先更库再删缓存";延迟双删;Redis 发布订阅通知本地缓存失效
Q: 秒杀场景的性能优化举例?
A: CDN+Nginx 限流 → 网关过滤 → Kafka 削峰(后端 1000 QPS 消费)→ Redis 库存预扣(Lua 原子)→ 订单 MQ 异步持久化;P99 <200ms
关联题目
关联知识
先量化目标(QPS/P99/SLO)再分层;7 层架构 + 各层优化 + 韧性+可观测
✦ 记 忆 口 诀 ✦
先量化再分层 / 7 层架构 / 韧性+可观测
关键可视化
暂无可视化
知识关系
⬆️ 前置(Prerequisite)
暂无🔄 延伸(Extends)
暂无⚡ 对比(Contrast)
暂无
🎯 概念
📏 规则
⚠️ 误区
🔍 追问
✨ 口诀
共 0 张卡,点击翻面