11 KiB
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 核心能力
-
需求智能拆解:接收用户自然语言需求,自主拆分出可独立执行的原子任务,区分轻量本地任务、重型云端任务;
-
本地异步执行:简单代码补全、语法校验、本地文件修改等轻量任务,由CLI/IDE本地异步处理,无需上云;
-
云端任务上报:编译构建、批量测试、数据分析、流媒体处理等复杂任务,结构化封装后提交至网关;
-
结果接收与聚合:接收网关转发的Agent执行结果,LLM聚合输出最终答案,反馈给用户;
-
全链路追踪:每个任务生成全局唯一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 心跳保活机制(核心设计)
严格遵循你的设计:网关定时每分钟轮询维持心跳,补充工程化容错逻辑:
-
网关后台启动定时任务,每60s扫描一次Redis Agent池;
-
判定规则:连续2个周期(120s)未上报心跳 → 标记Agent为offline,从可用算力池剔除;
-
被动更新:Agent启动主动注册、销毁主动注销,实时更新Agent池状态,优先覆盖定时轮询结果;
-
负载同步:心跳同步上报当前任务并发数,为调度算法提供依据。
2.2.5 任务-Agent匹配调度规则
网关核心调度逻辑,实现精准任务分发,优先级从高到低:
-
标签精准匹配:根据任务TaskTags筛选具备对应能力标签的Agent(如代码编译、日志分析、流媒体处理);
-
负载过滤:剔除当前负载已满(CurrentLoad ≥ MaxConcurrent)的Agent;
-
最优算力选择:优先选择负载最低、在线时间最稳定的Agent;
-
任务绑定:匹配成功后,将AgentID写入任务池对应任务,标记任务为running,下发任务至目标Agent。
2.2.6 双向通信机制(核心闭环)
完全贴合你的设计:网关作为唯一中转,携带AgentID完成CLI与Agent双向通信
-
正向链路(CLI → Agent):CLI提交任务 → 网关入库匹配Agent → 携带AgentID下发任务指令;
-
反向链路(Agent → CLI):Agent执行完成/产生日志 → 结果回传网关 → 网关通过RequestID+AgentID关联对应CLI会话 → 精准返回结果;
-
链路隔离:多任务、多Agent、多CLI会话通过RequestID+AgentID双维度隔离,杜绝消息错乱。
2.3 K8s算力层
2.3.1 核心职责
专注Agent容器生命周期管理,不参与业务调度,职责单一:Agent镜像部署、弹性扩缩容、故障重启、资源配额管控、节点销毁。
2.3.2 Agent生命周期联动网关机制
-
Agent创建启动:Pod启动后自动读取K8s环境变量(网关地址、Pod信息),主动调用网关
/agent/register接口完成注册,上报能力标签、并发上限、访问地址;网关更新Agent池,纳入算力调度。 -
Agent运行中:每10s主动上报心跳,同步当前负载,网关定时轮询兜底校验;
-
Agent销毁/缩容:Pod收到SIGTERM信号后,主动调用网关
/agent/unregister接口优雅注销;网关立即剔除该Agent,终止其未完成任务,避免任务调度失效; -
Agent异常崩溃:无主动注销时,依赖网关120s心跳超时机制自动剔除,实现故障自愈。
三、全链路完整执行流程
整合所有模块,端到端闭环流程如下:
-
需求拆解上报:用户在CLI/IDE输入需求,AI终端自主拆解任务,轻量任务本地异步执行,复杂任务结构化后提交网关;
-
网关任务受理:网关接收任务,生成/复用RequestID,写入Redis任务池,立即返回受理响应,避免CLI阻塞;
-
算力匹配调度:网关遍历在线Agent池,通过标签+负载规则匹配最优Agent,绑定AgentID,下发任务;
-
Agent执行任务:K8s Agent接收任务,开始执行,定时上报执行进度、日志至网关;
-
结果回传中转:Agent执行完成后,将结果/错误信息回传网关;网关通过AgentID+RequestID匹配原CLI会话;
-
结果聚合反馈:网关推送结果至CLI,AI终端聚合结果、整理答案,最终反馈给用户;
-
状态归档清理:网关更新任务为成功/失败状态,留存日志,到期自动清理冗余数据。
四、核心数据存储设计(Redis)
4.1 任务池存储结构
-
Hash结构:
task:info:{RequestID}存储任务全量信息; -
Set结构:
task:pending待调度任务集合、task:running执行中任务集合; -
TTL策略:任务数据默认保留24小时,自动过期清理,释放资源。
4.2 Agent池存储结构
-
Hash结构:
agent:info:{AgentID}存储Agent全量信息; -
ZSet结构:
agent:heartbeatscore=最后心跳时间,用于网关定时清理失效节点; -
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、重置任务状态。
七、架构核心优势
-
极简解耦:三层架构职责清晰,K8s只管生命周期,网关只管调度通信,CLI只管需求拆解;
-
弹性适配:完美适配K8s扩缩容,Agent动态上下线自动感知,无需人工干预;
-
高低速任务分流:本地轻量异步处理,云端重型算力调度,资源利用率最大化;
-
精准链路管控:AgentID+RequestID双维度绑定,通信不错乱、任务可溯源;
-
轻量易落地:FastAPI+Redis技术栈轻量化,部署简单、开发成本低,配套可视化运维;
-
可扩展性强:后续可扩展多租户、权限管控、负载均衡优化、大文件中转、本地文件远程读写等能力。
八、落地实施步骤
-
搭建网关基础服务:FastAPI接口、Redis数据结构、ElementUI可视化基础页面;
-
实现Agent注册、注销、心跳上报、网关定时轮询保活能力;
-
开发任务池管理、任务-Agent匹配调度核心逻辑;
-
打通CLI任务上报、网关调度、Agent执行、结果回传全链路;
-
完善异常容错、日志审计、可视化运维功能;
-
压测优化,适配K8s大规模Agent集群调度。
(注:部分内容可能由 AI 生成)