文档首页/Gateway 架构

Gateway 架构

English

根包是 HTTP 组合根以及身份、配额、存储的适配器。业务模块按职责拆分。

目录 职责
affinity 租户隔离的会话、响应续接和任务归属
billing 部署费率与一次调用费用计算
compliance 请求日志合规检查接口
family 目录资源接口与租户隔离
guard 护栏配置、规则与外部执行器
health 存活、就绪与控制台启动配置
identity 用户、团队成员与管理权限
keys 平台与个人 API 密钥生命周期
models 部署、凭据、端点能力与路由配置管理
prefs 偏好与路由设置的读取、合并和保存
publichub 公开模型目录、筛选排序与链接
requestlog 内容编码、流式日志重建与秘密脱敏
templateauth 路由模板选择权限
tokens 本地 token 估算、参数发现与转换记录
usage 报表、活动、护栏统计与日志读取

如何由其他模块接入

这里的“对外”指仓库内其他 Go 包。Go 的 internal 规则限制了仓库外的直接导入;HTTP 客户端使用已挂载的网关接口。

启动入口依次 config.Load → iam.Open/Migrate → store.Open → gateway.New → Server.Run。宿主用 Handler 嵌入 HTTP 服务,模块用 Use/Handle 安装;管理和推理请求分别遵守身份、动作授权和模型权限。

入口或资源 调用方式与返回结果
gateway.New(cfg,store,iam) 组装已初始化的真实依赖
Server.Handler() / Server.Run(addr) 提供 HTTP handler 或启动监听
Server.Use(module) / Handle(pattern,handler) 安装模块和专用处理器

接入 demo

在 /tmp/xhub-demo.yaml 配置专用 PostgreSQL database_url;只使用演示数据库。完整配置格式见 config。启动会迁移/同步表,关闭演示进程后由数据库所有者清理专用库。

在仓库根目录执行以下命令。

go run ./cmd/gateway -config /tmp/xhub-demo.yaml -addr :4000

curl -sS -i http://localhost:4000/health/liveness
curl -sS -i http://localhost:4000/health/readiness

在另一终端运行 curl。存活通常返回 200 status=ok;数据库 Ping 成功时就绪返回 200 status=ready,失败返回 503。

错误、状态与副作用

gateway.New 可能连接 Redis、启动刷新并播种管理员;不是无副作用构造函数。示例应使用专用数据库,不把探针成功当供应商可调用证明。

根包 review 路线

文件 审核问题
server.go、routes.go、catalog.go 组合哪些依赖与路由?专门模块能否优先处理对应接口?
ingress.go、access.go、session.go、limits.go 身份、模型权限、预算、速率与失败响应是否正确?
engine.go、wire.go、bypass.go 怎样向 dataplane 注入能力、HTTP 和运行时状态?
route_settings.go、template_routing.go、route_preview.go 模板、预览与真实执行是否一致?
spend.go 备注消费、失败零扣费、任务幂等结算与落库是否正确?
onboarding.go、theme_settings.go、removed.go 初始化、主题配置与已移除路由的明确拒绝。

先读 Host / Store / DeploymentFinder / Pinger,再读 Module 与处理器,最后看调用方。affinity.State 独立持有状态,billing 和 requestlog 独立计算,不依赖 Server。wire 实现 dataplane/contract 和 dataplane/runtime.Runtime。

管理入口进入专门模块;推理入口经过身份和配额进入 dataplane/execution,随后账单与日志落库。完整关系见 dataplane。根目录测试负责 HTTP 组合与持久化;纯函数测试留在实现旁边。

测试分层

单元测试与源码同目录;真实 HTTP/持久化契约位于 cmd/regression,浏览器到网关及本地上游流程位于 frontend/e2e。不新增只有测试的 integration 包。

仓库根目录命令:

go test ./internal/dataplane/... ./internal/gateway/... ./internal/llm/... ./internal/provider/... -count=1
bash scripts/regression.sh 'TestComplianceModuleContract|TestUpstreamDiagnosticsContract|TestResponsesFailedStreamCannotContinue' -v
bash scripts/e2e.sh e2e/playground-transport.spec.ts e2e/responses-continuation.spec.ts e2e/model-fallback.spec.ts

测试用真实本地 HTTP、PostgreSQL 与隔离夹具,结束清理私有 schema,不覆盖用户数据。线上付费供应商和外部护栏需单独声明凭据;离线测试验证配置、支持状态、拒绝和失败路径。

输入关键词搜索全文,例如:预算、路由、Docker