diff --git a/cosmic-greeting-lantern.md b/cosmic-greeting-lantern.md new file mode 100644 index 0000000..7b52edb --- /dev/null +++ b/cosmic-greeting-lantern.md @@ -0,0 +1,199 @@ +# 多并发支持规划 (100 持续在线用户) + +## Context + +用户需要为 AI Chat UI 项目支持 100 个持续在线用户,需要数据持久化,使用裸机部署 (systemd 服务管理)。 + +## 需求确认 +- **并发类型**: 持续在线 (日常稳定有100个用户在线使用) +- **会话存储**: 需要持久化 (支持多实例部署) +- **部署方式**: 裸机部署 (systemd 管理) + +--- + +## 实现方案 + +### 阶段 1: 后端多进程支持 (核心) + +**目标**: 使用 Gunicorn + Uvicorn workers 实现多进程 + +**修改文件**: +1. `server/requirements.txt` - 添加 gunicorn +2. 新建 `server/gunicorn.conf.py` - Gunicorn 配置文件 +3. 新建 `server/start.sh` - 启动脚本 + +**关键配置** (`server/gunicorn.conf.py`): +```python +import multiprocessing + +workers = multiprocessing.cpu_count() * 2 + 1 # 推荐配置 +worker_class = "uvicorn.workers.UvicornWorker" +bind = "0.0.0.0:8000" +keepalive = 120 +timeout = 300 # AI 响应可能较慢 +graceful_timeout = 30 +``` + +--- + +### 阶段 2: 会话持久化 (Redis) + +**目标**: 使用 Redis 替代内存存储,支持多进程共享数据 + +**修改文件**: +1. `server/requirements.txt` - 添加 redis +2. 新建 `server/utils/redis_store.py` - Redis 存储层 +3. 修改 `server/api/chat_routes.py` - 替换 `conversations_db` 字典 + +**Redis 数据结构设计**: +``` +conversations:{conversation_id} -> JSON (单个对话详情) +conversations:list -> Sorted Set (按更新时间排序的ID列表) +``` + +**安装 Redis (Ubuntu/Debian)**: +```bash +sudo apt install redis-server +sudo systemctl enable redis-server +sudo systemctl start redis-server +``` + +--- + +### 阶段 3: 请求限流 + +**目标**: 防止 API 过载 + +**修改文件**: +1. `server/requirements.txt` - 添加 slowapi +2. 新建 `server/middleware/rate_limit.py` +3. 修改 `server/main.py` - 注册限流中间件 + +**限流策略**: +- 聊天接口: 30 请求/分钟/IP (长连接场景) +- 其他接口: 100 请求/分钟/IP + +--- + +### 阶段 4: Systemd 服务配置 + +**新建文件**: `server/ai-chat.service` + +```ini +[Unit] +Description=AI Chat Backend Service +After=network.target redis.service + +[Service] +Type=exec +User=mt +WorkingDirectory=/home/mt/project/ai-chat-ui/server +Environment="PATH=/home/mt/project/ai-chat-ui/server/.venv/bin" +Environment="LLM_BACKEND=glm" +Environment="REDIS_URL=redis://localhost:6379" +ExecStart=/home/mt/project/ai-chat-ui/server/.venv/bin/gunicorn main:app -c gunicorn.conf.py +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +``` + +**安装服务**: +```bash +sudo cp server/ai-chat.service /etc/systemd/system/ +sudo systemctl daemon-reload +sudo systemctl enable ai-chat +sudo systemctl start ai-chat +``` + +--- + +### 阶段 5: Nginx 反向代理 (可选但推荐) + +**新建文件**: `nginx/ai-chat.conf` + +```nginx +upstream backend { + server 127.0.0.1:8000; + keepalive 32; +} + +server { + listen 80; + server_name your-domain.com; + + # 前端静态文件 + location /chat-ui/ { + root /home/mt/project/ai-chat-ui/dist; + try_files $uri $uri/ /index.html; + } + + # API 代理 + location /api/ { + proxy_pass http://backend; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + + # SSE 支持 + proxy_set_header Connection ''; + proxy_buffering off; + proxy_cache off; + proxy_read_timeout 300s; + } +} +``` + +--- + +## 关键文件修改清单 + +| 文件 | 操作 | 说明 | +|------|------|------| +| `server/requirements.txt` | 修改 | 添加 gunicorn, redis, slowapi | +| `server/gunicorn.conf.py` | 新建 | 多进程配置 | +| `server/start.sh` | 新建 | 启动脚本 | +| `server/utils/redis_store.py` | 新建 | Redis 存储层 | +| `server/api/chat_routes.py` | 修改 | 集成 Redis 存储 | +| `server/middleware/rate_limit.py` | 新建 | 限流中间件 | +| `server/main.py` | 修改 | 注册中间件 | +| `server/ai-chat.service` | 新建 | Systemd 服务配置 | + +--- + +## 验证方案 + +1. **服务状态检查**: + ```bash + sudo systemctl status ai-chat + curl http://localhost:8000/health + ``` + +2. **并发压测**: + ```bash + # 安装 wrk + sudo apt install wrk + # 测试 100 并发 + wrk -t4 -c100 -d30s http://localhost:8000/api/chat-ui/models + ``` + +3. **Redis 验证**: + ```bash + redis-cli ping + redis-cli keys "conversations:*" + ``` + +4. **日志监控**: + ```bash + sudo journalctl -u ai-chat -f + ``` + +--- + +## 风险与注意事项 + +1. **SSE 长连接** - Gunicorn 需要配置 `keepalive` 和 `timeout` +2. **Redis 内存** - 根据对话数量规划,建议至少 512MB +3. **API 配额** - 智谱/阿里云 API 有速率限制,注意监控 +4. **日志轮转** - 配置 logrotate 防止日志文件过大 \ No newline at end of file diff --git a/index.html b/index.html index 5d20284..56b15f3 100644 --- a/index.html +++ b/index.html @@ -1,16 +1,19 @@ - + - + AI-CHAT-UI - 企业级智能对话 - - - - - -
- - - \ No newline at end of file + + + + + +
+ + + diff --git a/need-1.txt b/need-1.txt new file mode 100644 index 0000000..c26c5d0 --- /dev/null +++ b/need-1.txt @@ -0,0 +1,37 @@ +
+