Add Redis-backed chat queue
This commit is contained in:
@@ -381,3 +381,38 @@
|
||||
1. 不改变知识库召回排序和 Prompt 构建。
|
||||
2. 不缓存用户问题、模型回答和用户隐私信息。
|
||||
3. 不把飞书读取失败结果长时间缓存,避免权限/配置修复后仍命中错误缓存。
|
||||
|
||||
## 阶段 4A 实施记录
|
||||
|
||||
2026-07-08 完成 Redis 全局问答队列第一版。
|
||||
|
||||
已完成:
|
||||
|
||||
1. 后端增加 Redis 依赖和 `REDIS_URL` 配置。
|
||||
2. dev compose 增加 `redis` 服务,后端默认连接 `redis://redis:6379/0`。
|
||||
3. 新增 `RedisChatQueueManager`:
|
||||
- 使用 Redis sorted set 保存 active 请求 token 和过期时间。
|
||||
- 使用 Redis list 保存等待队列 token。
|
||||
- 使用 Lua 脚本保证申请名额、入队、队首晋升等操作的原子性。
|
||||
4. 新增 `chat_queue_runtime`:
|
||||
- Redis 可用时优先使用 Redis 全局队列。
|
||||
- Redis 不可用或运行时异常时,自动回退到原进程内队列。
|
||||
5. active token 增加租约过期时间,默认 `chat_active_lease_seconds=900`,避免 worker 异常退出后永久占用并发名额。
|
||||
6. 管理后台系统设置新增“问答执行租约(秒)”配置。
|
||||
7. 用户端 SSE 协议未变化。
|
||||
|
||||
验证记录:
|
||||
|
||||
1. 本机 `compileall` 检查通过。
|
||||
2. `git diff --check` 通过。
|
||||
3. Docker dev 环境已新增并启动 Redis,Redis 健康检查通过。
|
||||
4. 容器内 Redis 队列行为验证通过:第一个请求获得执行名额,第二个请求进入排队,第三个请求被拒绝,释放名额后第二个请求恢复执行。
|
||||
5. 后端健康检查通过。
|
||||
6. 真实 `/chat/completions` 验证通过:首个事件为 `generating`,随后返回 `content`,最后返回 `[DONE]`。
|
||||
7. 真实会话历史验证通过:流式完成后用户消息和助手消息均已落库。
|
||||
|
||||
阶段限制:
|
||||
|
||||
1. 当前 Redis 队列使用轮询晋升等待请求,下一步可以结合 Pub/Sub 或 blocking pop 降低等待侧轮询。
|
||||
2. Redis 飞书共享缓存还未接入,将在阶段 4B 完成。
|
||||
3. 生产部署需要确认 Redis 持久化、内存上限、淘汰策略和监控告警。
|
||||
|
||||
Reference in New Issue
Block a user