14448af731
- 添加案例、新闻、产品详情页面的E2E测试 - 优化详情页面的客户端组件和页面逻辑 - 添加高性能Docker配置和Nginx配置 - 更新API服务和常量配置 - 添加性能优化文档和任务进度更新 - 修复ESLint错误和类型问题
246 lines
5.1 KiB
Markdown
246 lines
5.1 KiB
Markdown
# 高并发性能优化方案
|
||
|
||
## 问题分析
|
||
|
||
根据性能测试结果,系统在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/) |