文档首页/后端模块总览

后端模块总览

English · 全功能实现说明

如何由其他模块接入

这里的“对外”指仓库内其他 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、启动刷新并播种管理员;不是无副作用构造函数。示例应使用专用数据库,不把探针成功当供应商可调用证明。

说明

本目录实现 XHub 的身份、管理控制面、模型数据面、路由、计价、持久化。跨模块回归及共用测试夹具集中在 cmd/regression。cmd 负责组合和启动,internal 的包负责可测试的业务行为;Go 的 internal 导入规则限制外部项目直接依赖这些实现。对外稳定边界是 HTTP 协议和配置文档,不是所有导出的 Go 符号。 一次推理先识别会话或虚拟密钥,从数据库恢复组织、团队、项目和所有者,再检查动作、模型范围、预算与限流。控制面解析本次路由模板,数据面选择可用部署、构造协议并发送;成功响应提取 usage、保存价格快照和调用归属,最后提交成功缓存及粘性状态。 身份数据和账务在 iam,框架配置及模型部署在 store,Redis 热状态在 live,响应缓存、运行日志与分页工具在 util。五个费用作用域是同一次消费的视图,不能相加成为总消费。流输出后禁止拼接第二个供应商响应;数据库提交前不能确认队列。

当前目录是后端实现的组织根,没有直接生产 Go 文件或独立 Go 包。子目录按业务职责划分,各级 README 介绍所在目录本身;子包导出的符号供仓库内模块组合使用,不是面向外部项目的 SDK。

对外接口

进程与 HTTP 边界

生产入口是 cmd/gateway/main.go:读取 -config(默认 configs/config.yaml)和 -addr(默认 :4000),调用 config.Load、iam.Open/Migrate、store.Open、gateway.New,最后 Server.Run 监听请求。配置、数据库连接或迁移失败结束启动;监听失败结束进程。根目录不直接挂载 HTTP 路由,实际接口由 gateway 显式模块、目录接线及 provider 传输登记组成。

Server.Handler 返回宿主和测试使用的 http.Handler;Handle 安装路由,Use 安装模块。管理调用要求会话与动作授权,推理接受可推理会话或虚拟密钥,主密钥只有有限引导和应急权限。字段、认证、状态码见 API 文档及模块 README。路径列在目录中不等于对应业务已经实现。

包间协作契约

util.Module/Registrar 定义模块安装;auth.Principal 与 authz.Actor/Object/Scope 连接身份、动作授权和查询范围。dataplane/contract.Adapted、Bypass、Runtime 等宿主接口把身份、存储、路由、日志依赖注入数据面;gateway 子模块通过 Host/Gate 调用父模块,避免循环导入。config.ModelEntry、provider.Transport 和 router 策略连接部署配置与实际执行。每个类型的输入、返回值、错误及副作用由拥有它的子包详细说明。

内部核心实现

启动装配

IAM 连接 PostgreSQL 并迁移身份和账务表,Store 管理框架配置与模型资源。gateway.New 创建授权器、上游 HTTP 客户端、响应缓存、在途计数和扩展注册表;尝试连接配置的 Redis,合并持久设置,加载部署和价格覆盖,启动定时价格刷新并播种初始管理员。显式模块先挂载,目录路由后补齐,重复路径不覆盖先登记处理器。provider/all 的导入触发供应商初始化登记,配置必须声明匹配能力和传输。

请求链与失败边界

HTTP 入口识别凭据及会话并确认当前状态,按动作及可信对象归属授权,再检查模型、预算和限流。请求选择密钥→团队→组织链中最近的完整模板或内置模型分配。数据面处理正文、护栏、插件、能力过滤、禁用/冷却候选、排序、缓存和发送;需要时转换对话协议,原厂传输按固定登记动作保留原厂字段。重试、回退和超时不能破坏已输出的流;流开始后不能拼接另一个供应商响应。

异步任务保留创建部署和调用上下文,轮询返回同一部署,成功终态的有效实测用量才结算。未知创建结果不能盲目重放。日志、请求日志和持久审计用途不同,脱敏不能代替读取授权。

状态与持久化

IAM 事务保存事件、归属及费率快照,并按请求/任务标识防止重复结算。用户、密钥、团队、项目、组织费用是同一消费的不同视图,不能相加。Store 的 KV 不负责身份授权。Redis 保存热支出、限流、冷却、粘性和队列,消费者先提交数据库再确认;缺失 Redis 的进程状态与同步路径不具备跨实例共享保证。进程响应缓存只保存完整成功字节,键必须包含身份和配置上下文。

源码职责与入口

子目录索引

目录 职责
auth 调用身份解析
authz 动作授权与查询范围
catalog 模型目录、费率与用量归一化
config 启动配置与模型定义
dataplane 推理执行与结算数据面
gateway HTTP 网关与模块组合
httpx HTTP 错误与模块协议
iam 身份、授权资源与事务账务
live Redis 热状态与可靠用量队列
llm 上游请求构造与协议适配
provider 供应商能力与传输登记
router 部署过滤、排序与加权分流
store 框架配置与模型存储
util 响应缓存、运行日志与脱敏、防溢出分页工具

阅读与验证

启动与 HTTP 从 cmd/gateway/main.go → gateway/server.go、routes.go、engine.go 阅读;推理从 gateway/ingress.go、bypass.go → dataplane 阅读;结算从 iam/schema.sql、usage.go、task_usage.go 阅读。各子目录 README 给出完整本目录文件职责与具体入口。

快速检查命令:go test ./internal/... -count=1。真实后台边界见 cmd/regression,真实浏览器流程使用 cd frontend && npm run test:e2e。数据库验收需检查 XHUB_REGRESSION_STRICT=1 及跳过项;Redis 与真实供应商需要各自环境。单元测试不证明外部供应商连接、付费任务完成或实际账单正确。说明中不存储部署凭据。

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