Files
lijiaoqiao/docs/open_source_gateway_codebase_deep_dive_v1_2026-03-17.md

145 lines
4.6 KiB
Markdown
Raw Normal View History

# 开源网关代码深度理解v1
- 版本v1.0
- 日期2026-03-17
- 范围:`sub2api-tar``new-api``one-api``litellm`
- 目标为“Subapi First + 自研 Router Core 接管”提供源码级认知基线。
## 1. 目录与迁移确认
当前开源仓库已位于统一项目根:
- `/home/long/project/立交桥/llm-gateway-competitors`
核心仓库路径:
1. `/home/long/project/立交桥/llm-gateway-competitors/sub2api-tar`
2. `/home/long/project/立交桥/llm-gateway-competitors/new-api`
3. `/home/long/project/立交桥/llm-gateway-competitors/one-api`
4. `/home/long/project/立交桥/llm-gateway-competitors/litellm`
## 2. 法务与商用风险快照
1. `sub2api-tar`MIT可商用仍需遵守上游 ToS
2. `new-api`AGPLv3对闭源商用有强约束
3. `one-api`MIT
4. `litellm`:仓库主体 MIT`enterprise/` 子目录有独立授权边界
结论:你的主线“商用闭源控制面”不应以 `new-api` 作为核心代码基座。
## 3. 架构入口(代码级)
## 3.1 sub2api-tar推荐重点
主入口与启动装配:
1. `/backend/cmd/server/main.go`setup 模式 + 主服务启动)
2. `/backend/internal/server/routes/gateway.go`(协议路由汇总)
核心特点:
1. 明确的多协议入口:`/v1``/v1beta``responses/chat` 别名
2. 账号调度和 failover 逻辑深(适合借鉴路由中台能力)
3. 并发槽位、等待队列、流式错误处理比较完整
建议你优先深读:
1. `/backend/internal/handler/openai_gateway_handler.go`
2. `/backend/internal/handler/gateway_handler.go`
3. `/backend/internal/handler/gemini_v1beta_handler.go`
4. `/backend/internal/service/openai_gateway_service.go`
5. `/backend/internal/service/gateway_service.go`
## 3.2 new-api功能广但法务受限
主入口:
1. `/main.go`
2. `/router/relay-router.go`
3. `/controller/relay.go`
核心特点:
1. 协议覆盖广OpenAI/Claude/Gemini/Responses/Realtime
2. `middleware.Distribute()` + `controller.Relay()` 主干清晰
3. 计费预扣/结算逻辑完善,但 AGPL 影响商用策略
可借鉴点:
1. RelayFormat 分发模型
2. 路由组织和中间件链条设计
## 3.3 one-api经典轻量基线
主入口:
1. `/main.go`
2. `/router/relay.go`
3. `/middleware/distributor.go`
核心特点:
1. 架构简单,易读
2. 渠道选择以“可用通道 + 随机”为主,策略深度有限
3. 适合作为最小网关实现参考,不适合直接承载企业治理能力
## 3.4 litellm生态和工程成熟度最高
架构说明文件:
1. `/ARCHITECTURE.md`
关键目录:
1. `/litellm`SDK 核心)
2. `/proxy`AI Gateway
3. `/router.py` + `/router_strategy`(路由策略)
4. `/tests`(测试资产非常完整)
核心特点:
1. SDK 与 Gateway 分层清晰
2. Proxy 在 SDK 上叠加 auth/rate-limit/budget/routing
3. 作为“多供应商适配能力参考”价值高
## 4. 代码体量画像(按文件后缀)
1. `sub2api-tar`Go 1004Vue 165TS 139
2. `new-api`Go 511JSX 321
3. `one-api`Go 235JS 242
4. `litellm`Python 3500TSX 844Markdown 869
解读:
1. `sub2api` 在 Go 侧中台能力深,适合做 S1/S2 接入基座。
2. `litellm` 在多 Provider 抽象和测试体系更强,适合策略与适配层借鉴。
## 5. 与你当前路线图的对齐建议
1. S1-S2 直接对齐 `subapi connector`:以 `sub2api-tar` 路由和 handler/service 为准做契约测试。
2. S2 国内供应商 100% 接管:优先把国内 Provider 的路由与计费从 `subapi` 迁出到自研 Router Core。
3. S3 机器人能力:优先消费你自研控制面的统一事件,不直接耦合 `subapi` 内部事件格式。
## 6. 下一轮深挖计划v2
建议按以下顺序继续深挖并输出第二版文档:
1. `sub2api` 调度链路时序图(选账号 -> 并发槽 -> failover -> usage 入账)
2. `sub2api` 计费链路字段表(请求级 idempotency 与 ledger 对齐)
3. `litellm` Router 策略可移植点cost/latency/success 权重)
4. `new-api/one-api` 的可借鉴中间件清单(仅借鉴,不引入 AGPL 污染)
## 7. v2 文档已完成
已完成并落盘的 v2 深挖文档:
- `/home/long/project/立交桥/docs/sub2api_scheduler_billing_flow_deep_dive_v2_2026-03-17.md`
覆盖内容:
1. `SelectAccountWithScheduler` 三层调度策略与评分机制
2. 用户/账号并发槽位获取、等待队列与释放保障
3. Failover 触发条件、同账号重试、流式 no-replay 边界
4. `submitUsageRecordTask -> UsageRecordWorkerPool -> RecordUsage -> applyUsageBilling` 全链路
5. request_id + fingerprint 幂等扣费机制与冲突语义