feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
# 髟ソ譌カ髣エ莉サ蜉。蜿ッ髱<EFBDAF>諤ァ蛻<EFBDA7>梵<EFBFBD>哺emoryQueue vs Redis髦溷<E9ABA6>
|
||||
|
||||
> **场景:** 1000篇文献筛选,预计2小时处理时间
|
||||
> **当前方案:** MemoryQueue(内存队列)
|
||||
> **问题:** 能否可靠完成?
|
||||
> **结论:** ❌ **不能**
|
||||
> **蝨コ譎ッ<EFBFBD>?* 1000遽<30>枚迪ョ遲幃会シ碁「<E7A281>ョ。2蟆乗慮螟<E685AE>炊譌カ髣エ
|
||||
> **蠖灘燕譁ケ譯茨シ?* MemoryQueue<EFBFBD>亥<EFBFBD>蟄倬弌蛻暦シ<EFBFBD>
|
||||
> **髣ョ鬚假シ?* 閭ス蜷ヲ蜿ッ髱<EFBDAF>螳梧<E89EB3><E6A2A7>?
|
||||
> **扈楢ョコ<EFBFBD>?* 笶?**荳崎<E88DB3>**
|
||||
|
||||
---
|
||||
|
||||
@@ -11,103 +11,103 @@
|
||||
|
||||
### 莉サ蜉。迚ケ蠕<EFBDB9>
|
||||
```
|
||||
任务类型:文献筛选(标题摘要初筛)
|
||||
文献数量:1000篇
|
||||
单篇耗时:6-10秒(双模型并行)
|
||||
总耗时:6000-10000秒 = 100-167分钟 ≈ 2小时
|
||||
莉サ蜉。邀サ蝙具シ壽枚迪ョ遲幃会シ域<EFBFBD><EFBFBD>「俶遭隕∝<EFBFBD>遲幢シ?
|
||||
譁<EFBFBD>鍵謨ー驥擾シ?000遽?
|
||||
蜊慕ッ<EFBFBD>玲慮<EFBFBD>?-10遘抵シ亥曙讓。蝙句ケカ陦鯉シ<E9AF89>
|
||||
諤サ閠玲慮<EFBFBD>?000-10000遘?= 100-167蛻<EFBFBD>帖 竕?2蟆乗慮
|
||||
```
|
||||
|
||||
### 蠖灘燕螳樒鴫
|
||||
```typescript
|
||||
// backend/src/modules/asl/services/screeningService.ts (第65行)
|
||||
// backend/src/modules/asl/services/screeningService.ts (隨?5陦?
|
||||
|
||||
// 4. 异步处理文献(简化版:直接在这里处理)
|
||||
// 生产环境应该发送到消息队列 ← 注意这行注释!
|
||||
// 4. 蠑よュ・螟<EFBFBD>炊譁<EFBFBD>鍵<EFBFBD>育ョ蛹也沿<EFBFBD>夂峩謗・蝨ィ霑咎㈹螟<EFBFBD>炊<EFBFBD>?
|
||||
// 逕滉コァ邇ッ蠅<EFBFBD>コ碑ッ・蜿鷹∝芦豸域<EFBFBD>髦溷<EFBFBD> 竊?豕ィ諢剰ソ呵。梧ウィ驥奇シ?
|
||||
processLiteraturesInBackground(task.id, projectId, literatures);
|
||||
|
||||
// 霑吩クェ蜃ス謨ー莨夲シ<E5A4B2>
|
||||
// 1. 运行在当前Node进程中
|
||||
// 2. 串行处理1000篇文献
|
||||
// 3. 没有持久化(全在内存)
|
||||
// 1. 霑占。悟惠蠖灘燕Node霑帷ィ倶ク?
|
||||
// 2. 荳イ陦悟、<EFBFBD>炊1000遽<EFBFBD>枚迪?
|
||||
// 3. 豐。譛画戟荵<EFBFBD>喧<EFBFBD>亥<EFBFBD>蝨ィ蜀<EFBFBD>ュ假シ?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ❌ **MemoryQueue的致命问题**
|
||||
## 笶?**MemoryQueue逧<EFBFBD><EFBFBD>蜻ス髣ョ鬚?*
|
||||
|
||||
### 问题1:SAE实例会被自动销毁 🔥 **最严重**
|
||||
### 髣ョ鬚<EFBFBD>1<EFBFBD>售AE螳樔セ倶シ夊「ォ閾ェ蜉ィ髞豈?<3F>櫨 **譛荳・驥<EFBDA5>**
|
||||
|
||||
#### **Serverless的本质:按需计费 = 按需销毁**
|
||||
#### **Serverless逧<EFBFBD>悽雍ィ<EFBFBD>壽潔髴隶。雍ケ = 謖蛾怙髞豈?*
|
||||
|
||||
```
|
||||
髦ソ驥御コ全AE逧<EFBFBD><EFBFBD>蜉ィ郛ゥ螳ケ遲也払<EFBFBD><EFBFBD>
|
||||
├─ 无流量时:15分钟后缩容到0
|
||||
笏懌楳 譌<>豬<EFBFBD>㍼譌カ<E8AD8C>?5蛻<35>帖蜷守シゥ螳ケ蛻ー0
|
||||
笏懌楳 菴取オ<E58F96>㍼譌カ<E8AD8C>夂シゥ蜃丞ョ樔セ区焚
|
||||
├─ 夜间时段:自动缩容(节省成本)
|
||||
└─ 系统升级:实例重启
|
||||
笏懌楳 螟憺龍譌カ谿オ<E8B0BF>夊<EFBFBD>蜉ィ郛ゥ螳ケ<E89EB3>郁鰍逵∵<E980B5>譛ャ<E8AD9B>?
|
||||
笏披楳 邉サ扈溷合郤ァ<E983A4>壼ョ樔セ矩㍾蜷?
|
||||
```
|
||||
|
||||
#### **2小时任务的风险评估**
|
||||
#### **2蟆乗慮莉サ蜉。逧<EFBFBD>」朱勦隸<EFBFBD>シ?*
|
||||
|
||||
| 时段 | SAE实例销毁概率 | 说明 |
|
||||
| 譌カ谿オ | SAE螳樔セ矩楳豈∵ヲら<EFBFBD>?| 隸エ譏<EFBDB4> |
|
||||
|------|----------------|------|
|
||||
| **工作时间(9:00-18:00)** | 🟡 30-50% | 流量波动导致缩容 |
|
||||
| **夜间时段(22:00-06:00)** | 🔴 80-95% | 自动缩容策略 |
|
||||
| **周末/节假日** | 🔴 70-90% | 低流量时段 |
|
||||
| **蟾・菴懈慮髣エ<EFBFBD>?:00-18:00<EFBFBD>?* | <EFBFBD>泯 30-50% | 豬<EFBFBD>㍼豕「蜉ィ蟇シ閾エ郛ゥ螳ケ |
|
||||
| **螟憺龍譌カ谿オ<EFBFBD>?2:00-06:00<EFBFBD>?* | <EFBFBD>閥 80-95% | 閾ェ蜉ィ郛ゥ螳ケ遲也払 |
|
||||
| **蜻ィ譛ォ/闃ょ∞譌?* | <EFBFBD>閥 70-90% | 菴取オ<EFBFBD>㍼譌カ谿?|
|
||||
|
||||
**真实场景模拟**:
|
||||
**逵溷ョ槫惻譎ッ讓。諡<EFBFBD>**<EFBFBD>?
|
||||
```
|
||||
21:00 用户提交1000篇文献筛选
|
||||
21:00 SAE实例开始处理(预计2小时完成)
|
||||
21:15 前端有用户访问(实例存活)
|
||||
21:00 逕ィ謌キ謠蝉コ、1000遽<EFBFBD>枚迪ョ遲幃?
|
||||
21:00 SAE螳樔セ句シ蟋句、<EFBFBD>炊<EFBFBD>磯「<EFBFBD>ョ。2蟆乗慮螳梧<EFBFBD><EFBFBD>?
|
||||
21:15 蜑咲ォッ譛臥畑謌キ隶ソ髣ョ<EFBFBD>亥ョ樔セ句ュ俶エサ<EFBFBD>?
|
||||
22:00 逕ィ謌キ荳狗少蝗槫ョカ<EFBDAE>域裏譁ー隶ソ髣ョ<E9ABA3><EFBDAE>
|
||||
22:15 SAE检测:15分钟无流量 → 准备缩容
|
||||
22:16 ❌ 实例被销毁
|
||||
└─ 任务进度:150/1000(15%)
|
||||
22:15 SAE譽豬具シ<EFBFBD>15蛻<EFBFBD>帖譌<EFBFBD>豬<EFBFBD><EFBFBD>?竊?蜃<>、<EFBFBD>シゥ螳ケ
|
||||
22:16 笶?螳樔セ玖「ォ髞豈?
|
||||
笏披楳 莉サ蜉。霑帛コヲ<EFBDBA>?50/1000<EFBFBD>?5%<25>?
|
||||
笏披楳 扈捺棡<E68DBA>壻ササ蜉。荳「螟ア<E89E9F>悟燕蜉溷ース蠑<EFBDBD>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 问题2:进程崩溃无法恢复
|
||||
### 髣ョ鬚<EFBFBD>2<EFBFBD>夊ソ帷ィ句エゥ貅<EFBFBD>裏豕墓△螟?
|
||||
|
||||
```typescript
|
||||
// 当前实现(简化版)
|
||||
// 蠖灘燕螳樒鴫<EFBFBD>育ョ蛹也沿<EFBFBD>?
|
||||
async function processLiteraturesInBackground(taskId, projectId, literatures) {
|
||||
for (const lit of literatures) {
|
||||
try {
|
||||
// 螟<>炊蜊慕ッ<E68595>枚迪ョ<E8BFAA>郁玲慮6-10遘抵シ<E68AB5>
|
||||
await processLiterature(lit);
|
||||
} catch (error) {
|
||||
// 某篇失败,继续下一篇
|
||||
// 譟千ッ<EFBFBD>、ア雍・<EFBFBD>檎サァ扈ュ荳倶ク遽?
|
||||
logger.error('Failed to process literature', { error });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 风险:
|
||||
// 鬟朱勦<EFBFBD>?
|
||||
// 1. 螯よ棡Node霑帷ィ句エゥ貅<EFBDA9>シ<EFBFBD>OM縲∵悴謐戊執蠑ょクク<EFBDB8>俄<EFBFBD> 蜈ィ驛ィ荳「螟ア
|
||||
// 2. 如果DB连接断开 → 无法保存进度
|
||||
// 3. 如果API限流 → 任务卡死
|
||||
// 4. 没有断点续传 → 必须重头开始
|
||||
// 2. 螯よ棡DB霑樊磁譁ュ蠑 竊?譌<>豕穂ソ晏ュ倩ソ帛コヲ
|
||||
// 3. 螯よ棡API髯先オ<EFBFBD> 竊?莉サ蜉。蜊。豁サ
|
||||
// 4. 豐。譛画妙轤ケ扈ュ莨<EFBFBD> 竊?蠢<>。サ驥榊、エ蠑蟋?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 问题3:无法监控真实进度
|
||||
### 髣ョ鬚<EFBFBD>3<EFBFBD>壽裏豕慕尅謗ァ逵溷ョ櫁ソ帛コ?
|
||||
|
||||
```typescript
|
||||
// 当前实现的进度更新
|
||||
// 蠖灘燕螳樒鴫逧<EFBFBD>ソ帛コヲ譖エ譁?
|
||||
await prisma.aslScreeningTask.update({
|
||||
where: { id: taskId },
|
||||
data: { processedItems: processedCount }
|
||||
});
|
||||
|
||||
// 问题:
|
||||
// 髣ョ鬚假シ?
|
||||
// - 霑帛コヲ蜿ェ蟄伜惠謨ー謐ョ蠎<EFBDAE>
|
||||
// - 任务状态在内存中
|
||||
// - 莉サ蜉。迥カ諤∝惠蜀<EFBFBD>ュ倅ク?
|
||||
// - 螳樔セ矩楳豈∝錘<E2889D>梧焚謐ョ蠎捺仞遉コ processedItems: 150
|
||||
// - 但任务实际已丢失,无法恢复
|
||||
// - 菴<EFBFBD>ササ蜉。螳樣刔蟾イ荳「螟ア<EFBFBD>梧裏豕墓△螟?
|
||||
```
|
||||
|
||||
---
|
||||
@@ -115,24 +115,24 @@ await prisma.aslScreeningTask.update({
|
||||
### 髣ョ鬚<EFBDAE>4<EFBFBD>壼、壼ョ樔セ句<EFBDBE>遯<EFBFBD>
|
||||
|
||||
```
|
||||
场景:SAE有2个实例
|
||||
蝨コ譎ッ<EFBFBD>售AE譛?荳ェ螳樔セ?
|
||||
|
||||
用户提交任务 → 实例A开始处理
|
||||
↓
|
||||
处理到500篇时,实例A销毁
|
||||
↓
|
||||
用户刷新页面 → 请求路由到实例B
|
||||
↓
|
||||
逕ィ謌キ謠蝉コ、莉サ蜉。 竊?螳樔セ帰蠑蟋句、<E58FA5><EFBDA4>?
|
||||
竊?
|
||||
螟<EFBFBD>炊蛻?00遽<30>慮<EFBFBD>悟ョ樔セ帰髞豈?
|
||||
竊?
|
||||
逕ィ謌キ蛻キ譁ー鬘オ髱「 竊?隸キ豎りキッ逕ア蛻ー螳樔セ毅
|
||||
竊?
|
||||
螳樔セ毅隸サ蜿紋ササ蜉。迥カ諤<EFBFBD>シ嗔rocessedItems: 500
|
||||
↓
|
||||
竊?
|
||||
螳樔セ毅荳咲衍驕謎ササ蜉。蟾イ荳ュ譁ュ
|
||||
↓
|
||||
❌ 任务显示"进行中",但实际没人在处理
|
||||
竊?
|
||||
笶?莉サ蜉。譏セ遉コ"霑幄。御ク?<3F>御ス<E5BEA1>ョ樣刔豐。莠コ蝨ィ螟<EFBDA8><E89E9F>?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ **Redis队列的优势**
|
||||
## 笨?**Redis髦溷<EFBFBD>逧<EFBFBD>シ伜<EFBFBD>?*
|
||||
|
||||
### 莨伜漢1<E6BCA2>壻ササ蜉。謖∽ケ<E288BD>喧
|
||||
|
||||
@@ -145,12 +145,12 @@ await jobQueue.push('asl:screening', {
|
||||
});
|
||||
|
||||
// 莉サ蜉。菫晏ュ伜惠Redis荳ュ<E88DB3><EFBDAD>
|
||||
// - 实例销毁 → ✅ 任务仍在Redis
|
||||
// - 新实例启动 → ✅ 自动拾取任务
|
||||
// - 进程崩溃 → ✅ 其他Worker接管
|
||||
// - 螳樔セ矩楳豈?竊?笨?莉サ蜉。莉榊惠Redis
|
||||
// - 譁ー螳樔セ句星蜉?竊?笨?閾ェ蜉ィ諡セ蜿紋ササ蜉。
|
||||
// - 霑帷ィ句エゥ貅<EFBFBD> 竊?笨?蜈カ莉妨orker謗・邂。
|
||||
```
|
||||
|
||||
### 优势2:断点续传
|
||||
### 莨伜漢2<EFBFBD>壽妙轤ケ扈ュ莨?
|
||||
|
||||
```typescript
|
||||
// Worker螟<72>炊莉サ蜉。
|
||||
@@ -161,234 +161,234 @@ jobQueue.process('asl:screening', async (job) => {
|
||||
// 螟<>炊譁<E7828A>鍵
|
||||
await processLiterature(literatureIds[i]);
|
||||
|
||||
// 更新进度(保存到Redis)
|
||||
// 譖エ譁ー霑帛コヲ<EFBFBD>井ソ晏ュ伜芦Redis<EFBFBD>?
|
||||
await job.updateProgress((i + 1) / literatureIds.length * 100);
|
||||
|
||||
// 螯よ棡Worker蝨ィ霑咎㈹蟠ゥ貅<EFBDA9>シ<EFBFBD>
|
||||
// - BullMQ会将任务标记为"停滞"
|
||||
// - 其他Worker会重新拾取
|
||||
// - BullMQ莨壼ー<EFBFBD>ササ蜉。譬<EFBFBD>ョー荳?蛛懈サ<E68788>"
|
||||
// - 蜈カ莉妨orker莨夐㍾譁ー諡セ蜿?
|
||||
// - 莉惹ク頑ャ。霑帛コヲ扈ァ扈ュ<E68988>郁御ク肴弍驥榊、エ蠑蟋具シ<E585B7>
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
### 优势3:自动重试
|
||||
### 莨伜漢3<EFBFBD>夊<EFBFBD>蜉ィ驥崎ッ?
|
||||
|
||||
```typescript
|
||||
// BullMQ驟咲スョ
|
||||
const queue = new Queue('asl:screening', {
|
||||
connection: { host: 'redis' },
|
||||
defaultJobOptions: {
|
||||
attempts: 3, // 失败后重试3次
|
||||
attempts: 3, // 螟ア雍・蜷朱㍾隸?谺?
|
||||
backoff: {
|
||||
type: 'exponential',
|
||||
delay: 2000 // 2秒、4秒、8秒
|
||||
delay: 2000 // 2遘偵?遘偵?遘?
|
||||
},
|
||||
removeOnComplete: true, // 完成后清理
|
||||
removeOnFail: false // 失败后保留(便于排查)
|
||||
removeOnComplete: true, // 螳梧<EFBFBD>蜷取ク<EFBFBD><EFBFBD>?
|
||||
removeOnFail: false // 螟ア雍・蜷惹ソ晉蕗<EFBFBD>井セソ莠取賜譟・<EFBFBD>?
|
||||
}
|
||||
});
|
||||
|
||||
// 场景:
|
||||
// - LLM API临时故障 → ✅ 自动重试
|
||||
// - 网络抖动 → ✅ 自动重试
|
||||
// - DB连接断开 → ✅ 自动重试
|
||||
// 蝨コ譎ッ<EFBFBD>?
|
||||
// - LLM API荳エ譌カ謨<EFBFBD>囿 竊?笨?閾ェ蜉ィ驥崎ッ<E5B48E>
|
||||
// - 鄂醍サ懈竃蜉ィ 竊?笨?閾ェ蜉ィ驥崎ッ<E5B48E>
|
||||
// - DB霑樊磁譁ュ蠑 竊?笨?閾ェ蜉ィ驥崎ッ<E5B48E>
|
||||
```
|
||||
|
||||
### 莨伜漢4<E6BCA2>壼<EFBFBD>蟶<EFBFBD>シ丈ササ蜉。蛻<EFBDA1><E89BBB>
|
||||
|
||||
```
|
||||
SAE有3个实例:
|
||||
SAE譛?荳ェ螳樔セ具シ<E585B7>
|
||||
|
||||
Redis队列(1000个任务)
|
||||
↓
|
||||
自动分配:
|
||||
├─ 实例A Worker:处理 Task 1-350
|
||||
├─ 实例B Worker:处理 Task 351-700
|
||||
└─ 实例C Worker:处理 Task 701-1000
|
||||
Redis髦溷<EFBFBD><EFBFBD>?000荳ェ莉サ蜉。<E89C89><EFBDA1>
|
||||
竊?
|
||||
閾ェ蜉ィ蛻<EFBFBD><EFBFBD><EFBFBD>?
|
||||
笏懌楳 螳樔セ帰 Worker<EFBFBD>壼、<EFBFBD><EFBFBD>?Task 1-350
|
||||
笏懌楳 螳樔セ毅 Worker<EFBFBD>壼、<EFBFBD><EFBFBD>?Task 351-700
|
||||
笏披楳 螳樔セ気 Worker<EFBFBD>壼、<EFBFBD><EFBFBD>?Task 701-1000
|
||||
|
||||
螯よ棡螳樔セ毅髞豈<EFBFBD>シ<EFBFBD>
|
||||
├─ Task 351-700 标记为"停滞"
|
||||
笏懌楳 Task 351-700 譬<EFBFBD>ョー荳?蛛懈サ<E68788>"
|
||||
笏懌楳 螳樔セ帰謌砲逧Цorker閾ェ蜉ィ謗・邂。
|
||||
笏披楳 扈ァ扈ュ螟<EFBDAD>炊<EFBFBD>梧裏髴莠コ蟾・蟷イ鬚<EFBDB2>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 **可靠性对比**
|
||||
## <EFBFBD>投 **蜿ッ髱<EFBFBD>諤ァ蟇ケ豈?*
|
||||
|
||||
| 扈エ蠎ヲ | MemoryQueue | Redis髦溷<E9ABA6> | 蟾ョ蠑<EFBDAE> |
|
||||
|------|------------|----------|------|
|
||||
| **2小时任务完成率** | 10-30% | 99%+ | **300%提升** |
|
||||
| **实例销毁后** | ❌ 任务丢失 | ✅ 自动恢复 | **关键** |
|
||||
| **进程崩溃后** | ❌ 全部丢失 | ✅ 断点续传 | **关键** |
|
||||
| **API临时故障** | ❌ 任务失败 | ✅ 自动重试 | **关键** |
|
||||
| **多实例协调** | ❌ 无法协调 | ✅ 自动分配 | **关键** |
|
||||
| **任务监控** | ⚠️ 仅DB | ✅ 实时状态 | 可选 |
|
||||
| **成本** | ¥0 | ¥108/年 | 可接受 |
|
||||
| **2蟆乗慮莉サ蜉。螳梧<EFBFBD>邇?* | 10-30% | 99%+ | **300%謠仙合** |
|
||||
| **螳樔セ矩楳豈∝錘** | 笶?莉サ蜉。荳「螟ア | 笨?閾ェ蜉ィ諱「螟<EFBDA2> | **蜈ウ髞ョ** |
|
||||
| **霑帷ィ句エゥ貅<EFBFBD><EFBFBD>?* | 笶?蜈ィ驛ィ荳「螟ア | 笨?譁ュ轤ケ扈ュ莨<EFBDAD> | **蜈ウ髞ョ** |
|
||||
| **API荳エ譌カ謨<EFBFBD>囿** | 笶?莉サ蜉。螟ア雍・ | 笨?閾ェ蜉ィ驥崎ッ<E5B48E> | **蜈ウ髞ョ** |
|
||||
| **螟壼ョ樔セ句刻隹?* | 笶?譌<>豕募刻隹<E588BB> | 笨?閾ェ蜉ィ蛻<EFBDA8><E89BBB> | **蜈ウ髞ョ** |
|
||||
| **莉サ蜉。逶第而** | 笞<EFBFBD><EFBFBD><EFBFBD> 莉<>B | 笨?螳樊慮迥カ諤?| 蜿ッ騾?|
|
||||
| **謌先悽** | ツ・0 | ツ・108/蟷?| 蜿ッ謗・蜿?|
|
||||
|
||||
---
|
||||
|
||||
## <20>識 **逵溷ョ槫惻譎ッ讓。諡<EFBDA1>**
|
||||
|
||||
### 场景1:工作时间提交(成功率30%)
|
||||
### 蝨コ譎ッ1<EFBFBD>壼キ・菴懈慮髣エ謠蝉コ、<EFBFBD>域<EFBFBD>蜉溽<EFBFBD>?0%<25>?
|
||||
|
||||
```
|
||||
10:00 用户提交1000篇文献筛选
|
||||
10:00 逕ィ謌キ謠蝉コ、1000遽<EFBFBD>枚迪ョ遲幃?
|
||||
笏懌楳 MemoryQueue<75>壼シ蟋句、<E58FA5>炊<EFBFBD>碁「<E7A281>ョ。12:00螳梧<E89EB3>
|
||||
│
|
||||
11:30 流量降低,SAE缩容(删除1个实例)
|
||||
├─ 如果任务在被删除的实例上 → ❌ 丢失(概率50%)
|
||||
│
|
||||
12:00 如果幸运未被删除 → ✅ 完成(概率50%)
|
||||
笏?
|
||||
11:30 豬<EFBFBD>㍼髯堺ス趣シ郡AE郛ゥ螳ケ<EFBFBD>亥唖髯?荳ェ螳樔セ具シ<E585B7>
|
||||
笏懌楳 螯よ棡莉サ蜉。蝨ィ陲ォ蛻<EFBDAB>髯、逧<EFBDA4>ョ樔セ倶ク<E580B6> 竊?笶?荳「螟ア<E89E9F>域ヲら<EFBDA6>?0%<25>?
|
||||
笏?
|
||||
12:00 螯よ棡蟷ク霑先悴陲ォ蛻<EFBFBD>髯、 竊?笨?螳梧<E89EB3><E6A2A7>域ヲら<EFBDA6>?0%<25>?
|
||||
|
||||
总成功率:50%
|
||||
諤サ謌仙粥邇<EFBFBD>シ?0%
|
||||
```
|
||||
|
||||
### 场景2:夜间提交(成功率5%)
|
||||
### 蝨コ譎ッ2<EFBFBD>壼、憺龍謠蝉コ、<EFBFBD>域<EFBFBD>蜉溽<EFBFBD>?%<25>?
|
||||
|
||||
```
|
||||
21:00 用户提交1000篇文献筛选
|
||||
21:00 逕ィ謌キ謠蝉コ、1000遽<EFBFBD>枚迪ョ遲幃?
|
||||
笏懌楳 MemoryQueue<75>壼シ蟋句、<E58FA5>炊<EFBFBD>碁「<E7A281>ョ。23:00螳梧<E89EB3>
|
||||
│
|
||||
21:15 无新用户访问,流量降为0
|
||||
│
|
||||
21:30 SAE检测:15分钟无流量 → 准备缩容
|
||||
│
|
||||
21:31 ❌ 实例销毁,任务丢失(概率95%)
|
||||
笏?
|
||||
21:15 譌<EFBFBD>譁ー逕ィ謌キ隶ソ髣ョ<EFBFBD>梧オ<EFBFBD>㍼髯堺ク?
|
||||
笏?
|
||||
21:30 SAE譽豬具シ<EFBFBD>15蛻<EFBFBD>帖譌<EFBFBD>豬<EFBFBD><EFBFBD>?竊?蜃<>、<EFBFBD>シゥ螳ケ
|
||||
笏?
|
||||
21:31 笶?螳樔セ矩楳豈<E6A5B3>シ御ササ蜉。荳「螟ア<E89E9F>域ヲら<EFBDA6>?5%<25>?
|
||||
|
||||
总成功率:5%
|
||||
諤サ謌仙粥邇<EFBFBD>シ?%
|
||||
```
|
||||
|
||||
### 场景3:Redis队列(成功率99%+)
|
||||
### 蝨コ譎ッ3<EFBFBD>啌edis髦溷<EFBFBD><EFBFBD>域<EFBFBD>蜉溽紫99%+<EFBFBD>?
|
||||
|
||||
```
|
||||
21:00 用户提交1000篇文献筛选
|
||||
├─ Redis队列:任务入队
|
||||
├─ Worker:开始处理
|
||||
│
|
||||
21:31 实例销毁
|
||||
21:00 逕ィ謌キ謠蝉コ、1000遽<EFBFBD>枚迪ョ遲幃?
|
||||
笏懌楳 Redis髦溷<EFBFBD><EFBFBD>壻ササ蜉。蜈・髦?
|
||||
笏懌楳 Worker<EFBFBD>壼シ蟋句、<EFBFBD><EFBFBD>?
|
||||
笏?
|
||||
21:31 螳樔セ矩楳豈?
|
||||
笏懌楳 莉サ蜉。菫晏ュ伜惠Redis
|
||||
│
|
||||
笏?
|
||||
21:32 譁ー螳樔セ句星蜉ィ<E89C89>域<EFBFBD>蜈カ莉門ョ樔セ具シ<E585B7>
|
||||
├─ Worker:自动拾取任务
|
||||
├─ 从Redis读取进度:已处理150篇
|
||||
├─ 继续处理剩余850篇
|
||||
│
|
||||
23:00 ✅ 任务完成
|
||||
笏懌楳 Worker<EFBFBD>夊<EFBFBD>蜉ィ諡セ蜿紋ササ蜉?
|
||||
笏懌楳 莉山edis隸サ蜿冶ソ帛コヲ<EFBDBA>壼キイ螟<EFBDB2>炊150遽?
|
||||
笏懌楳 扈ァ扈ュ螟<EFBDAD>炊蜑ゥ菴<EFBDA9>850遽?
|
||||
笏?
|
||||
23:00 笨?莉サ蜉。螳梧<E89EB3>
|
||||
|
||||
总成功率:99%+
|
||||
諤サ謌仙粥邇<EFBFBD>シ?9%+
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <20>腸 **謌先悽蛻<E682BD>梵**
|
||||
|
||||
### MemoryQueue的隐藏成本
|
||||
### MemoryQueue逧<EFBFBD>嚼阯乗<EFBFBD>譛?
|
||||
|
||||
```
|
||||
莉サ蜉。螟ア雍・邇<EFBFBD>シ<EFBFBD>70%<25>亥、憺龍<E686BA><E9BE8D>
|
||||
用户重新提交次数:平均3次才成功
|
||||
LLM API浪费:
|
||||
- 第1次:处理200篇后失败 → 浪费 ¥86
|
||||
- 第2次:处理500篇后失败 → 浪费 ¥215
|
||||
- 第3次:完成 → ¥430
|
||||
总成本:¥731(应该只需¥430)
|
||||
逕ィ謌キ驥肴眠謠蝉コ、谺。謨ー<EFBFBD>壼ケウ蝮?谺。謇肴<E8AC87>蜉<EFBFBD>
|
||||
LLM API豬ェ雍ケ<EFBFBD>?
|
||||
- 隨?谺。<E8B0BA>壼、<E5A3BC>炊200遽<30>錘螟ア雍・ 竊?豬ェ雍ケ ツ・86
|
||||
- 隨?谺。<E8B0BA>壼、<E5A3BC>炊500遽<30>錘螟ア雍・ 竊?豬ェ雍ケ ツ・215
|
||||
- 隨?谺。<E8B0BA>壼ョ梧<EFBDAE> 竊?ツ・430
|
||||
諤サ謌先悽<EFBFBD>堋・731<EFBFBD>亥コ碑ッ・蜿ェ髴ツ・430<EFBFBD>?
|
||||
|
||||
用户体验:
|
||||
- 反复失败 → 投诉率上升
|
||||
- 不敢夜间提交 → 使用受限
|
||||
- 对系统失去信任 → 流失风险
|
||||
逕ィ謌キ菴馴ェ鯉シ?
|
||||
- 蜿榊、榊、ア雍・ 竊?謚戊ッ臥紫荳雁<E88DB3>?
|
||||
- 荳肴覆螟憺龍謠蝉コ、 竊?菴ソ逕ィ蜿鈴剞
|
||||
- 蟇ケ邉サ扈溷、ア蜴サ菫。莉?竊?豬∝、ア鬟朱勦
|
||||
```
|
||||
|
||||
### Redis队列的真实成本
|
||||
### Redis髦溷<EFBFBD>逧<EFBFBD>悄螳樊<EFBFBD>譛?
|
||||
|
||||
```
|
||||
Redis年费:¥108
|
||||
Redis蟷エ雍ケ<EFBFBD>堋?08
|
||||
莉サ蜉。謌仙粥邇<EFBFBD>シ<EFBFBD>99%+
|
||||
逕ィ謌キ驥肴眠謠蝉コ、谺。謨ー<EFBFBD>壼<EFBFBD>荵惹クコ0
|
||||
LLM API成本:¥430(无浪费)
|
||||
LLM API謌先悽<EFBFBD>堋?30<33>域裏豬ェ雍ケ<E99B8D>?
|
||||
|
||||
额外收益:
|
||||
- 用户满意度提升
|
||||
- 可以支持更大批量(5000篇+)
|
||||
鬚晏、匁噺逶奇シ?
|
||||
- 逕ィ謌キ貊。諢丞コヲ謠仙<EFBFBD>?
|
||||
- 蜿ッ莉・謾ッ謖∵峩螟ァ謇ケ驥擾シ?000遽?<3F>?
|
||||
- 螟憺龍莉サ蜉。蜿ッ髱<EFBDAF>霑占。<E58DA0>
|
||||
```
|
||||
|
||||
**ROI计算**:
|
||||
**ROI隶。邂<EFBFBD>**<EFBFBD>?
|
||||
```
|
||||
节省成本:¥731 - ¥430 = ¥301/次
|
||||
闃ら怐謌先悽<EFBFBD>堋?31 - ツ・430 = ツ・301/谺?
|
||||
螯よ棡豈乗怦10谺。謇ケ驥丈ササ蜉。<EFBFBD><EFBFBD>
|
||||
节省 = ¥301 × 10 = ¥3,010/月
|
||||
Redis成本 = ¥9/月
|
||||
净收益 = ¥3,001/月
|
||||
闃ら怐 = ツ・301 テ<EFBFBD> 10 = ツ・3,010/譛?
|
||||
Redis謌先悽 = ツ・9/譛?
|
||||
蜃謾カ逶<EFBFBD> = ツ・3,001/譛?
|
||||
|
||||
ROI = 33,344%(投入¥9,回报¥3,010)
|
||||
ROI = 33,344%<EFBFBD>域兜蜈・ツ?<3F>悟屓謚・ツ?,010<EFBFBD>?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ **结论与建议**
|
||||
## 笞<EFBFBD><EFBFBD><EFBFBD> **扈楢ョコ荳主サコ隶?*
|
||||
|
||||
### 譏守。ョ扈楢ョコ
|
||||
|
||||
```
|
||||
问题:MemoryQueue能否完成2小时任务?
|
||||
髣ョ鬚假シ哺emoryQueue閭ス蜷ヲ螳梧<EFBFBD>2蟆乗慮莉サ蜉。<EFBFBD>?
|
||||
遲疲。茨シ壺搆 荳崎<E88DB3>蜿ッ髱<EFBDAF>螳梧<E89EB3>
|
||||
|
||||
原因:
|
||||
蜴溷屏<EFBFBD>?
|
||||
1. SAE螳樔セ倶シ夊<EFBDBC>蜉ィ髞豈<C280>シ<EFBFBD>15蛻<35>帖譌<E5B896>豬<EFBFBD>㍼<EFBFBD><E38DBC>
|
||||
2. 2小时任务几乎必然遇到实例销毁
|
||||
3. 任务丢失后无法恢复
|
||||
4. 成功率 < 30%,夜间 < 5%
|
||||
2. 2蟆乗慮莉サ蜉。蜃<EFBFBD>荵主ソ<EFBFBD>┯驕<EFBFBD>芦螳樔セ矩楳豈?
|
||||
3. 莉サ蜉。荳「螟ア蜷取裏豕墓△螟?
|
||||
4. 謌仙粥邇?< 30%<25>悟、憺<EFBDA4>?< 5%
|
||||
```
|
||||
|
||||
### 蠑コ辜亥サコ隶ョ
|
||||
|
||||
```
|
||||
对于超过10分钟的任务,必须使用Redis队列!
|
||||
蟇ケ莠手カ<EFBFBD>ソ<EFBFBD>10蛻<EFBFBD>帖逧<EFBFBD>ササ蜉。<EFBFBD>悟ソ<EFBFBD>。サ菴ソ逕ィRedis髦溷<EFBFBD><EFBFBD>?
|
||||
|
||||
譌カ髣エ髦亥シ<EFBFBD><EFBFBD>
|
||||
- < 10遘抵シ壼庄莉・逕ィMemoryQueue<75>亥酔豁・螟<EFBDA5>炊<EFBFBD><E7828A>
|
||||
- 10秒 - 10分钟:建议用Redis队列
|
||||
- 10遘?- 10蛻<EFBFBD>帖<EFBFBD>壼サコ隶ョ逕ィRedis髦溷<EFBFBD>
|
||||
- > 10蛻<30>帖<EFBFBD>壼ソ<E5A3BC>。サ逕ィRedis髦溷<E9ABA6>
|
||||
- > 1蟆乗慮<E4B997>壼シコ蛻カ隕∵ア3edis髦溷<E9ABA6>
|
||||
```
|
||||
|
||||
### 实施优先级
|
||||
### 螳樊命莨伜<EFBFBD>郤?
|
||||
|
||||
```
|
||||
髦カ谿オ1<EFBFBD>域悽蜻ィ<EFBFBD>会シ啌edis郛灘ュ<EFBFBD>
|
||||
笏懌楳 隗」蜀ウLLM謌先悽髣ョ鬚<EFBDAE>
|
||||
└─ 工作量:2天
|
||||
笏披楳 蟾・菴憺㍼<E686BA><E38DBC>2螟?
|
||||
|
||||
阶段2(下周):Redis队列 ← **必须做!**
|
||||
├─ 解决长任务可靠性
|
||||
├─ 工作量:3天
|
||||
└─ 不做的风险:70%任务失败率
|
||||
髦カ谿オ2<EFBFBD>井ク句捉<EFBFBD>会シ啌edis髦溷<EFBFBD> 竊?**蠢<>。サ蛛夲シ<E5A4B2>**
|
||||
笏懌楳 隗」蜀ウ髟ソ莉サ蜉。蜿ッ髱<EFBDAF>諤?
|
||||
笏懌楳 蟾・菴憺㍼<E686BA><E38DBC>3螟?
|
||||
笏披楳 荳榊★逧<E29885>」朱勦<E69CB1><E58BA6>70%莉サ蜉。螟ア雍・邇?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 **技术细节:为什么10分钟是分水岭?**
|
||||
## <EFBFBD>統 **謚譛ッ扈<EFBFBD>鰍<EFBFBD>壻クコ莉荵?0蛻<30>帖譏ッ蛻<EFBDAF>ーエ蟯ュ<E89FAF>?*
|
||||
|
||||
### SAE螳樔セ狗シゥ螳ケ遲也払
|
||||
|
||||
```
|
||||
阿里云SAE默认策略:
|
||||
髦ソ驥御コ全AE鮟倩ョ、遲也払<EFBFBD>?
|
||||
- 譽豬句捉譛滂シ<E6BB82>5蛻<35>帖
|
||||
- 譌<>豬<EFBFBD>㍼髦亥シ<C280><EFBDBC>15蛻<35>帖
|
||||
- 缩容延迟:5分钟
|
||||
- 郛ゥ螳ケ蟒カ霑滂シ?蛻<>帖
|
||||
|
||||
总计:15分钟后可能缩容
|
||||
諤サ隶。<EFBFBD>?5蛻<35>帖蜷主庄閭ス郛ゥ螳?
|
||||
```
|
||||
|
||||
### 任务时长与风险
|
||||
### 莉サ蜉。譌カ髟ソ荳朱」朱<EFBFBD>?
|
||||
|
||||
```
|
||||
任务时长 实例销毁风险 建议
|
||||
莉サ蜉。譌カ髟ソ 螳樔セ矩楳豈<E6A5B3>」朱<EFBDA3>? 蟒コ隶ョ
|
||||
笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏笏
|
||||
< 1分钟 几乎为0% 同步处理
|
||||
< 1蛻<EFBFBD>帖 蜃<EFBFBD>荵惹ク?% 蜷梧ュ・螟<EFBFBD>炊
|
||||
1-5蛻<35>帖 < 5% 蜿ッ逕ィMemoryQueue
|
||||
5-10蛻<30>帖 10-20% 蟒コ隶ョRedis髦溷<E9ABA6>
|
||||
10-30蛻<30>帖 50-70% 蠢<>。サRedis髦溷<E9ABA6>
|
||||
@@ -399,72 +399,73 @@ ROI = 33,344%(投入¥9,回报¥3,010)
|
||||
|
||||
## <20>識 **遶句叉陦悟勘**
|
||||
|
||||
### 如果您想现在就测试长任务:
|
||||
### 螯よ棡謔ィ諠ウ邇ー蝨ィ蟆ア豬玖ッ暮柄莉サ蜉。<EFBFBD>?
|
||||
|
||||
**不推荐**:用MemoryQueue测试1000篇
|
||||
- 风险:70%概率失败
|
||||
**荳肴耳闕?*<2A>夂畑MemoryQueue豬玖ッ<EFBFBD>1000遽?
|
||||
- 鬟朱勦<EFBFBD>?0%讎ら紫螟ア雍・
|
||||
- 豬ェ雍ケ<E99B8D>夐㍾螟崎ー<E5B48E>畑LLM API
|
||||
|
||||
**推荐**:先用100篇测试(10分钟)
|
||||
**謗ィ闕<EFBFBD>**<EFBFBD>壼<EFBFBD>逕?00遽<30>オ玖ッ包シ<E58C85>10蛻<30>帖<EFBFBD>?
|
||||
```typescript
|
||||
// 髯仙宛豬玖ッ墓焚驥<E7849A>
|
||||
const testLiteratures = literatures.slice(0, 100);
|
||||
processLiteraturesInBackground(task.id, projectId, testLiteratures);
|
||||
```
|
||||
|
||||
然后观察:
|
||||
辟カ蜷手ァょッ滂シ?
|
||||
- 譏ッ蜷ヲ驕<EFBDA6>芦螳樔セ矩楳豈<E6A5B3>シ<EFBFBD>
|
||||
- 任务是否完整?
|
||||
- 莉サ蜉。譏ッ蜷ヲ螳梧紛<EFBFBD>?
|
||||
- 螯よ棡螟ア雍・<E99B8D>檎ォ句叉謾ケ逕ィRedis髦溷<E9ABA6>
|
||||
|
||||
### 螯よ棡謔ィ蜃<EFBDA8>、<EFBFBD>隼騾<E99ABC><E9A8BE><EFBFBD>
|
||||
|
||||
**参考文档**:
|
||||
- `04-Redis改造实施计划.md`
|
||||
**蜿り<EFBFBD>枚譯?*<2A>?
|
||||
- `04-Redis謾ケ騾<EFBFBD>螳樊命隶。蛻?md`
|
||||
- `05-Redis郛灘ュ倅ク朱弌蛻礼噪蛹コ蛻ォ隸エ譏<EFBDB4>.md`
|
||||
|
||||
**改造顺序**:
|
||||
1. ✅ Redis缓存(本周)
|
||||
2. ✅ Redis队列(下周)← **重点**
|
||||
3. ✅ 测试2小时任务
|
||||
**謾ケ騾<EFBFBD>鬘コ蠎?*<2A>?
|
||||
1. 笨?Redis郛灘ュ假シ域悽蜻ィ<EFBFBD><EFBFBD>
|
||||
2. 笨?Redis髦溷<EFBFBD><EFBFBD>井ク句捉<EFBFBD>俄<EFBFBD>?**驥咲せ**
|
||||
3. 笨?豬玖ッ<E78E96>2蟆乗慮莉サ蜉。
|
||||
|
||||
---
|
||||
|
||||
## 📊 **附录:实际测试建议**
|
||||
## <EFBFBD>投 **髯<EFBFBD>ス包シ壼ョ樣刔豬玖ッ募サコ隶?*
|
||||
|
||||
### 测试方案A:验证MemoryQueue的不可靠性
|
||||
### 豬玖ッ墓婿譯<EFBFBD><EFBFBD>夐ェ瑚ッ`emoryQueue逧<EFBFBD>ク榊庄髱<EFBFBD>諤?
|
||||
|
||||
```bash
|
||||
# 步骤1:提交1000篇文献筛选任务
|
||||
# 步骤2:等待15分钟
|
||||
# 步骤3:检查任务状态
|
||||
# - 如果失败 → 证明实例被销毁
|
||||
# - 如果成功 → 运气好,不代表可靠
|
||||
# 豁・鬪、1<EFBFBD>壽署莠?000遽<30>枚迪ョ遲幃我ササ蜉?
|
||||
# 豁・鬪、2<EFBFBD>夂ュ牙セ?5蛻<35>帖
|
||||
# 豁・鬪、3<EFBFBD>壽」譟・莉サ蜉。迥カ諤?
|
||||
# - 螯よ棡螟ア雍・ 竊?隸∵<E99AB8>螳樔セ玖「ォ髞豈?
|
||||
# - 螯よ棡謌仙粥 竊?霑先ー泌・ス<EFBDA5>御ク堺サ」陦ィ蜿ッ髱?
|
||||
|
||||
# 驥榊、肴オ玖ッ<E78E96>5谺。<E8B0BA><EFBDA1>
|
||||
# - 成功率应该 < 30%
|
||||
# - 謌仙粥邇<EFBFBD>コ碑ッ?< 30%
|
||||
```
|
||||
|
||||
### 豬玖ッ墓婿譯<E5A9BF><E8ADAF>啌edis髦溷<E9ABA6>鬪瑚ッ<E7919A>
|
||||
|
||||
```bash
|
||||
# 豁・鬪、1<EFBDA4>夐Κ鄂イRedis髦溷<E9ABA6>迚域悽
|
||||
# 步骤2:提交1000篇文献筛选任务
|
||||
# 豁・鬪、2<EFBFBD>壽署莠?000遽<30>枚迪ョ遲幃我ササ蜉?
|
||||
# 豁・鬪、3<EFBDA4>壻クサ蜉ィ蛛懈ュ「SAE螳樔セ<E6A894>
|
||||
# 步骤4:重新启动实例
|
||||
# 步骤5:检查任务是否自动恢复
|
||||
# 豁・鬪、4<EFBFBD>夐㍾譁ー蜷ッ蜉ィ螳樔セ?
|
||||
# 豁・鬪、5<EFBFBD>壽」譟・莉サ蜉。譏ッ蜷ヲ閾ェ蜉ィ諱「螟?
|
||||
|
||||
# 预期结果:
|
||||
# - 任务自动恢复 ✅
|
||||
# - 从断点继续 ✅
|
||||
# - 最终完成 ✅
|
||||
# 鬚<EFBFBD>悄扈捺棡<EFBFBD>?
|
||||
# - 莉サ蜉。閾ェ蜉ィ諱「螟<EFBFBD> 笨?
|
||||
# - 莉取妙轤ケ扈ァ扈?笨?
|
||||
# - 譛扈亥ョ梧<EFBFBD>?笨?
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档维护者:** 技术团队
|
||||
**譁<EFBFBD>。」扈エ謚、閠<EFBFBD>シ<EFBFBD>** 謚譛ッ蝗「髦?
|
||||
**譛蜷取峩譁ー<E8AD81><EFBDB0>** 2025-12-12
|
||||
**关键结论:** MemoryQueue无法可靠完成2小时任务,必须迁移到Redis队列
|
||||
**蜈ウ髞ョ扈楢ョコ<EFBFBD>?* MemoryQueue譌<EFBFBD>豕募庄髱<EFBFBD>螳梧<EFBFBD>2蟆乗慮莉サ蜉。<EFBFBD>悟ソ<EFBFBD>。サ霑∫ァサ蛻ーRedis髦溷<EFBFBD>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user