1. 架构层面的优化
(1)负载均衡(Load Balancing)
- Nginx + 反向代理:分发流量到多个后端服务器。
- DNS 轮询:基于 DNS 解析多个服务器 IP,进行流量分发。
- LVS(Linux Virtual Server):基于 IP 负载均衡,提高吞吐量。
(2)微服务架构
- Spring Cloud / Dubbo:拆分单体架构,独立部署服务。
- 服务注册与发现(Eureka / Nacos):动态管理微服务实例。
- API 网关(Gateway / Kong):统一流量入口,进行限流、认证。
2. 数据库优化
(1)读写分离
- 主从数据库(Master-Slave):主库负责写,从库负责读,提高并发能力。
- MySQL Replication + 读写分离代理(MyCat、ShardingSphere)。
(2)分库分表
- 垂直拆分:按业务模块拆分不同的数据库。
- 水平拆分:按某个字段(如用户 ID、订单 ID)进行哈希分片。
(3)索引优化
- 适当增加索引:如 B+ 树索引、覆盖索引,减少全表扫描。
- 避免索引失效:如
LIKE '%xx%'
、!=
、or
、函数操作
等。
(4)SQL 优化
- 减少 JOIN 操作,使用 NoSQL 或缓存存储部分数据。
- 批量插入、更新,如
batch insert
、replace into
、insert ignore
。
3. 缓存优化
(1)本地缓存(单机高效访问)
- Guava Cache、Caffeine:适用于短期热点数据。
(2)分布式缓存
-
Redis:常见应用场景:
- 数据缓存(热点数据、排行榜、用户会话)。
- 分布式锁(基于
SET NX
或 Redisson)。 - 计数器(如限流、点赞数、浏览量)。
- 消息队列(Stream):作为轻量级 MQ 方案。
-
Memcached:适用于大规模 key-value 读写,适用于高吞吐的场景。
(3)缓存穿透、雪崩、击穿问题
-
缓存穿透(查询一个不存在的 key,导致数据库压力大)
- 解决方案:布隆过滤器(Bloom Filter)、缓存空值。
-
缓存雪崩(大量缓存同时失效,导致数据库压力暴增)
- 解决方案:缓存数据加随机过期时间,避免同一时间失效。
-
缓存击穿(单个热点 key 失效后,短时间内大量请求打到数据库)
- 解决方案:
- 设置互斥锁(如
setnx
限制并发)。 - 使用永不过期 key,由后台异步更新。
- 设置互斥锁(如
- 解决方案:
4. 异步处理与消息队列
(1)线程池优化
- 合理使用线程池(ThreadPoolExecutor)
- 减少创建线程的开销,控制最大并发数。
- 拒绝策略(CallerRunsPolicy、DiscardPolicy)。
- 使用 CompletableFuture,提高异步任务吞吐量。
(2)消息队列(MQ)
- Kafka / RocketMQ / RabbitMQ:
- 削峰填谷:削弱瞬时高并发请求对数据库的压力。
- 异步解耦:如订单系统与支付系统解耦。
- 日志采集、用户行为分析。
5. 限流与熔断
(1)限流
- Redis 令牌桶 / 漏桶算法:控制 QPS(每秒查询量)。
- Guava RateLimiter:基于令牌桶实现速率限制。
- Nginx 限流:使用
limit_req_zone
进行流量控制。
(2)熔断与降级
- Sentinel / Resilience4j:
- 熔断机制(Circuit Breaker):当服务不可用时,快速失败,避免拖垮整个系统。
- 降级策略:当服务不可用时,返回默认数据(如“稍后再试”)。
6. 分布式锁
-
Redis 分布式锁
SET key value NX PX 30000
- Redisson(更安全可靠)
-
ZooKeeper 分布式锁
- 通过临时顺序节点实现分布式锁。
7. CDN 与前端优化
-
CDN(内容分发网络):
- 提供静态资源(图片、JS、CSS)加速。
- 适用于全球用户访问优化(如 AWS CloudFront、阿里云 CDN)。
-
前端缓存:
- 使用
ETag
、Cache-Control
,减少请求。 - 采用前端页面静态化,如 SSR(Server-Side Rendering)。
- 使用
8. 高可用架构
(1)服务集群与故障转移
- 使用 Kubernetes(K8s)、Docker 容器编排,实现动态扩展和自动恢复。
- 数据库高可用
- MySQL 主从架构 + MHA / MySQL Proxy / TiDB。
(2)日志分析与监控
- ELK(Elasticsearch + Logstash + Kibana),实时监控系统日志。
- Prometheus + Grafana,监控服务器与微服务健康状态。
总结
方案 | 作用 |
---|---|
负载均衡 | 通过 Nginx/LVS/K8s 进行流量分发 |
数据库优化 | 读写分离、分库分表、索引优化 |
缓存 | Redis/Memcached 解决高并发访问问题 |
消息队列 | Kafka/RabbitMQ 进行异步处理,削峰填谷 |
限流与熔断 | Sentinel/RateLimiter 控制流量 |
分布式锁 | Redis/ZooKeeper 保证分布式环境数据一致性 |
CDN & 前端优化 | 静态资源缓存,提高访问速度 |
高可用架构 | K8s + Docker 实现服务弹性扩展 |