Files
novalon-website/docs/deployment/PERFORMANCE_OPTIMIZATION.md
T

246 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 高并发性能优化方案
## 问题分析
根据性能测试结果,系统在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/)