232 lines
11 KiB
Markdown
232 lines
11 KiB
Markdown
# A2A需求分析\-网关\-K8s全链路架构详细设计方案
|
||
|
||
## 一、架构整体概述
|
||
|
||
### 1\.1 核心架构分层
|
||
|
||
整体采用**三层解耦架构:需求分析层 → 智能网关层 → K8s Agent算力层**,完全贴合你的设计思路,兼顾本地IDE/CLI异步任务、云端Agent弹性调度、全链路任务管控。
|
||
|
||
- **需求分析层(前端调度端)**:CLI终端、VSCode IDE、Claude Code/CodeBuddy等AI终端,负责自然语言需求解析、复杂任务拆解、本地轻量任务异步执行、结构化任务上报网关。
|
||
|
||
- **智能网关层(核心中枢)**:基于FastAPI\+ElementUI\+Redis搭建,核心能力为任务池管理、Agent池管理、心跳保活、任务\-Agent规则匹配、全链路通信中转、任务生命周期管控、可视化运维。
|
||
|
||
- **K8s算力层(执行端)**:全权负责Agent容器的生命周期管理(创建、扩容、销毁、重启),Agent启动/销毁主动通知网关,实现集群弹性伸缩。
|
||
|
||
### 1\.2 核心设计理念
|
||
|
||
- 分层解耦:需求拆解、任务调度、算力执行完全隔离,支持独立迭代扩容;
|
||
|
||
- 异步协同:本地CLI可自主处理轻量编程任务,复杂任务上云调度K8s Agent,轻重任务分流;
|
||
|
||
- 动态感知:网关实时维护在线Agent池,通过定时心跳剔除异常节点,适配K8s动态扩缩容;
|
||
|
||
- 精准匹配:基于自定义规则实现任务与Agent能力精准绑定,支持负载均衡、优先级调度;
|
||
|
||
- 统一通信:网关作为唯一通信中枢,承接CLI与云端Agent的双向交互,通过AgentID精准关联任务链路。
|
||
|
||
## 二、各层级详细能力设计
|
||
|
||
### 2\.1 需求分析层(CLI/IDE/AI终端)
|
||
|
||
#### 2\.1\.1 核心角色
|
||
|
||
包含自研CLI、VSCode插件、Claude Code、CodeBuddy等所有前端需求入口,作为**顶层任务调度者**,具备LLM自主拆解能力。
|
||
|
||
#### 2\.1\.2 核心能力
|
||
|
||
1. **需求智能拆解**:接收用户自然语言需求,自主拆分出可独立执行的原子任务,区分轻量本地任务、重型云端任务;
|
||
|
||
2. **本地异步执行**:简单代码补全、语法校验、本地文件修改等轻量任务,由CLI/IDE本地异步处理,无需上云;
|
||
|
||
3. **云端任务上报**:编译构建、批量测试、数据分析、流媒体处理等复杂任务,结构化封装后提交至网关;
|
||
|
||
4. **结果接收与聚合**:接收网关转发的Agent执行结果,LLM聚合输出最终答案,反馈给用户;
|
||
|
||
5. **全链路追踪**:每个任务生成全局唯一RequestID,贯穿网关、Agent全链路,用于结果精准匹配、日志溯源。
|
||
|
||
#### 2\.1\.3 任务上报协议
|
||
|
||
采用标准HTTP JSON协议适配所有AI终端工具调用规范,请求体核心字段:RequestID、任务类型、任务标签、任务载荷、超时时间、本地工作目录信息。
|
||
|
||
### 2\.2 智能网关层(核心中枢)
|
||
|
||
技术栈:**FastAPI(高性能接口服务)\+ ElementUI(可视化后台)\+ Redis(内存数据存储)**,无状态服务设计,支持水平扩容,核心维护两大核心资源池:Task任务池、Agent算力池。
|
||
|
||
#### 2\.2\.1 核心模块拆分
|
||
|
||
- **API接入模块**:接收CLI/IDE任务提交、Agent注册/注销、心跳上报、任务结果回传;
|
||
|
||
- **任务池管理模块**:缓存所有待执行/执行中/已完成任务,维护任务全生命周期状态;
|
||
|
||
- **Agent池管理模块**:维护所有K8s在线Agent信息,基于定时心跳保活、剔除异常节点;
|
||
|
||
- **规则调度模块**:实现任务与Agent的标签匹配、负载均衡、优先级调度;
|
||
|
||
- **通信中转模块**:基于AgentID关联CLI与Agent,双向转发任务指令、执行日志、最终结果;
|
||
|
||
- **可视化运维模块**:ElementUI实现任务列表、Agent在线状态、执行日志、异常告警可视化展示。
|
||
|
||
#### 2\.2\.2 Task任务池设计(Redis存储)
|
||
|
||
网关接收CLI任务后,立即写入Redis任务池,同步返回「任务受理成功」响应,不阻塞CLI,实现异步调度。
|
||
|
||
**任务数据结构**:RequestID、TaskType、TaskTags、Payload、Status(pending/running/success/failed)、AgentID、CliSessionID、CreateTime、Timeout、Progress、Result、ErrorInfo。
|
||
|
||
**任务状态流转**:待受理 → 待调度 → 执行中 → 执行成功/执行失败 → 任务归档(TTL自动清理)。
|
||
|
||
#### 2\.2\.3 Agent算力池设计(Redis存储)
|
||
|
||
全权管理K8s集群所有Agent实例,适配K8s动态生命周期,实现动态注册、失效剔除。
|
||
|
||
**Agent数据结构**:AgentID、Endpoint(K8s内部访问地址)、AgentTags(能力标签)、MaxConcurrent(最大并发)、CurrentLoad(当前负载)、LastHeartbeat(最后心跳时间)、Status(online/offline)、CreateTime。
|
||
|
||
#### 2\.2\.4 心跳保活机制(核心设计)
|
||
|
||
严格遵循你的设计:**网关定时每分钟轮询维持心跳**,补充工程化容错逻辑:
|
||
|
||
1. 网关后台启动定时任务,每60s扫描一次Redis Agent池;
|
||
|
||
2. 判定规则:连续2个周期(120s)未上报心跳 → 标记Agent为offline,从可用算力池剔除;
|
||
|
||
3. 被动更新:Agent启动主动注册、销毁主动注销,实时更新Agent池状态,优先覆盖定时轮询结果;
|
||
|
||
4. 负载同步:心跳同步上报当前任务并发数,为调度算法提供依据。
|
||
|
||
#### 2\.2\.5 任务\-Agent匹配调度规则
|
||
|
||
网关核心调度逻辑,实现精准任务分发,优先级从高到低:
|
||
|
||
1. **标签精准匹配**:根据任务TaskTags筛选具备对应能力标签的Agent(如代码编译、日志分析、流媒体处理);
|
||
|
||
2. **负载过滤**:剔除当前负载已满(CurrentLoad ≥ MaxConcurrent)的Agent;
|
||
|
||
3. **最优算力选择**:优先选择负载最低、在线时间最稳定的Agent;
|
||
|
||
4. **任务绑定**:匹配成功后,将AgentID写入任务池对应任务,标记任务为running,下发任务至目标Agent。
|
||
|
||
#### 2\.2\.6 双向通信机制(核心闭环)
|
||
|
||
完全贴合你的设计:**网关作为唯一中转,携带AgentID完成CLI与Agent双向通信**
|
||
|
||
1. 正向链路(CLI → Agent):CLI提交任务 → 网关入库匹配Agent → 携带AgentID下发任务指令;
|
||
|
||
2. 反向链路(Agent → CLI):Agent执行完成/产生日志 → 结果回传网关 → 网关通过RequestID\+AgentID关联对应CLI会话 → 精准返回结果;
|
||
|
||
3. 链路隔离:多任务、多Agent、多CLI会话通过RequestID\+AgentID双维度隔离,杜绝消息错乱。
|
||
|
||
### 2\.3 K8s算力层
|
||
|
||
#### 2\.3\.1 核心职责
|
||
|
||
专注Agent容器生命周期管理,不参与业务调度,职责单一:Agent镜像部署、弹性扩缩容、故障重启、资源配额管控、节点销毁。
|
||
|
||
#### 2\.3\.2 Agent生命周期联动网关机制
|
||
|
||
1. **Agent创建启动**:Pod启动后自动读取K8s环境变量(网关地址、Pod信息),主动调用网关`/agent/register`接口完成注册,上报能力标签、并发上限、访问地址;网关更新Agent池,纳入算力调度。
|
||
|
||
2. **Agent运行中**:每10s主动上报心跳,同步当前负载,网关定时轮询兜底校验;
|
||
|
||
3. **Agent销毁/缩容**:Pod收到SIGTERM信号后,主动调用网关`/agent/unregister`接口优雅注销;网关立即剔除该Agent,终止其未完成任务,避免任务调度失效;
|
||
|
||
4. **Agent异常崩溃**:无主动注销时,依赖网关120s心跳超时机制自动剔除,实现故障自愈。
|
||
|
||
## 三、全链路完整执行流程
|
||
|
||
整合所有模块,端到端闭环流程如下:
|
||
|
||
1. **需求拆解上报**:用户在CLI/IDE输入需求,AI终端自主拆解任务,轻量任务本地异步执行,复杂任务结构化后提交网关;
|
||
|
||
2. **网关任务受理**:网关接收任务,生成/复用RequestID,写入Redis任务池,立即返回受理响应,避免CLI阻塞;
|
||
|
||
3. **算力匹配调度**:网关遍历在线Agent池,通过标签\+负载规则匹配最优Agent,绑定AgentID,下发任务;
|
||
|
||
4. **Agent执行任务**:K8s Agent接收任务,开始执行,定时上报执行进度、日志至网关;
|
||
|
||
5. **结果回传中转**:Agent执行完成后,将结果/错误信息回传网关;网关通过AgentID\+RequestID匹配原CLI会话;
|
||
|
||
6. **结果聚合反馈**:网关推送结果至CLI,AI终端聚合结果、整理答案,最终反馈给用户;
|
||
|
||
7. **状态归档清理**:网关更新任务为成功/失败状态,留存日志,到期自动清理冗余数据。
|
||
|
||
## 四、核心数据存储设计(Redis)
|
||
|
||
### 4\.1 任务池存储结构
|
||
|
||
- Hash结构:`task:info:{RequestID}`存储任务全量信息;
|
||
|
||
- Set结构:`task:pending` 待调度任务集合、`task:running` 执行中任务集合;
|
||
|
||
- TTL策略:任务数据默认保留24小时,自动过期清理,释放资源。
|
||
|
||
### 4\.2 Agent池存储结构
|
||
|
||
- Hash结构:`agent:info:{AgentID}` 存储Agent全量信息;
|
||
|
||
- ZSet结构:`agent:heartbeat` score=最后心跳时间,用于网关定时清理失效节点;
|
||
|
||
- Set索引:`agent:tag:{tag}` 按能力标签索引Agent,加速任务匹配效率。
|
||
|
||
## 五、容错与异常处理机制
|
||
|
||
### 5\.1 任务异常容错
|
||
|
||
- 任务超时:网关自定义任务超时时间,超时自动标记失败,释放Agent算力,反馈CLI;
|
||
|
||
- Agent离线:执行中Agent失联,网关立即终止任务,标记异常,支持CLI重提任务;
|
||
|
||
- 幂等性:基于RequestID实现任务幂等,避免CLI重试导致重复调度。
|
||
|
||
### 5\.2 Agent容错
|
||
|
||
- 心跳兜底:主动心跳\+网关定时轮询双机制,杜绝僵尸节点;
|
||
|
||
- 重启自愈:K8s负责Agent故障重启,重启后自动重新注册,纳入算力池。
|
||
|
||
### 5\.3 通信容错
|
||
|
||
- 断连不丢任务:任务数据持久化Redis,网关重启、网络波动不丢失任务状态;
|
||
|
||
- 精准重连匹配:重连后通过RequestID\+AgentID恢复任务链路,继续推送结果。
|
||
|
||
## 六、可视化运维能力(ElementUI)
|
||
|
||
基于ElementUI搭建后台,提供全维度可视化管控:
|
||
|
||
- 任务管理:查看所有任务状态、进度、关联AgentID、执行日志、结果详情;
|
||
|
||
- Agent管理:在线Agent列表、能力标签、实时负载、心跳状态、异常节点告警;
|
||
|
||
- 日志审计:全链路任务操作日志、Agent注册注销日志、通信记录溯源;
|
||
|
||
- 手动管控:支持手动取消任务、下线异常Agent、重置任务状态。
|
||
|
||
## 七、架构核心优势
|
||
|
||
1. **极简解耦**:三层架构职责清晰,K8s只管生命周期,网关只管调度通信,CLI只管需求拆解;
|
||
|
||
2. **弹性适配**:完美适配K8s扩缩容,Agent动态上下线自动感知,无需人工干预;
|
||
|
||
3. **高低速任务分流**:本地轻量异步处理,云端重型算力调度,资源利用率最大化;
|
||
|
||
4. **精准链路管控**:AgentID\+RequestID双维度绑定,通信不错乱、任务可溯源;
|
||
|
||
5. **轻量易落地**:FastAPI\+Redis技术栈轻量化,部署简单、开发成本低,配套可视化运维;
|
||
|
||
6. **可扩展性强**:后续可扩展多租户、权限管控、负载均衡优化、大文件中转、本地文件远程读写等能力。
|
||
|
||
## 八、落地实施步骤
|
||
|
||
1. 搭建网关基础服务:FastAPI接口、Redis数据结构、ElementUI可视化基础页面;
|
||
|
||
2. 实现Agent注册、注销、心跳上报、网关定时轮询保活能力;
|
||
|
||
3. 开发任务池管理、任务\-Agent匹配调度核心逻辑;
|
||
|
||
4. 打通CLI任务上报、网关调度、Agent执行、结果回传全链路;
|
||
|
||
5. 完善异常容错、日志审计、可视化运维功能;
|
||
|
||
6. 压测优化,适配K8s大规模Agent集群调度。
|
||
|
||
> (注:部分内容可能由 AI 生成)
|