架构文档
HeteroFlow 是本站的异构算力与大模型调度产品。架构文档。大模型调度平台的技术形态与关键机制:Go 单二进制交付、React 双布局前端、五层结构与中间件链,以及一次推理调用从网关鉴权、配额检查到渠道路由回放的完整链路拆解与设计取舍。
架构文档
> 大模型调度平台的技术形态与关键机制:Go 单二进制交付、React 双布局前端、五层结构与中间件链,以及一次推理调用从网关鉴权、配额检查到渠道路由回放的完整链路拆解与设计取舍。
1. 总体形态:一个二进制即完整平台
平台是Go 单二进制后端服务加 React 前端:前端构建产物被直接嵌入后端二进制,交付形态就是一个可执行文件(或一个容器镜像),不依赖外部静态资源服务。数据层单机起步用轻量嵌入式数据库,生产环境用 PostgreSQL——同一套数据模型两种部署形态,升级不换代码。
按职责分五块:
| 模块 | 职责 |
|---|---|
| 前端 | 两套布局:管理台(治理与开发者工作区)与门户(模型广场 / 工作区),角色分流在路由守卫完成 |
| 控制层 | 路由装配(推理 / 管理面 / 门户 / 视频 / 任务 / 插件等子路由器)、中间件链、管理面接口 |
| 数据层 | 统一数据模型(用户 / 密钥 / 渠道 / 日志 / 用量 / 审批 / 租户 / 数据分级 / 告警 / 审计链)+ 渠道缓存 |
| 转发层 | 选路引擎 + 各协议转发实现(对话、向量化、实时语音、图像、视频、任务等)+ 统一错误码字典 |
| 身份与同步 | SSO 协议适配(CAS / OIDC / LDAP)与登录后组织信息即时同步(JIT) |
2. 一次推理调用的完整链路
以对话补全为例,请求依次经过:
1. 鉴权:校验 sk- 密钥,建立租户与用户上下文;
2. 幂等:携带幂等键的重复请求被安全拦截(本地拒绝不达上游);
3. 模型级限流:按模型维度的请求频率控制;
4. 选路:解析请求的模型名(含 auto 智能路由的三层解析与候选评分,见智能路由),按分组查渠道缓存选出承载渠道;无可用渠道且降级预条件成立时,转入跨模型降级外循环换模型再选;
5. 配额判定:日调用 / QPS / 并发 / 月额度四维依次判定(见配额与限流),任一维拒绝立即返回明确错误码——拒绝不计数不扣费;四维全过则占并发位、注入密钥超时;
6. 转发上游:按渠道协议转发,失败重试尽后进入降级外循环;响应流式回传;
7. 落账:用量与调用日志落库(见审计与日志),响应带回 X-Oneapi-Request-Id 请求编号。
两条链路语义值得注意:实时语音等长连接端点按连接建立计一次调用;配额判定挂在选路之后——保证判定时模型已解析,四维阈值能按「实际要调的模型」生效。
3. 双布局前端与路由守卫
前端有两套布局:管理台承载治理与开发者工作区,门户面向普通用户(模型广场 / 工作区)。角色分流发生在路由守卫,语义有讲究:
- 无会话 → 跳登录页;
- 瞬态错误(限流 / 服务端 5xx)→ 保持当前路由,等会话恢复链自动重试——而不是把用户踢回登录页。踢出去会让刚刷新成功的会话再向造成失败的限流窗口发起新一轮登录请求,越踢越糟;
- 普通用户访问白名单外的管理路径 → 送回门户首页而非报 403:对没有管理职责的用户,「回你自己家」比「禁止入内」更符合预期;
- 开发者工作区路由有明确白名单(密钥、调试台、个人资料、安全、钱包、订阅、密钥申请、聊天、使用日志等),未知与管理路径不默认放行;
- 匿名访问的模型广场无需登录,模型目录按开放角色过滤,过滤规则 fail-closed(宁可少展示,不越权展示)。
4. 中间件链:三张面各有一条链
| 面 | 链路(按执行顺序) |
|---|---|
推理面 /v1 | 跨域 → 请求解压 → 请求体暂存清理 → 统计 → 鉴权 → 系统性能检查 → 幂等(严格 + 本地拒绝)→ 模型级限流 → 选路 → 配额判定 |
| 管理面 | 全局基础链 + 角色注解(管理员 / 超管 / 租户管理员)+ 租户资源校验 + 数据分级 / 模型可见性 / 审计按路由挂载 |
| 门户 | 匿名可读模型目录(角色过滤 fail-closed),普通用户入口 |
链的顺序本身是语义:解压在最前保证后续中间件看到的是解压后的请求体;幂等先于限流保证重复请求不烧限流计数;选路先于配额保证四维判定按实际模型生效。
5. 可靠性与治理内建
- fail-closed 默认拒绝:目录过滤、配额检查、权限判定在异常时选择拒绝而非放行;
- 幂等:网络重试造成的重复请求安全拦截,本地拒绝不消耗上游额度;
- 审计哈希链:管理动作审计记录逐条哈希串联,篡改任何一条都会断链可见(见审计与日志);
- 渠道缓存 + 探活联动:选路走内存缓存保证高并发下不查库,渠道状态变更(探活失联自动禁用、机器注册自动上下架,见机器注册)即时刷新缓存;
- 统一错误码字典:转发层各协议共享一套错误码字典,同一类失败在哪个协议端点上都返回同一个机器可读码(见错误码总表);
- 单二进制 + 嵌入式前端:升级 = 换一个二进制 / 镜像,不存在前后端版本错配问题;回滚同样原子。