# 高并发性能优化方案 ## 问题分析 根据性能测试结果,系统在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/)