四组件极简架构
没有 Nginx,没有多余的中间层。Higress 是唯一对外服务,前端独立部署到 CDN。
⚡ Higress
唯一对外入口
:80 / :443 公网暴露
• TLS 终止 + 证书管理
• 域名路由 (所有域名)
• ai-proxy (30+ LLM)
• Wasm 插件链
• 限流 / 重试 / 故障转移
🛠 New API
纯后端 API (无前端)
:3000 内网
• 管控 API (/api/*)
• 异步任务 (视频/音频)
• 计费结算
• 租户/用户/Token 管理
• 支付回调 / OAuth
🔴 Redis
数据总线 + 缓存
:6379 内网
• 租户域名映射
• Token 缓存
• 限流计数器
• 用量上报 Stream
• 品牌配置缓存
🐬 MySQL
持久化存储
:3306 内网
• 业务库 (租户/用户/Token)
• 日志库 (按月分区)
• 任务表 (活跃/历史分离)
• 定价/订阅/支付
📁 CDN / OSS — 前端独立部署
前后端完全分离。两份 SPA 打包成静态文件,部署到 CDN 或 OSS,Higress 回源拉取。
/site/启动时 fetch
/api/tenant/branding 渲染品牌框架: React / Next.js / Astro 均可
/dashboard/启动时 fetch
/api/tenant/branding 渲染品牌复用 New API 前端代码 (去掉后端托管)
三域分离
每个域名职责独立,代理商 CNAME 到同一个入口,Higress 按 Host 头识别
- /v1/chat/completions
- /v1/embeddings
- /v1/images/generations
- /v1/videos (异步任务)
- /v1/audio/*
- /v1/models
前端: 无
认证: Bearer Token
- / — 品牌首页
- /pricing — 定价
- /docs — API 文档
- /blog — 公告
- /api/tenant/branding (唯一API)
前端: 主站 SPA (/site/)
认证: 无需
- /login — 登录注册
- /overview — 用量统计
- /tokens — Key 管理
- /billing — 充值账单
- /api/* — 管控 API
- /v1/* — Playground (JWT鉴权)
前端: Dashboard SPA (/dashboard/)
认证: JWT / Session
🌐 代理商域名统一入口
整体架构
Higress 唯一入口 → Wasm 识别租户 → 按路径分发到 ai-proxy / New API / CDN
SAN 证书覆盖 3 域名
校验域名类型与路径匹配
dash /v1/*: JWT → 校验
双模鉴权
成本/质量/余额/故障转移
XADD Redis Stream
渠道指标采集
/dashboard/ 用户面板 SPA
纯静态 HTML/JS/CSS
运行时 fetch API 渲染品牌
零编译,所有代理商共享
限流 | 用量Stream | 品牌缓存
tasks_active | tasks_history
Higress 路由表
路由规则是静态的,永远不变。新增代理商只往 Redis 写数据,不改路由配置。
🎯 静态路由表 (Higress 控制台配置一次,永不改)
| 优先级 | 路径匹配 | 目标上游 | Wasm 插件 | 域名类型校验 |
|---|---|---|---|---|
| 1 | /v1/chat/* |
ai-proxy | tenant-router → auth → smart-router → billing | type=api or dashboard |
| 2 | /v1/embeddings/* |
ai-proxy | tenant-router → auth → smart-router → billing | type=api or dashboard |
| 3 | /v1/images/* |
ai-proxy | tenant-router → auth → smart-router → billing | type=api or dashboard |
| 4 | /v1/videos/* |
New API | tenant-router → auth | type=api only |
| 5 | /v1/audio/* |
New API | tenant-router → auth | type=api only |
| 6 | /v1/models |
New API | tenant-router → auth | type=api only |
| 7 | /api/* |
New API | tenant-router | type=dashboard or site (branding only) |
| 8 | /* |
CDN 回源 | tenant-router | type=site → /site/ | type=dashboard → /dashboard/ |
🛡 域名类型 × 路径 访问控制矩阵
| 域名类型 | /v1/* (AI接口) | /api/* (管控API) | /* (页面) |
|---|---|---|---|
| type=api | ✓ 放行 | ✗ 404 | ✗ 404 |
| type=dashboard | ✓ JWT鉴权 | ✓ 放行 | ✓ Dashboard SPA |
| type=site | ✗ 404 | ✓ 仅 branding | ✓ 主站 SPA |
| 未知域名 | 403 | 403 | 403 |
四个自定义 Wasm 插件
整个多租户 + 智能调度能力靠 4 个 Wasm 插件实现,总共约 650 行 Go 代码
🎯 tenant-router
~200 行 核心插件
职责:
1. 从 Host 头提取域名
2. Redis GET 查租户 + 域名类型
3. 校验 type 与当前路径是否匹配
4. 注入 X-Tenant-Id, X-Domain-Type 请求头
5. /* 路由: 改写路径到 /site/ 或 /dashboard/
触发: 所有路由
依赖: Redis
🔑 auth-validator
~150 行 双模鉴权 (Token + JWT)
职责:
1. api 域名: 提取 Bearer Token
Redis GET 验证 + 校验 tenant 归属
2. dashboard 域名 /v1/*: 提取 JWT
验签 + 校验 tenant 归属 (Playground)
3. dashboard 域名 /api/*: 提取 JWT Cookie
4. site 域名: 跳过鉴权
5. 注入 X-User-Id, X-User-Group
触发: /v1/* 和 /api/* 路由
依赖: Redis
🔬 smart-router
~200 行 智能渠道调度
职责:
1. 读取 model + X-User-Group
2. Redis 查可用渠道列表 + 统计
3. 按用户级别选择调度策略
4. 注入 X-Channel-Id, X-Channel-Provider, X-Channel-Cost-Ratio
5. 故障自动摘除 + 探测恢复
触发: /v1/chat /v1/embed /v1/images
依赖: Redis
📊 billing-reporter
~100 行
职责:
1. 响应完成后提取 usage
2. Redis XADD billing_stream
{tenant_id, user_id, model,
channel_id, input_tokens, output_tokens}
3. 渠道指标采集 (成功率/延迟)
4. New API 异步消费结算
触发: /v1/chat /v1/embed /v1/images
依赖: Redis Stream
五步插件链
每个请求经过 5 个插件,通过请求头传递上下文,零耦合
X-Domain-Type
X-User-Group
(Token或JWT双模)
X-Channel-Provider
X-Channel-Cost-Ratio
→ 转发到对应上游
→ 用量上报
+ 渠道指标采集
智能渠道调度
基于成本、质量、用户级别的实时调度,所有 AI 流量收归 Higress 的核心收益
💰 成本优先
选最便宜的渠道
适合 free 用户
cost_ratio 最低
⭐ 质量优先
选成功率+延迟最优的渠道
适合 VIP 用户
success_rate × latency_score
⚖ 均衡调度
score = quality×0.6 + cost×0.4
适合 standard 用户
综合评分
💳 余额感知
渠道余额低时降权
耗尽自动摘除
balance < threshold → weight × 0.3
🛡 故障转移
Envoy outlier detection
连续失败自动摘除
探测恢复
consecutive_5xx ≥ 3 → eject
🔴 Redis 渠道统计结构
渠道定价与倍率
渠道级别的差异化定价,支持 LLM 按 Token 和视频按参数组合的梯度计费
💰 LLM 三级定价计算
🎥 视频梯度定价
🔄 渠道配置同步
跨域串联场景
三个域名、五个插件、四个组件之间如何协同工作
🎮 Playground (无需创建Key)
dashboard.agent-a.com/v1/chat/completions
JWT鉴权 → smart-router → ai-proxy → 上游
和 API 域名走完全相同的 ai-proxy,零冗余
🔗 主站 → Dashboard 跳转
agent-a.com 点「注册」→ JS跳转 dashboard.agent-a.com/login
品牌 API 返回 dashboard_url 字段
🔑 OAuth 登录回调
dashboard.agent-a.com/api/oauth/wechat/callback
用当前 dashboard 域名作回调地址
租户自己的 AppID
💳 支付充值回调
dashboard.agent-a.com/api/payment/callback/alipay
订单号编码 tenant_id
加载对应支付密钥验签
🔐 创建Key后API调用
Dashboard 创建 Token → 写 DB + 写 Redis → Higress 即时可用
用户 curl api.agent-a.com → auth-validator 从 Redis 验证
📄 API文档展示正确端点
主站 docs 页从 branding API 拿 api_url
动态渲染: curl https://api.agent-a.com/v1/...
多租户数据模型
所有业务表加 tenant_id,单套系统服务所有代理商
域名绑定自动化
代理商加 3 条 CNAME,平台自动验证 + 签 1 张 SAN 证书覆盖 3 个域名
三级计费
成本 → 批发 → 零售,LLM 同步计费走 Higress,视频异步计费走 New API。渠道定价详见 Section 08。
⚡ LLM 同步 (Higress 计量)
Higress billing-reporter → Redis XADD
New API 消费 Stream → 双层扣费:
• 用户余额 -= retail_price
• 代理商余额 -= wholesale_price
• 你的利润 = wholesale - cost
🎥 视频异步 (New API 计量)
New API 全流程管理:
• 预扣: 分辨率 × 时长 × 倍率
• 调整: 上游返回实际参数
• 结算: 完成按实际 / 失败退款
• 梯度: 720p×1 | 1080p×1.5 | 4K×3
白标配置
前端零编译,运行时注入品牌。两份 SPA 共享同一份代码,fetch API 获取配置。
🛠 代理商可配项
数据库分层
热冷分离 + 按月分区 + 活跃任务独立表
🔥 热数据
MySQL 业务库
tenants / users / tokens
channels / subscriptions
tenant_pricing / channel_model_pricing
tasks_active (<1000行)
Redis
域名映射 / Token / Stream / 渠道统计
📋 温数据
MySQL 日志库 (LOG_SQL_DSN)
logs — 按月 RANGE 分区
tasks_history — 按月分区
quota_data — 聚合统计
清理 = DROP PARTITION (毫秒级)
❄ 冷数据
OSS 对象存储
压缩 JSON / Parquet
审计/合规时查询
cron 每月归档上上月分区
~$0.02/GB/月
部署方案与容灾
四组件 Docker Compose 起步,按阶段扩展
STAGE 1 验证/内测 — 单机
STAGE 2 生产 — 双机分离
STAGE 3 高可用 — 5 台服务器集群
📦 阶段 3 采购清单 — 5 台服务器 + SLB + OSS
| 编号 | 角色 | 配置 | 网络 | 部署内容 | 月成本 |
|---|---|---|---|---|---|
| SLB | 负载均衡 | 阿里云CLB/腾讯云CLB | 公网 20M | 监听80/443 → A1/A2 健康检查 | ¥50-150 |
| A1 | 网关节点1 | 4C8G / SSD 40G | 公网 IP | Higress :80/:443 + Redis哨兵1 | ¥150-250 |
| A2 | 网关节点2 | 4C8G / SSD 40G | 公网 IP | Higress :80/:443 + Redis哨兵2 | ¥150-250 |
| B | 应用+Redis主 | 8C16G / SSD 50G | 内网 | New API(蓝绿) + Redis主 + Redis哨兵3 | ¥200-400 |
| C | Redis从1 | 2C4G / SSD 20G | 内网 | Redis从节点 | ¥50-100 |
| D | Redis从2+PG从 | 4C8G / SSD 200G | 内网 | Redis从节点 + PostgreSQL从库 | ¥150-250 |
| E | 数据库主 | 8C16G / SSD 500G | 内网 | PostgreSQL主库(业务库+日志库) | ¥300-500 |
| OSS | 静态资源 | 阿里云OSS+CDN | - | 前端SPA(主站+Dashboard)+素材 | ¥20-50 |
| 合计 | ¥1100-2000 | ||||
🖥 部署拓扑
📋 配置选型依据
| 组件 | 吃什么资源 | 配置依据 |
|---|---|---|
| Higress | CPU(TLS) + 带宽(SSE转发) | 日500万请求≈60QPS峰值,4C够 |
| New API | CPU(任务轮询) + 内存(Go常驻) | 异步任务+计费消费,8C16G富余 |
| Redis | 内存 | 全部数据<500MB,4G足够 |
| PostgreSQL | 磁盘IO + 内存(缓冲池) | 日志表大,SSD 500G,shared_buffers 4G |
🛡 容灾
| 故障 | api.* 影响 | domain.com | dashboard.* | 恢复 |
|---|---|---|---|---|
| Higress 挂 | 中断 | 中断 | 中断 | 重启30s (无状态) |
| New API 挂 | LLM正常 | 正常 | API不可用 | LLM由Higress独立处理 |
| Redis 挂 | 鉴权降级 | 正常 | 缓存失效 | 哨兵30s切主 |
| MySQL 挂 | LLM正常 | 正常 | 写入暂停 | 主从切换 |
| CDN 挂 | 正常 | 页面不可用 | SPA加载失败 | CDN SLA保障 |
实施路线
按风险验证优先,渐进式落地
- Docker 起 Higress + New API + Redis + MySQL
- 配 ai-proxy 代理 OpenAI,验证 SSE 流式
- 验证 Wasm 插件 Redis 访问
- 通过 → Phase 1 | 不通过 → 重新评估
- 单机 Docker Compose 部署
- Higress 全量透传 New API (纯反代验证稳定性)
- 逐步切换供应商到 ai-proxy 直连
- 前端 SPA 部署到 CDN/OSS
- DB 加 tenant_id + tenants 表
- tenant-router Wasm 插件 (核心)
- auth-validator + smart-router + billing-reporter 插件
- 域名绑定 API (CNAME 验证 + SAN 证书)
- 前端品牌注入 (fetch /api/tenant/branding)
- 第一个测试代理商全流程跑通
- 代理商配置中心 (品牌/登录/支付)
- 三级定价 + 渠道级定价 + Redis Stream 异步结算
- 支付模式 A (平台代收)
- logs 按月分区 + tasks 拆表
- 双机分离 (Gateway + Data)
- Higress 多副本 + SLB
- Redis Sentinel + MySQL 主从
- 监控告警 (Prometheus + Grafana)