主题
05|AI Infra 架构审核与生产收敛
一句话:生产收敛守的是四条硬约束而非功能清单:身份不可自报,
tenant_id、subject_id只从网关验签后的上下文派生;上游密钥不进客户端,连接描述只回答“去哪调用”;租户隔离必须由跨租户负向测试证明;SLO、容量与灾备必须由演练和对账取证,代价是拿可用性换正确性——授权快照过期或控制面不可达时 fail-closed,新增调用一律拒绝。
定位:本篇是 06 专栏的架构基准篇,对 00–16 进行交叉审核,给出修正后的目标架构、关键契约与生产验收门槛。若其他篇章与本篇冲突,以本篇和源码事实为准;状态与证据等级以
06-架构委员会评审与闭环台账.md为准。 审核对象:HiMarket 源码快照、当前本地实证环境、RAGFlow 知识底座、mem0 记忆方案。 审核日期:2026-10-26 结论:方向成立,当前证据足以支撑 POC / 方案演示,不足以直接进入生产。市场控制面已有部分实证,身份、凭证、数据面、多租户隔离、计量与灾备仍未闭环。 评审记录:六视角桌面评审结论、50 项缺口、25 项 P0、ADR 与闸门状态板见06-架构委员会评审与闭环台账.md;本篇不另立状态。
一、执行摘要
1.1 成熟度判定
| 能力域 | 当前结论 | 主要依据 | 生产判定 |
|---|---|---|---|
| HiMarket 市场控制面 | 部分实证 | 本地起栈;Nacos 导入 Skill/Worker;模型与 MCP 产品创建;发布、订阅链 APPROVED | 有条件可用 |
| MCP / 模型数据面 | 未闭环 | 未装 Higress;未完成凭证调用、工具发现、限流与计量 | 不可上线 |
| 企业身份 | 设计完成、未实证 | OIDC 代码存在,但 ID Token 签名校验为 TODO | 不可上线 |
| Skill / Worker 分发 | 部分实证 | Nacos 元数据导入成立;包签名、扫描、版本回滚未验证 | 仅内部试用 |
| RAGFlow 知识底座 | 单机 POC | v1.0.0-rc2 小样本链路跑通(4 chunk/193 tokens);未做多租户、HA、容量与越权测试 | 不可上线 |
| 记忆底座 | 单机 POC | 13 篇完成 mem0 服务化与基础链路;身份绑定、跨租户、删除、投毒、HA 未验证 | 不可上线 |
| 可观测 / 计量 / 审计 | 缺口大 | 多为设计描述,没有统一事件模型与对账机制 | 不可上线 |
| 灾备 / 容量 | 缺口大 | 缺少真实压测、故障注入和 RPO/RTO 演练 | 不可上线 |
1.2 P0 阻断项(12 类,细项 25 项见 06)
- 身份伪造风险:HiMarket OIDC 未校验 ID Token 签名;在没有前置可信网关时,不能把 OIDC 回调结果视为可信身份。
- 凭证边界错误:市场连接描述只应包含“去哪调用”,不能包含上游模型、MCP、RAGFlow 的长期密钥。密钥必须由网关或凭证中介在调用时注入。
- 订阅与调用未闭环:订阅 APPROVED 只代表市场关系成立,不代表网关已经生成可用凭证、路由和配额。
- 多租户隔离未证明:Portal、Consumer、知识库 ACL、记忆
user_id之间的映射尚未做交叉越权测试。 - RAGFlow 为 RC 版本:
v1.0.0-rc2不能作为生产基线;必须锁定稳定版本与镜像 digest。 - 错误的生产安全方案:RAGFlow 的 SSRF 护栏不应通过“绕过”解决;应改为受控内网白名单、出站代理或经评审的上游修复。
- 无高可用与灾备:单机 Compose、单 MySQL、单 Nacos、单网关均不满足生产 SLO。
- 计量事实不可对账:仅有订阅记录不等于用量;必须定义幂等的计量事件、网关权威口径与日结对账。
- 记忆身份与删除未闭环:POC 直接接受请求体
user_id,只证明存储过滤、不证明身份不可伪造;删除未覆盖缓存/派生数据,缺可验证完成状态与 legal hold 分离。 - 管理面提权与公开攻击面:HiMarket Admin、Nacos、Higress 控制台若共用入口/凭据,或 17 个
@PublicAccess端点未逐项复核,管理面可成为越权入口;必须独立入口、MFA、JIT、break-glass 审批与公开端点清单。 - 成本滥用(Denial of Wallet):缺按租户/用户/产品/工具的 token、调用、并发、日预算与异常熔断;攻击者可用长对话、批量工具调用或流式连接击穿预算。
- 文档口径越权:14–16 曾把目标态施工图写成“生产方案、不设前置验证”,与本篇证据结论冲突;本轮已由 06 ARC-02 收口(改为“目标态施工图 + E0–E4 标注”),正式会签前仍按 P0 治理项跟踪。
1.3 审核结论
方案应继续保持“市场控制面 + 独立数据面 + 契约化执行层”的方向,但需要从“功能串联”升级为“可治理的生产系统”:先收口身份、凭证、租户和调用链,再补知识/记忆,最后做 HA、容量和灾备。不要把 POC 的 happy path 写成生产能力。
与 08 参考方案的关系:本文复用其“控制面与运行时解耦、实例边界/NetworkPolicy、Vault/KMS 密钥治理、生命周期回收、配额与全链路审计”的生产化原则;但市场控制面与产品契约以 06 的 HiMarket 为准,不机械复制 08 的版本与灰度细节。
二、源码与实证基线校正
本次以本地源码快照 C:\Users\Administrator\Desktop\02-项目代码\himarket 为准,并核对运行中的 RAGFlow 环境。
| 项目 | 原文口径 | 校正后事实 | 影响 |
|---|---|---|---|
| HiMarket 版本 | 多处称 v0.5.0 | Git 3a63fc5(2026-10-23),pom.xml 为 1.0-SNAPSHOT | 不能把源码快照等价为某个正式发布版 |
| Controller 数量 | 30 个 | 当前快照 28 个 | 数量应作为快照事实,不应作为稳定接口承诺 |
| ProductType | 主要写 3 类 | 实际 7 类:REST_API、HTTP_API、MCP_SERVER、AGENT_API、MODEL_API、AGENT_SKILL、WORKER | “五类市场”是业务分类,不等同于 ProductType 枚举 |
| 免认证端点 | 17 个 | 当前快照有 17 个 @PublicAccess 注解,静态展开为 17 个 GET 端点;此前“34 个”是误把注解注释/文档引用计入 | 17 的口径基本正确;有效端点数仍需运行时扫描,不能把注解数直接当端点数 |
ProductRefResult | 含 mcpConfig、agentConfig、modelConfig | 当前 DTO 仅含 productId/sourceType/gatewayId/*RefConfig/nacosId | GET /products/{id}/ref 返回的是引用元数据,不是可凭证明文 |
toTransportConfig() | 返回 url/transport/tools/凭证 | 当前只返回 mcpServerName、transportMode、url | 工具清单与凭证由其他链路注入,不能混写 |
| MCP 外网域选择 | 过滤 intranet 后取公网域 | 源码确实过滤 intranet,但企业私有部署可能只有内网域 | 直接使用会返回空配置;企业版必须显式配置投递域名 |
| MCP 元数据脱敏 | 非管理员自动脱敏 | McpMetaResult.sanitize() 当前只清空 subscribeParams | 不能把“sanitize 已覆盖所有敏感字段”作为安全假设 |
| OIDC 验签 | 生产需补 JWK 验签 | OidcServiceImpl 明确 TODO | 是生产 P0,不是普通增强项 |
| RAGFlow 版本 | 多处称 v1.0 | 实际运行镜像 v1.0.0-rc2 | RC 版本不可作为生产稳定基线 |
说明:源码行号会随快照变化,本文优先记录类名、方法语义与可复核结论,避免把行号当作长期契约。
三、修正后的目标架构
3.1 控制面与数据面分离
架构约束:
- HiMarket 是市场控制面与人类入口,不承载业务请求转发。
- Higress 是唯一数据面入口;模型、MCP、知识、记忆都通过受控路由访问。
- Nacos 是配置与内容引用源,不保存长期密钥,不作为运行时强依赖进入每次请求。
- 凭证中介负责把“消费者凭证”兑换成“上游短期凭证”,实例不持有上游长期密钥。
- 执行层只认稳定的产品端点与授权上下文,不感知 RAGFlow、mem0、模型供应商的内部实现。
3.2 四个平面
| 平面 | 职责 | 关键状态 | 失败时的影响 |
|---|---|---|---|
| 控制面 | 产品、发布、订阅、审批、配置发布 | 强一致优先 | 新订阅/变更受阻,已有调用尽量不受影响 |
| 数据面 | 鉴权、路由、限流、协议转换、流式转发 | 低延迟、可降级 | 直接影响业务可用性 |
| 异步面 | 文档解析、向量化、记忆提取、审计落盘 | 最终一致、可重试 | 影响新鲜度,不应阻塞在线查询 |
| 证据面 | 指标、日志、链路、计量、审计 | 可追溯、可对账 | 无法运营与追责,属于生产阻断 |
四、身份、授权与凭证契约
4.1 四类身份必须分开
| 身份 | 示例 | 生命周期 | 用途 |
|---|---|---|---|
| 人类主体 | 员工、管理员、审核人 | 跟随 HR/IdP | 登录、审批、查看自己的订阅与数据 |
| 工作负载 | Agent 实例、应用、CI 任务 | 跟随实例/应用 | 调用市场产品 |
| Agent 委托 | Agent 代表某员工执行任务 | 单次任务/短时 | 把人类授权安全地传给工具链 |
| 平台服务 | 网关、知识中介、记忆服务 | 平台管理 | 内部服务间 mTLS 与最小权限 |
错误做法:把 developer_id、user_id 当作 Consumer 凭证;或让 Agent 在请求体里自报 user_id。
4.2 授权链
text
企业 IdP subject
-> HiMarket Portal / Developer(人类身份)
-> Consumer + Subscription(工作负载与产品授权)
-> 短时 Access Token(product / tool / environment / tenant scope)
-> Higress 鉴权
-> AuthZ + Credential Broker 校验订阅、工具白名单、配额
-> 注入上游短期凭证 + 签名上下文
-> 目标 MCP / 模型 / 知识 / 记忆服务4.3 关键规则
tenant_id、subject_id、consumer_id只能来自网关验证后的令牌或签名上下文,禁止信任请求体。- 人类访问使用 OIDC;工作负载访问使用 OAuth Client Credentials 或受控 API Key;两者不得混用。
- 每个 Consumer 至少绑定
tenant_id + environment + product scope;生产与测试凭证隔离。 - 订阅校验必须在数据面实时生效;订阅撤销后,已有会话设置最大存活时间。
- 上游密钥只存在于 Vault/KMS 或网关内存;Nacos、连接描述、日志、备份中不得出现明文。
- OIDC 必须校验签名、
iss、aud、exp、nonce、state与重定向白名单。仅校验exp不构成认证。 - 工具调用使用最小 scope;高风险工具(写文件、发消息、转账、删除)默认需要 HITL 审批。
4.4 凭证中介
市场不应把供应商密钥直接分发给调用方。推荐两种模式:
- 托管出口模式(默认):调用方只拿平台凭证,网关注入上游凭证。适合模型、RAGFlow、内部 MCP。
- 令牌交换模式:网关通过 OAuth Token Exchange 获取短时下游令牌。适合支持标准 OAuth 的 SaaS MCP。
禁止“把上游 API Key 拼进 MCP 连接配置再返回给客户端”的设计。
4.5 工作负载身份与 Agent 委托
四类身份必须有可验证的载体,不能只靠字段约定:
| 身份 | 推荐载体 | 关键约束 |
|---|---|---|
| 人类主体 | OIDC ID/Access Token | 短时、绑定 aud,完成 JWK 验签与 nonce/state 校验 |
| 工作负载 | K8s ServiceAccount + OIDC/SPIFFE,或 mTLS 证书 | 不把静态 API Key 写入 Pod;按 namespace/service 最小权限 |
| Agent 委托 | OAuth 2.0 Token Exchange(RFC 8693)或签名 JWT | sub=Agent、act=人类、aud=产品、tenant_id、scope、jti,TTL ≤ 15 分钟,一任务一令牌 |
| 平台服务 | mTLS + 服务级授权 | 不使用共享管理员 Token;按调用方服务授权 |
禁止:Agent 持有员工的 refresh token;把人类 Token 原样透传给工具;用通配 scope 或跨租户 aud 换取“省事”。
4.6 订阅与授权传播:本地快照 + fail-closed
数据面不能每次调用都同步访问 HiMarket,否则控制面会成为调用链的单点。推荐:
text
HiMarket 订阅状态机:PENDING → APPROVED → SUSPENDED / REVOKED / EXPIRED
-> 发布带 epoch/version 的签名授权快照或事件
-> AuthZ 本地缓存(key: tenant + consumer + product + version)
-> 每次调用校验快照版本、有效期、scope、工具白名单- 授权快照 TTL 建议 ≤ 60 秒;撤销事件目标 ≤ 10 秒生效;
- 快照缺失、版本过期、控制面不可达且无法确认时 fail-closed;
- 控制面短时故障可让已确认的存量授权在 TTL 内继续,新增/变更授权拒绝;
- 每次 allow/deny 都要记录
subscription_id / epoch / reason,便于追责与对账。
4.7 凭证中介的故障与轮换
- Credential Broker 必须多副本、跨故障域,不能成为新的单点;
- 上游凭证使用动态短期凭证或 Token Exchange,按租户/产品隔离,禁止跨租户复用;
- Broker 不可用时,新调用 fail-closed;不得回退到静态密钥或明文连接配置;
- 凭证轮换、吊销、过期要有审计与告警;在途令牌到期即失效;
- Secret Zero 由工作负载身份完成,Nacos、镜像、Git、日志、备份不得出现长期密钥。
五、MCP 数据面契约
5.1 发布与调用
text
供给登记:Nacos / API Definition 保存非敏感引用
-> HiMarket 校验元数据、版本、工具 schema
-> 配置发布器生成稳定产品端点、路由、配额、工具白名单
-> 消费者订阅并通过审批
-> 网关按 consumer + product + tool 放行
-> 凭证中介注入上游凭证
-> 目标 MCP Server稳定端点应按“产品 + 版本 + 环境”生成,而不是直接暴露 Nacos 中的临时地址。企业私有网络必须显式配置内网投递域名,不能依赖 toTransportConfig() 的“过滤 intranet 取公网域”逻辑。
5.2 工具契约
每个 MCP 工具至少要登记:
| 字段 | 要求 |
|---|---|
| 名称与版本 | 全局唯一,语义化版本 |
| 输入/输出 schema | JSON Schema;严格校验,拒绝额外字段或超限载荷 |
| 副作用等级 | read / write / external / destructive |
| 超时与重试 | 只对幂等工具自动重试;写操作禁止盲目重试 |
| 幂等键 | 写操作必须支持 idempotency_key |
| 数据分类 | 是否接触个人信息、机密、外部网络 |
| 审批策略 | 哪些参数组合需要人工确认 |
| 速率与并发 | 按租户、用户、工具三层配额 |
5.3 Streamable HTTP 与流式
- 远程 MCP 优先使用 Streamable HTTP;对仍使用 SSE 的存量服务设置兼容期和下线计划。
- 网关必须支持:会话 ID、SSE 透传、无缓冲、长连接超时、客户端断连回收、请求体上限。
- 不能把 MCP 的
POST与GET流式通道拆成不同鉴权策略,否则会出现绕过。 - 网关日志只记录工具名、参数摘要与结果状态,不记录完整敏感参数或模型上下文。
5.4 配置发布、回滚与漂移检测
控制面到数据面的配置变更必须按“生产变更”治理:
text
HiMarket 期望状态 -> 签名配置包(product/version/route/quota/tool allowlist)
-> 配置发布器(outbox + 幂等 apply + 版本号)
-> Higress 金丝雀/灰度
-> 健康检查 + 指标对比
-> 全量或回滚- 每条路由/工具配置带
config_version,网关回报实际生效版本; - 发布失败或版本不一致要阻断发布并告警,不能“目录显示已发布、网关仍是旧配置”;
- 支持一键回滚到上一个已验证版本;回滚也要审计;
- 定时对账“期望状态 vs 实际状态”,输出漂移清单与责任人;
- Nacos namespace/ACL 按环境与租户隔离;配置内容签名/审核,防配置投毒。
六、知识与记忆的生产收敛
6.1 知识库:从“直连 RAGFlow”改为“知识中介”
推荐链路:
text
Agent -> Higress -> AuthZ/Credential Broker -> Knowledge Broker -> RAGFlow -> 索引Knowledge Broker 的职责:
- 用网关签名上下文确定
tenant_id / subject_id / consumer_id。 - 维护“Portal 租户、知识库、数据集、文档 ACL、消费产品”的映射。
- 在服务端生成检索过滤条件,禁止只靠客户端传
dataset_ids。 - 统一执行混合检索、rerank、引用拼装、敏感字段过滤。
- 对检索结果做租户泄漏检测与审计。
RAGFlow 的 permission: me/team/public 只能作为底层能力之一,不能直接等同于企业 ACL。企业共享知识库建议采用“租户级 RAGFlow 空间 + 数据集 owner/ACL + 服务端过滤”;个人资料使用独立数据集或独立空间。是否按员工创建个人 RAGFlow 租户,需要基于成本与共享需求单独决策,不能默认“一人一租户”。
6.2 知识导入
必须补齐:
- 上传病毒扫描、文件类型白名单、大小/页数配额。
- 文档版本、增量更新、删除传播、重复文档去重。
- 解析失败隔离与重试上限;毒文档不得无限重试。
- PII/机密识别与脱敏策略;敏感文档标记与访问审计。
- embedding 模型版本、维度、归一化方式写入索引元数据;升级时支持双写与重建。
- 检索黄金集与回归评测;上线前验证 recall@k、引用正确率、越权率为零。
6.3 记忆服务
记忆必须按以下层级隔离,任何查询都不得只靠客户端参数:
text
tenant_id > owner_subject_id > project_id > memory_type > visibility生产要求:
user_id由鉴权上下文派生;请求体中的user_id仅作为断言,不一致直接拒绝。- 事实、画像、技能分开建模;技能记忆默认不跨用户共享,除非经过显式发布与审核。
- 记忆写入是异步任务,必须有幂等键、去重、失败重试与死信队列。
- 记忆提取使用独立模型策略与预算,防止攻击者通过长对话制造高额抽取成本。
- 删除、导出、到期回收必须覆盖向量库、元数据、审计快照;删除请求要有可验证的完成状态。
- 防记忆投毒:来源可信度、冲突检测、敏感内容过滤、人工纠错入口。
6.4 数据治理与生命周期
知识、记忆、Skill/Worker 都要有统一的数据治理标签:
| 维度 | 最低要求 |
|---|---|
| 分类分级 | public / internal / confidential / restricted;与 ACL、加密、导出策略联动 |
| 来源与血缘 | 记录来源系统、导入人/服务、文档版本、解析器版本、embedding 版本 |
| 保留与删除 | 业务保留期、审计保留期、备份保留期分别定义;删除任务可验证 |
| 合规冻结 | legal hold 白名单、审批、解除;冻结与普通删除失败区分 |
| 数据主体请求 | 查询、导出、更正、删除(DSAR)流程与时限;跨副本传播 |
| 跨境/驻留 | 模型供应商与存储区域白名单;禁止把受限数据路由到未批准区域 |
6.5 质量与安全评测闸门
| 对象 | 指标 | 上线门槛(建议,需业务确认) |
|---|---|---|
| 知识检索 | recall@k、MRR、引用正确率、无答案拒答率 | 黄金集 ≥100 问;越权率=0;引用可定位 |
| 知识问答 | 忠实度、答案正确率、PII 泄漏率 | 抽样人工评审;高风险场景必须拒答/转人工 |
| 记忆 | 事实准确率、冲突率、过期残留率、删除完成率 | 跨会话正确引用;删除后 0 召回 |
| 工具/MCP | schema 符合率、副作用误触发率、超时率 | 写操作 100% 可审计;高风险工具 HITL |
| 安全 | Prompt Injection/投毒拦截率、越权拦截率 | 红队用例全部阻断,且有审计 |
评测集、脚本、基线结果要版本化;每次模型、解析器、embedding、权限策略变更都重跑回归。
七、非功能目标与容量
7.1 建议 SLO(需业务确认)
| 指标 | 建议目标 | 说明 |
|---|---|---|
| 市场门户可用性 | 99.9% | 控制面短时不可用不应影响存量调用 |
| 数据面可用性 | 99.95% | 网关、鉴权、模型/MCP 出口 |
| 模型首 Token 延迟 | P95 < 2s(同城) | 不含供应商排队;需分模型统计 |
| MCP 工具调用 | P95 < 1.5s(只读) | 写操作单独统计 |
| 知识检索 | P95 < 1.5s | 不含生成 |
| 订阅变更生效 | < 60s | 撤销可更快,目标 < 10s |
| 异步解析 | 95% 在 15 分钟内完成 | 按文档大小分档 |
| 审计落盘 | < 5 分钟 | 关键安全事件应近实时 |
| 计量对账差异 | < 0.1% | 以网关事件为权威源 |
7.2 容量规划原则
- 先按“注册用户数、日活、峰值并发、平均上下文、工具调用比、文档量与解析峰值”建立模型,再做压测;不要用容器数量代替容量结论。
- 数据面与控制面独立扩容;RAGFlow API、ingestor、embedding、索引分别评估瓶颈。
- 流式请求按并发连接数而非仅 QPS 估算;长连接要预留连接数与内存。
- 向量库按“向量维度 × 文档块数 × 副本数 × 索引开销”估算,并预留重建空间。
- 记忆服务按“日新增记忆条数 × 抽取模型成本 × 保留期”做成本上限。
7.3 高可用基线
| 组件 | 最低生产形态 | 注意 |
|---|---|---|
| Higress | 3 副本,跨故障域 | 配置与证书一致性 |
| HiMarket Server | 3 副本 | 无状态,会话外置 |
| MySQL | 主从/多可用区 | 备份与 PITR |
| Redis | Sentinel/Cluster | 不能作为唯一计量账本 |
| Nacos | 3 节点 | 配置发布失败要可回滚 |
| 对象存储 | 纠删码/多副本 | 版本化与防误删 |
| RAGFlow API | 多副本 + 探针 | 拆分进程需经官方支持验证 |
| ingestor | 独立扩容 | 队列积压与毒任务隔离 |
| Qdrant | 多副本/快照 | 明确恢复与重建流程 |
7.4 灾备目标(建议)
| 数据 | RPO | RTO | 方式 |
|---|---|---|---|
| 控制面数据库 | ≤ 5 分钟 | ≤ 30 分钟 | 跨 AZ 主从 + PITR |
| 对象存储 | ≤ 15 分钟 | ≤ 1 小时 | 版本化 + 跨域复制 |
| 知识库元数据 | ≤ 15 分钟 | ≤ 1 小时 | 数据库备份 + 索引可重建 |
| 记忆数据 | ≤ 5 分钟 | ≤ 1 小时 | 快照 + 事件重放 |
| 审计/计量 | 0(同步落盘) | ≤ 30 分钟 | 追加写、不可变存储 |
所有 RPO/RTO 必须通过演练证明,文档承诺不算完成。
7.5 容量模型工作表(必须用实测填充)
容量评审不接受“容器数量=容量”的结论,至少要填完以下输入与推导:
| 输入 | 说明 |
|---|---|
| 租户数 / 用户数 / DAU | 活跃维度与峰值系数 |
| 峰值 QPS / 并发流式连接 | 分别估网关、模型、MCP、知识、记忆 |
| 平均输入/输出 token | 按产品与模型分档 |
| 工具调用比 / 写操作比 | 决定 MCP 与 HITL 容量 |
| 文档量 / 页数 / 解析峰值 | 决定 ingestor、OCR、队列 |
| 文档块数 / embedding 维度 / 副本数 | 决定向量存储与重建空间 |
| 记忆日增条数 / 保留期 / 抽取模型 | 决定抽取 TPM 与存储成本 |
推导公式(示例):
text
向量存储 ≈ 块数 × 维度 × 4 bytes × 副本数 × (1 + 索引开销)
embedding TPM ≈ 峰值文档页数 × 每页块数 × 每块 token / 目标完成时间
网关连接数 ≈ 峰值流式请求数 × 平均会话时长 / 目标复用率输出必须包含:各组件副本数、CPU/内存、连接数、队列积压上限、30% 余量、压测场景与瓶颈结论。没有压测数据时,只能写“待验证”,不能写“可支撑 N 用户”。
八、可观测、审计与计量
8.1 统一上下文
每个跨组件请求至少携带:
text
trace_id, request_id, tenant_id, subject_id, consumer_id,
product_id, product_version, subscription_id, tool_name,
environment, region, result, latency_ms8.2 分层指标
| 层 | 必观测指标 |
|---|---|
| 市场 | 产品发布成功率、订阅审批时长、配置同步延迟、目录漂移数 |
| 网关 | QPS、错误率、P95/P99、限流拒绝、鉴权延迟、SSE 连接数 |
| 模型 | 输入/输出 token、TTFT、总时延、供应商错误、降级次数 |
| MCP | 工具发现失败、调用成功率、工具级时延、schema 校验失败、超时 |
| 知识 | 解析成功率、队列积压、检索 P95、空召回率、引用命中率、越权拦截 |
| 记忆 | 提取成功率、队列延迟、命中率、删除完成率、污染告警 |
| 安全 | 401/403、签名失败、越权尝试、异常 egress、密钥轮换失败 |
8.3 计量事件
计量不是“双写”:网关产生权威事件,下游可重放聚合。
json
{
"event_id": "evt_uuid",
"occurred_at": "2026-10-26T10:00:00Z",
"tenant_id": "tnt_001",
"subject_id": "emp_001",
"consumer_id": "cns_001",
"product_id": "prd_001",
"subscription_id": "sub_001",
"tool_name": "knowledge.search",
"usage": {"calls": 1, "input_tokens": 0, "output_tokens": 0, "bytes": 2048},
"result": "success",
"trace_id": "tr_001"
}要求:event_id 幂等、事件时间可纠正、日结对账、异常事件可人工补录但不能篡改原始账本。
8.4 计量账本与审计的最小契约
计量事件至少补齐:
text
event_id, event_type, occurred_at, received_at,
tenant_id, subject_id, consumer_id, product_id, product_version, subscription_id,
tool_name, operation, unit, quantity, billable, currency, price_version,
result, error_code, trace_id, idempotency_key, source_region对账规则:
- 网关事件是权威源;下游聚合表可重放,不允许反向覆盖原始事件;
- 重复事件按
event_id去重;迟到事件按occurred_at归集到原账期,并生成调整分录; - 每日对账:网关事件 vs 聚合账本 vs 计费系统,差异 < 0.1%,超阈值阻断结算;
- 人工补录必须生成新事件并保留审批人,不能修改原始账本;
- 审计与计量保留期分离:审计按合规,计量按财务;均需防篡改存储。
日志与审计的 PII 约束:
- 禁止记录完整 Prompt、完整文档内容、上游密钥、Authorization 头;
- 需要排障时记录哈希/摘要与采样上下文,按角色临时授权;
- 日志、Trace、审计、备份统一保留策略与访问审计;
- 删除请求要覆盖可检索副本;备份中的副本按保留策略到期失效,并在合同中说明。
九、安全设计补充
| 威胁 | 必做控制 |
|---|---|
| OIDC 令牌伪造 | 签名、iss/aud、nonce、state、时钟偏差、JWKS 轮换 |
| 凭证泄漏 | 托管出口、短期令牌、Vault/KMS、日志脱敏、轮换与吊销 |
| 租户越权 | 服务端 ACL、强制 tenant 过滤、交叉租户测试、行级审计 |
| Prompt Injection | 把工具/文档输出当不可信数据;系统指令与数据隔离;高风险工具审批 |
| SSRF | 出站域名白名单、解析后 IP 校验、禁止元数据地址、专用 egress 代理 |
| 工具投毒 | 工具清单签名、schema 固定、版本审核、来源可信度 |
| Skill/Worker 供应链 | 包签名、SBOM、漏洞扫描、静态检查、隔离执行 |
| 知识泄漏 | 检索前 ACL、结果过滤、引用权限复核、下载水印 |
| 记忆投毒 | 来源标记、冲突检测、敏感内容过滤、人工纠错 |
| 模型供应商风险 | 数据驻留、零留存条款、脱敏、区域路由、回退模型 |
委员会补充的四类风险:
- 混淆代理(Confused Deputy):每个令牌必须绑定
aud(具体产品/工具)与租户,禁止通配;Agent 不能拿 A 产品令牌调用 B 产品。 - Denial of Wallet:按租户/用户/产品设置 token、调用次数、并发与日预算;异常用量自动降级/熔断并告警,不能只依赖上游账单。
- 管理面提权:HiMarket Admin、Nacos 控制台、网关控制台使用独立入口、MFA、JIT 授权与 break-glass 审批;管理面不得与业务入口共享凭据。
- MCP/Skill 供应链:MCP Server 镜像/包签名、来源证明、SBOM、漏洞扫描、出站白名单;Skill/Worker 与 MCP 同一套审核,不能在市场里“先上架再补签”。
SSRF 修正:RAGFlow 的私网地址限制是正确护栏。生产方案应采用“显式允许 emb-service 内网地址 + 出站 NetworkPolicy/代理 + 禁止任意 URL”,而不是通过 @Builtin 驱动绕过检查。若必须支持内网模型服务,应由平台维护允许清单并做 DNS 重绑定防护。
十、交付顺序与验收闸门
闸门不是“功能做完”,而是“证据达到最低等级”。P0/P1/P2 与 14–16 的 Java 模块 M0–M8 / 功能里程碑 0–3 是两条线(ADR-11);详细 ID、Owner、目标窗口与状态见 06。 证据等级:E0 文档、E1 源码/配置、E2 单机 POC、E3 负向/压测/故障/恢复、E4 生产运行与对账。P0 的身份/越权/凭证/删除类最低 E3;计量与 SLO 生产准入要 E4。
P0:让调用链真实可治理(建议 6–8 周,2 个并行小队)
- 修复 OIDC 全量校验:JWK 验签、
iss/aud/exp/nonce/state/PKCE/redirect、JWKS 轮换;补离职/转岗/session revocation。 - 建立工作负载身份(SA+OIDC/SPIFFE 或 mTLS)与 Agent 委托(RFC 8693 或签名 JWT,
sub/act/aud/tenant/scope/jti,TTL≤15 分钟)。 - 实现凭证中介:动态短期凭证/Token Exchange,字段级脱敏,Broker 故障 fail-closed,禁止静态回退。
- 订阅授权传播:签名快照+epoch,数据面 TTL≤60 秒,撤销≤10 秒,控制面不可达时 fail-closed。
- 完成 HiMarket + Higress + Nacos + 真实 MCP/模型的凭证调用闭环;连接描述不含上游密钥。
- 为 MCP 工具建立 schema、白名单、副作用分级、超时、载荷限制、会话绑定、出站 allowlist 与审计。
- 删除文档与仓库中的明文口令、真实密钥和跳过校验脚本;复核 17 个公开端点。
- 完成跨租户、跨用户、跨 Consumer、跨知识库/记忆的负向测试。
- 记忆接口收口:请求体
user_id/tenant_id只作断言,身份由签名上下文派生;补跨用户/跨租户负向测试。 - 定义可验证删除与 legal hold 分离;删除覆盖向量、元数据、缓存与导出副本。
- 管理面独立入口、MFA、JIT、break-glass 审批;按租户/用户/产品/工具设置配额、预算与 Denial of Wallet 熔断。
- 配置发布:签名配置包+
config_version+金丝雀+一键回滚+期望/实际漂移对账。 - 计量账本:网关权威事件、幂等去重、迟到调整、日对账<0.1%。
P0 闸门证据表:
| 验收项 | 最低证据(E3) | 不接受 |
|---|---|---|
| OIDC | 伪造/过期/错 aud/重放/开放重定向全部拒绝;JWKS 轮换不停机 | “代码已写” |
| 工作负载身份 | 伪造凭证、跨 namespace 调用被拒;密钥扫描 0 命中 | “用了 K8s” |
| Agent 委托 | 令牌交换矩阵;跨产品/跨租户/过期/重放全部拒绝 | “有 JWT” |
| 凭证中介 | 端到端调用+全链路 0 泄漏+故障 fail-closed | “Vault 已装” |
| 授权传播 | 撤销 10 秒内 403;控制面断连行为符合 fail-closed | “订阅表有状态” |
| 租户隔离 | 跨租户/跨用户/跨 Consumer 负向测试为 0 | “有 tenant_id 字段” |
| 管理面 | 无 MFA/JIT 无法进入;公开端点清单签字 | “有管理员角色” |
| Denial of Wallet | 超预算/突发流量被限;跨副本计数误差在阈值内 | “有 Redis 限流” |
| MCP/模型数据面 | Consumer→Higress→AuthZ→Broker→上游→计量事件 可复现 | “订阅 APPROVED” |
| 知识 ACL | 跨数据集/跨用户 0 越权;ACL 变更可传播 | “RAGFlow permission” |
| 记忆身份/删除 | 伪造 user_id 被拒;删除完成率 100% | “user_id 过滤” |
| 配置发布 | 发布失败自动回滚;漂移清单为 0 | “有发布按钮” |
| 计量 | 连续 7 日三方对账<0.1%(生产准入为 E4) | “有日志” |
P0 退出:06 中 25 项 P0 全部 Verified,或有签字且未过期的 Accepted Risk;否则生产 No-Go。
P1:让知识底座可用(建议 6–8 周)
- 升级/锁定 RAGFlow 稳定版本与镜像 digest;RC 仅限隔离 POC。
- 引入 Knowledge Broker,完成租户/数据集/文档 ACL 与服务端过滤。
- 完成文档版本、删除传播、解析失败隔离、PII 扫描、病毒/类型/配额控制。
- 建立黄金集评测与引用正确率门槛;模型/解析器/embedding 变更回归。
- 完成 HA 部署与容量压测;单节点故障不中断查询。
- 补齐来源血缘、删除可验证、备份保留策略。
闸门:黄金集 recall/引用正确率达标;跨租户越权为 0;删除后 0 召回;解析队列可控;单节点故障不中断查询。
P2:让记忆与运营闭环(建议 8–12 周)
- 记忆服务按租户/用户/项目强隔离;补齐删除、导出、legal hold、同意与撤回。
- 异步事件幂等、重试、死信、成本预算与抽取降级。
- 统一计量账本与日结对账;成本分摊到租户/产品/模型/工具。
- 完成故障演练、RPO/RTO 验证、FinOps 与产品生命周期/下架治理。
闸门:删除请求可验证完成;计量差异<0.1%;灾备演练通过;成本可归集且超预算可熔断。
十一、文档修订映射
| 文档 | 本次修订重点 |
|---|---|
00-生态市场构建总纲.md | 版本/数量校正;补齐 06 与 14–16 目录;把“全闭环”改为目标态;重写演进与验收口径 |
01-HiMarket底座与五类市场.md | 28 Controller、7 类 ProductType;区分业务市场与产品类型 |
02-三角接线…md | 修正 ProductRefResult/toTransportConfig;扣掉“连接配置含凭证”;补内网投递与凭证中介 |
03-企业落地推演…md | 修正 Consumer 语义与公开端点;补 HA、SLO、计量与安全闸门 |
04-本地部署实证…md | 删除明文秘密;纠正 PublicAccess 与下载权限;把危险 workaround 标为不可复用 |
10-知识底座开题…md | 修正 RAGFlow MCP 路径;以 Knowledge Broker 取代“权限嵌套继承”;补评测与治理 |
11-知识库落地实证…md | 明确 RC 版本;把“绕过 SSRF”改为受控内网访问;纠正 K8s 拆分假设 |
12-记忆底座实施方案.md | 补齐身份防伪、强隔离、幂等、删除、投毒、审计与成本控制 |
13-记忆底座落地实证.md | 从“生产方案”校正为 POC;明确 user_id 过滤不等于身份绑定,补生产差距 |
06-架构委员会评审与闭环台账.md | 新增:六视角评审、E0–E4 证据分级、50 项缺口、25 项 P0、ADR、闸门状态板 |
14-包皮总体架构与统一入口网关需求.md | 把“生产方案、不设前置”改为“生产目标态设计”;明确 HiMarket=控制面、Higress=数据面;补 06 闸门约束 |
15-按百炼能力面的模块需求清单(上).md | 统一“目标态施工图”口径;“已实证”按 E1/E2 解释;补功能里程碑≠生产闸门 |
16-按百炼能力面的模块需求清单(下)与实施路线对标总表.md | 同上;修正 Security“已实证”越权表述;补权限/审计与闸门映射 |
十二、最终结论
这套方案的产品方向正确:用 HiMarket 做企业 AI 能力市场的控制面,用 Higress 做统一数据面,用 Nacos 承载引用,用 RAGFlow/mem0 作为可替换能力供给。真正需要纠正的不是“再加多少功能”,而是把以下四件事做成硬约束:
- 身份不可自报:人类、工作负载、Agent 委托三类身份分离,服务端派生上下文。
- 密钥不进客户端:连接描述只描述地址与协议,凭证由中介注入。
- 隔离必须可证明:租户、用户、知识库、记忆都要有负向测试,而不是文档声明。
- 生产门槛可验收:SLO、容量、灾备、计量、供应链安全必须有证据。
在这些门槛完成前,合理定位是“可演示、可继续投入的 POC”,而不是“可承载企业生产流量的 Agent 生态市场”。
十三、架构师委员会评审闭环(2026-10-26)
本节是
06-架构委员会评审与闭环台账.md的摘要。详细 ID、Owner、目标窗口、证据与状态以 06 为准;本节只保留架构基准层的结论。
13.1 评审形式与结论
- 形式:桌面评审(Desk Review),AI Infra 架构师牵头,按总体架构、身份安全、知识记忆、SRE/容量、数据治理、运营发布六个视角交叉审阅。
- 性质:不是企业正式评审会签,不替代安全、法务、合规、财务签字。
- 结论:方向正确,有条件通过内部试点;生产上线 No-Go。
- 根因判断:当前最大风险不是功能不够,而是证据不够 + 文档口径越权——把 E0 设计、E1 源码、E2 单机 POC 写成了生产结论。
13.2 六视角裁定
| 视角 | 裁定 | 主要阻断 |
|---|---|---|
| 总体架构 | 有条件通过 | 边界口径、里程碑×闸门矩阵、多租户模型、fork 维护 |
| 身份与安全 | 生产不通过 | OIDC 验签、工作负载身份、Agent 委托、凭证中介、授权传播、管理面 MFA/JIT、Denial of Wallet、MCP 安全 |
| 知识与记忆 | 生产不通过 | Knowledge Broker ACL、RAGFlow RC、跨租户负向测试、记忆身份绑定、删除/legal hold、投毒 |
| SRE/容量/灾备 | 生产不通过 | SLO 实绩、HA 拓扑、容量压测、RPO/RTO 演练 |
| 数据治理与合规 | 生产不通过 | 分类分级、血缘、保留、DSAR、审计防篡改、跨境、PIPL/等保映射 |
| 运营与发布 | 生产不通过 | 配置发布/回滚/漂移、计量对账、产品生命周期、FinOps、滥用治理 |
13.3 闭环定义与当前状态
闭环 = Owner + 目标窗口 + 可复现证据 + 验收人 + 回归条件,不是文档写完。状态只允许 Open / In Progress / Blocked / Verified / Accepted Risk;Verified 必须有 E3/E4 证据包,文档修改不能改变状态。
| 闸门 | 当前 | 已 Verified | 说明 |
|---|---|---|---|
| P0 生产阻断 | Blocked | 0 / 25 | 安全、隔离、数据面、配置、计量未闭合 |
| P1 能力可用 | Blocked | 0 / 23 | 依赖 P0 |
| P2 运营闭环 | Blocked | 0 / 2 | 依赖 P1 |
| 内部试点 | Conditional | — | 仅隔离环境、非真实员工数据、有 kill switch |
13.4 Top 12 P0(最小关闭集)
Top 12 是最小关闭集,不是全部 P0;完整 25 项见
06§三。
- SEC-01 OIDC 全量校验与负向用例。
- SEC-03 工作负载身份,禁用静态 key。
- SEC-04 Agent 委托 Token Exchange。
- SEC-05 凭证中介与全链路密钥扫描。
- SEC-06 授权快照/epoch/撤销传播/fail-closed。
- SEC-09 MCP 工具契约、会话绑定、出站治理。
- KNO-01 Knowledge Broker ACL。
- KNO-02 RAGFlow 稳定版+digest。
- KNO-03 知识跨租户负向测试。
- MEM-01/02 记忆身份绑定、删除与 legal hold。
- SRE-02/03 HA 拓扑与容量压测。
- OPS-01/02 计量对账与配置回滚。
13.5 下一次评审入口
- SEC-01/03/04/05/06/09 证据包齐备且至少 E3,安全评审人签字。
- KNO-01/02/03 与 MEM-01/02 的跨租户/跨用户负向测试报告齐备,越权为 0。
- 真实数据面链路
Consumer → Higress → AuthZ → Credential Broker → MCP/模型 → 计量事件可复现。 - 配置发布失败可自动回滚;期望/实际漂移为 0。
- 容量模型用实测数据填完;HA 单节点故障演练通过。
- 计量三方对账连续 7 日差异<0.1%,或差异全部可解释并有调整分录。
- 06 中 P0 全部 Verified 或有签字的 Accepted Risk;文档 P0 口径冲突扫描为 0。
13.6 不宣称项(与 06 一致)
- 不宣称生产可用、数据面闭环、订阅即授权、多租户隔离已证明。
- 不宣称
user_id过滤等于身份绑定;不宣称 RAGFlow/mem0 可生产。 - 不宣称已做 HA/DR/压测/渗透/红队/计量结算/合规批准。
- 不宣称 08 专栏的环境证据适用于本环境;不宣称企业正式委员会已会签。
一句话收口:这套方案可以继续投入,但必须从“功能串联”切换到“证据驱动”;在 25 项 P0 以 E3/E4 证据关闭前,生产上线应保持 No-Go。