docs: 整理文档结构并创建索引(任务 2.3/20)
This commit is contained in:
@@ -0,0 +1,246 @@
|
||||
# 高并发性能优化方案
|
||||
|
||||
## 问题分析
|
||||
|
||||
根据性能测试结果,系统在200 VUs并发时出现崩溃,主要问题包括:
|
||||
- 单实例无法处理高并发请求
|
||||
- 缺乏负载均衡机制
|
||||
- 没有缓存策略
|
||||
- 资源限制导致内存溢出
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 1. 多实例部署 + 负载均衡
|
||||
|
||||
#### Docker Compose 部署方案
|
||||
|
||||
使用 `docker-compose.high-perf.yml` 启动3个应用实例:
|
||||
|
||||
```bash
|
||||
# 构建并启动高性能配置
|
||||
docker-compose -f docker-compose.high-perf.yml up -d --build
|
||||
|
||||
# 查看服务状态
|
||||
docker-compose -f docker-compose.high-perf.yml ps
|
||||
|
||||
# 查看日志
|
||||
docker-compose -f docker-compose.high-perf.yml logs -f
|
||||
```
|
||||
|
||||
#### PM2 部署方案
|
||||
|
||||
使用 PM2 管理多个应用实例:
|
||||
|
||||
```bash
|
||||
# 安装 PM2
|
||||
npm install -g pm2
|
||||
|
||||
# 启动多实例
|
||||
pm2 start ecosystem.config.js
|
||||
|
||||
# 查看状态
|
||||
pm2 status
|
||||
|
||||
# 查看日志
|
||||
pm2 logs
|
||||
|
||||
# 重启服务
|
||||
pm2 restart all
|
||||
|
||||
# 停止服务
|
||||
pm2 stop all
|
||||
```
|
||||
|
||||
### 2. Nginx 负载均衡配置
|
||||
|
||||
#### 主要特性
|
||||
|
||||
1. **负载均衡算法**:`least_conn` - 最少连接数
|
||||
2. **健康检查**:自动检测实例健康状态
|
||||
3. **故障转移**:实例故障时自动切换
|
||||
4. **缓存策略**:静态资源和API响应缓存
|
||||
5. **限流保护**:防止DDoS攻击
|
||||
6. **连接优化**:提高并发处理能力
|
||||
|
||||
#### 配置说明
|
||||
|
||||
- **upstream backend**:3个应用实例的负载均衡池
|
||||
- **proxy_cache**:响应缓存,减少后端压力
|
||||
- **limit_req**:请求限流,保护后端
|
||||
- **gzip**:响应压缩,减少带宽占用
|
||||
|
||||
### 3. 性能优化配置
|
||||
|
||||
#### Next.js 配置优化
|
||||
|
||||
已配置的性能优化:
|
||||
- ✅ 图片优化(AVIF/WebP格式)
|
||||
- ✅ 静态资源缓存
|
||||
- ✅ Gzip压缩
|
||||
- ✅ 包导入优化
|
||||
- ✅ 生产模式移除console
|
||||
|
||||
#### 数据库优化
|
||||
|
||||
建议添加:
|
||||
```typescript
|
||||
// 连接池配置
|
||||
const dbConfig = {
|
||||
max: 20, // 最大连接数
|
||||
min: 5, // 最小连接数
|
||||
idle: 10000, // 空闲连接超时
|
||||
acquire: 30000, // 获取连接超时
|
||||
}
|
||||
```
|
||||
|
||||
#### 缓存策略
|
||||
|
||||
建议添加 Redis 缓存:
|
||||
```bash
|
||||
# 添加 Redis 到 docker-compose
|
||||
redis:
|
||||
image: redis:alpine
|
||||
container_name: novalon-redis
|
||||
ports:
|
||||
- "6379:6379"
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
networks:
|
||||
- novalon-network
|
||||
```
|
||||
|
||||
### 4. 监控和告警
|
||||
|
||||
#### 健康检查
|
||||
|
||||
所有实例都配置了健康检查:
|
||||
- 检查端点:`/api/health`
|
||||
- 检查间隔:30秒
|
||||
- 超时时间:10秒
|
||||
- 重试次数:3次
|
||||
|
||||
#### 性能监控
|
||||
|
||||
建议配置:
|
||||
1. **Sentry** - 错误监控
|
||||
2. **UptimeRobot** - 可用性监控
|
||||
3. **Next.js Analytics** - 性能监控
|
||||
4. **Prometheus + Grafana** - 指标监控
|
||||
|
||||
## 部署步骤
|
||||
|
||||
### 开发环境测试
|
||||
|
||||
```bash
|
||||
# 1. 构建应用
|
||||
npm run build
|
||||
|
||||
# 2. 启动多实例(开发环境)
|
||||
docker-compose -f docker-compose.high-perf.yml up -d
|
||||
|
||||
# 3. 运行性能测试
|
||||
npm run test:performance
|
||||
|
||||
# 4. 查看结果
|
||||
cat performance/load-test-summary.json
|
||||
```
|
||||
|
||||
### 生产环境部署
|
||||
|
||||
```bash
|
||||
# 1. 配置环境变量
|
||||
cp .env.example .env.production
|
||||
# 编辑 .env.production 文件
|
||||
|
||||
# 2. 配置SSL证书(如需要)
|
||||
mkdir -p ssl
|
||||
# 将证书文件放入 ssl 目录
|
||||
|
||||
# 3. 启动生产环境
|
||||
docker-compose -f docker-compose.high-perf.yml up -d --build
|
||||
|
||||
# 4. 配置域名DNS
|
||||
# 将域名指向服务器IP
|
||||
|
||||
# 5. 配置防火墙
|
||||
# 开放端口 80, 443
|
||||
```
|
||||
|
||||
## 性能指标目标
|
||||
|
||||
| 指标 | 当前 | 目标 | 改进措施 |
|
||||
|------|------|------|----------|
|
||||
| 并发用户数 | 50 VUs | 500+ VUs | 多实例 + 负载均衡 |
|
||||
| 响应时间 (P95) | <500ms | <200ms | 缓存 + CDN |
|
||||
| 错误率 | <1% | <0.1% | 健康检查 + 故障转移 |
|
||||
| 可用性 | 99% | 99.9% | 多实例 + 自动重启 |
|
||||
|
||||
## 故障排查
|
||||
|
||||
### 实例崩溃
|
||||
|
||||
```bash
|
||||
# 查看实例日志
|
||||
docker-compose -f docker-compose.high-perf.yml logs app1
|
||||
|
||||
# 查看资源使用
|
||||
docker stats novalon-app-1
|
||||
|
||||
# 重启单个实例
|
||||
docker-compose -f docker-compose.high-perf.yml restart app1
|
||||
```
|
||||
|
||||
### 性能下降
|
||||
|
||||
```bash
|
||||
# 检查Nginx状态
|
||||
docker exec novalon-nginx nginx -t
|
||||
|
||||
# 查看Nginx日志
|
||||
docker exec novalon-nginx cat /var/log/nginx/access.log
|
||||
|
||||
# 检查缓存状态
|
||||
docker exec novalon-nginx ls -lh /var/cache/nginx
|
||||
```
|
||||
|
||||
### 内存溢出
|
||||
|
||||
```bash
|
||||
# 查看内存使用
|
||||
docker stats --no-stream
|
||||
|
||||
# 增加内存限制
|
||||
# 编辑 docker-compose.high-perf.yml
|
||||
# 调整 deploy.resources.limits.memory
|
||||
|
||||
# 重启服务
|
||||
docker-compose -f docker-compose.high-perf.yml up -d
|
||||
```
|
||||
|
||||
## 成本估算
|
||||
|
||||
### 单实例部署
|
||||
- 服务器:2核4G
|
||||
- 月成本:约 ¥200-300
|
||||
- 并发能力:50 VUs
|
||||
|
||||
### 多实例部署(推荐)
|
||||
- 服务器:4核8G
|
||||
- 月成本:约 ¥400-600
|
||||
- 并发能力:500+ VUs
|
||||
- 可用性:99.9%
|
||||
|
||||
## 下一步优化
|
||||
|
||||
1. **CDN加速**:使用CloudFlare或阿里云CDN
|
||||
2. **数据库优化**:添加Redis缓存层
|
||||
3. **自动扩缩容**:根据负载自动调整实例数量
|
||||
4. **容器编排**:迁移到Kubernetes
|
||||
5. **性能监控**:配置完整的监控告警系统
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [Next.js Production Best Practices](https://nextjs.org/docs/deployment)
|
||||
- [Nginx Load Balancing](https://docs.nginx.com/nginx/admin-guide/load-balancer/)
|
||||
- [PM2 Cluster Mode](https://pm2.keymetrics.io/docs/usage/cluster-mode/)
|
||||
- [Docker Compose Production](https://docs.docker.com/compose/production/)
|
||||
Reference in New Issue
Block a user