AnyFast Cloud v4

前后端分离 × Higress 唯一入口 × 四组件极简架构 × 多租户白标 × 智能调度

Higress New API Redis MySQL CDN/OSS Smart Routing
01 / Tech Stack

四组件极简架构

没有 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 回源拉取。

🌎 主站 SPA — /site/
营销落地页 / 定价页 / 文档 / 博客
启动时 fetch /api/tenant/branding 渲染品牌
框架: React / Next.js / Astro 均可
📊 Dashboard SPA — /dashboard/
用户面板 / Key管理 / 充值 / 用量统计
启动时 fetch /api/tenant/branding 渲染品牌
复用 New API 前端代码 (去掉后端托管)
为什么没有 Nginx? Higress 基于 Envoy,本身就是高性能反代 + 静态资源网关。加 Nginx 纯属多一跳,增加延迟和运维复杂度。前端静态文件放 CDN/OSS,Higress 直接回源,零中间层。
02 / Domain Strategy

三域分离

每个域名职责独立,代理商 CNAME 到同一个入口,Higress 按 Host 头识别

API 服务
纯接口,无 UI
api.domain.com
  • /v1/chat/completions
  • /v1/embeddings
  • /v1/images/generations
  • /v1/videos (异步任务)
  • /v1/audio/*
  • /v1/models
后端: Higress ai-proxy (同步) + New API (异步)
前端:
认证: Bearer Token
🌎
营销主站
品牌落地页
domain.com
  • / — 品牌首页
  • /pricing — 定价
  • /docs — API 文档
  • /blog — 公告
  • /api/tenant/branding (唯一API)
后端: CDN 回源 (静态)
前端: 主站 SPA (/site/)
认证: 无需
📊
用户面板
管理后台
dashboard.domain.com
  • /login — 登录注册
  • /overview — 用量统计
  • /tokens — Key 管理
  • /billing — 充值账单
  • /api/* — 管控 API
  • /v1/* — Playground (JWT鉴权)
后端: New API (/api/*) + Higress ai-proxy (/v1/*) + CDN (SPA)
前端: Dashboard SPA (/dashboard/)
认证: JWT / Session

🌐 代理商域名统一入口

所有代理商域名 CNAME 到同一个地址
# 你的入口 (A 记录指向服务器 IP) gateway.your-platform.com A 1.2.3.4 # 平台自营 api.your-platform.com CNAME gateway.your-platform.com your-platform.com CNAME gateway.your-platform.com dashboard.your-platform.com CNAME gateway.your-platform.com # 代理商 A — 加 3 条 CNAME 就完事 api.agent-a.com CNAME gateway.your-platform.com agent-a.com CNAME gateway.your-platform.com dashboard.agent-a.com CNAME gateway.your-platform.com # 代理商 B — 同样 3 条 api.agent-b.com CNAME gateway.your-platform.com agent-b.com CNAME gateway.your-platform.com dashboard.agent-b.com CNAME gateway.your-platform.com # 所有域名 → 同一个 IP → Higress :443 → Wasm 插件识别是谁的
03 / Architecture

整体架构

Higress 唯一入口 → Wasm 识别租户 → 按路径分发到 ai-proxy / New API / CDN

ALL DOMAINS → gateway.your-platform.com
api.agent-a.com
代理商A API
api
agent-a.com
代理商A 主站
site
dashboard.agent-a.com
代理商A 面板
dash
api.agent-b.com
代理商B API
api
...
无限扩展
N
所有流量进入 Higress :443
HIGRESS — WASM PLUGIN CHAIN
🔒 TLS
SNI 匹配证书
SAN 证书覆盖 3 域名
🎯 tenant-router
Host → Redis → tenant_id + type
校验域名类型与路径匹配
WASM
🔑 auth-validator
api: Token → Redis
dash /v1/*: JWT → 校验
双模鉴权
WASM
🔬 smart-router
智能渠道调度
成本/质量/余额/故障转移
WASM
📊 billing-reporter
响应完成后
XADD Redis Stream
渠道指标采集
WASM
/v1/chat /v1/embed /v1/images /v1/videos /v1/audio /api/* /* (静态资源)
AI-PROXY (HIGRESS BUILT-IN)
OpenAI
Claude
Gemini
DeepSeek
Qwen / Kling / Vidu / 40+
NEW API (PURE BACKEND)
👤 用户管理
💳 计费结算
🎥 异步任务
🏢 租户管理
🔑 Token / OAuth / 支付 / 品牌API
CDN / OSS (STATIC FRONTEND)
📁 两份 SPA
/site/ 主站落地页 SPA
/dashboard/ 用户面板 SPA

纯静态 HTML/JS/CSS
运行时 fetch API 渲染品牌
零编译,所有代理商共享
DATA LAYER
🔴 Redis
租户域名映射 | Token缓存
限流 | 用量Stream | 品牌缓存
🐬 MySQL
业务库 | 日志库(分区)
tasks_active | tasks_history
04 / Routing

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
未知域名403403403
核心: 路由是静态的,租户识别是动态的 新增代理商不需要改 Higress 路由配置。只需要往 Redis 写 3 条域名映射记录 + 签发证书。Wasm 插件实时从 Redis 读取,即时生效。Dashboard 域名的 /v1/* 走 JWT 鉴权用于 Playground,和 API 域名共享相同的 ai-proxy 和 smart-router 链路。
05 / Wasm Plugins

四个自定义 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

tenant-router Wasm Plugin (Core Logic)
func onHttpRequestHeaders(ctx wrapper.HttpContext, config Config) types.Action { host, _ := proxywasm.GetHttpRequestHeader(":authority") path, _ := proxywasm.GetHttpRequestHeader(":path") // 查 Redis: 域名 → {tenant_id, type, status} config.redis.Get("tenant:domain:"+host, func(resp RedisResponse) { if resp.Status() != 0 { proxywasm.SendHttpResponse(403, nil, []byte("Unknown domain")) return } tenant := parse(resp) if tenant.Status == 0 { proxywasm.SendHttpResponse(403, nil, []byte("Service suspended")) return } // 访问控制: 校验域名类型与路径 if !isAllowed(tenant.Type, path) { proxywasm.SendHttpResponse(404, nil, []byte("Not Found")) return } // 注入租户上下文 proxywasm.AddHttpRequestHeader("X-Tenant-Id", tenant.Id) proxywasm.AddHttpRequestHeader("X-Domain-Type", tenant.Type) // /* 路由: 按域名类型改写路径到不同 SPA if !strings.HasPrefix(path, "/v1/") && !strings.HasPrefix(path, "/api/") { switch tenant.Type { case "site": proxywasm.ReplaceHttpRequestHeader(":path", "/site"+path) case "dashboard": proxywasm.ReplaceHttpRequestHeader(":path", "/dashboard"+path) } } proxywasm.ResumeHttpRequest() }) return types.ActionPause } func isAllowed(domainType, path string) bool { switch domainType { case "api": return strings.HasPrefix(path, "/v1/") case "dashboard": return strings.HasPrefix(path, "/api/") || strings.HasPrefix(path, "/v1/") || !strings.HasPrefix(path, "/v1/") case "site": if strings.HasPrefix(path, "/api/") { return path == "/api/tenant/branding" // 主站仅允许品牌API } return !strings.HasPrefix(path, "/v1/") } return false }
Redis — Tenant Domain Mapping (Wasm 查询源)
# 每个代理商注册时写入 3 条记录 # key = 域名, value = JSON # 平台自营 (tenant_id=0) SET "tenant:domain:api.your-platform.com" '{"id":"0","type":"api","status":1}' SET "tenant:domain:your-platform.com" '{"id":"0","type":"site","status":1}' SET "tenant:domain:dashboard.your-platform.com" '{"id":"0","type":"dashboard","status":1}' # 代理商 A (tenant_id=1) SET "tenant:domain:api.agent-a.com" '{"id":"1","type":"api","status":1}' SET "tenant:domain:agent-a.com" '{"id":"1","type":"site","status":1}' SET "tenant:domain:dashboard.agent-a.com" '{"id":"1","type":"dashboard","status":1}' # Token 缓存 (auth-validator 查询) SET "token:sk-abc123" '{"user_id":100,"tenant_id":1,"quota":50000,"group":"standard"}' # 品牌配置 (前端 SPA 查询) SET "tenant:brand:1" '{"name":"AgentA","logo":"https://cdn/logo.png","color":"#FF5500"}' # 用量上报 (billing-reporter 写入, New API 消费) XADD billing_stream * tenant_id 1 user_id 100 model gpt-4o channel_id 2 input 500 output 200
06 / Plugin Chain

五步插件链

每个请求经过 5 个插件,通过请求头传递上下文,零耦合

&circled1;
tenant-router
注入: X-Tenant-Id
X-Domain-Type
&circled2;
auth-validator
注入: X-User-Id
X-User-Group
(Token或JWT双模)
&circled3;
smart-router
注入: X-Channel-Id
X-Channel-Provider
X-Channel-Cost-Ratio
&circled4;
ai-proxy
读取 X-Channel-Provider
→ 转发到对应上游
&circled5;
billing-reporter
读取所有头
→ 用量上报
+ 渠道指标采集
请求经过 5 个插件后的请求头
请求进入 → 经过 5 个插件后的请求头: X-Tenant-Id: 1 X-Domain-Type: api X-User-Id: 100 X-User-Group: standard X-Channel-Id: 2 X-Channel-Provider: azure-openai X-Channel-Cost-Ratio: 0.8
Playground 双模鉴权透明化 Dashboard 域名的 /v1/* 请求走 JWT 鉴权,和 API 域名的 Token 鉴权最终注入相同的请求头 (X-User-Id, X-User-Group),ai-proxy 和 smart-router 完全无感知。用户无需创建 API Key 即可在 Playground 中测试模型。
07 / Smart Routing

智能渠道调度

基于成本、质量、用户级别的实时调度,所有 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

smart-router Plugin Core Logic (Simplified Go)
func selectChannel(model, userGroup string, channels []Channel) Channel { healthy := filter(channels, func(ch Channel) bool { return ch.Status != "dead" }) switch userGroup { case "vip": return selectByQuality(healthy) case "standard": return selectByBalance(healthy) // quality×0.6 + cost×0.4 case "free": return selectByCost(healthy) } return healthy[0] }

🔴 Redis 渠道统计结构

Redis Channel Stats
# 渠道实时统计 (billing-reporter 写入) HSET channel:stats:1 success 9980 total 10000 latency_sum 8000000 status "healthy" HSET channel:stats:2 success 9950 total 10000 latency_sum 6500000 status "healthy" # 渠道余额 (New API 定期同步) SET channel:balance:1 180.00 SET channel:balance:2 520.00 # 模型可用渠道列表 (New API 写入, smart-router 读取) SET channels:model:gpt-4o '[ {"id":1,"provider":"openai","weight":100,"cost_ratio":1.0}, {"id":2,"provider":"azure-openai","weight":80,"cost_ratio":0.8}, {"id":3,"provider":"deepseek","weight":60,"cost_ratio":0.5} ]'
亚毫秒级调度决策 调度决策发生在 Higress Wasm 插件内,亚毫秒级。New API 不参与同步调度,只负责写入渠道配置和消费用量。所有渠道统计数据在 Redis 中实时更新,smart-router 每次请求直接读取。
08 / Channel Pricing

渠道定价与倍率

渠道级别的差异化定价,支持 LLM 按 Token 和视频按参数组合的梯度计费

SQL — Channel Model Pricing Schema
CREATE TABLE channel_model_pricing ( channel_id INT, model_name VARCHAR(100), input_price DECIMAL(12,8), output_price DECIMAL(12,8), cache_price DECIMAL(12,8), reasoning_price DECIMAL(12,8), input_ratio DECIMAL(6,4) DEFAULT 1.0, output_ratio DECIMAL(6,4) DEFAULT 1.0, UNIQUE KEY (channel_id, model_name) );

💰 LLM 三级定价计算

Three-Level Pricing Calculation
gpt-4o 请求,命中渠道 B (Azure): 渠道成本 = (500×$0.003 + 200×$0.012) × cost_ratio(0.8) = $0.00312 批发价 = $0.00312 × platform_markup(1.5) = $0.00468 零售价 = $0.00468 × tenant_markup(2.0) = $0.00936 你的利润 = $0.00156/请求 代理商利润 = $0.00468/请求

🎥 视频梯度定价

Video Gradient Pricing (Kling Example)
视频任务 Kling 1080p 10s: base = $0.10 × 分辨率(1080p → 1.5) × 时长(10s → 2.0) = $0.30 批发 = $0.30 × 1.5 = $0.45 零售 = $0.45 × 代理商倍率

🔄 渠道配置同步

Channel Config Sync Flow
供应商配置只在一个地方管理: New API channels 表 = 唯一配置源 变更时 → 调 Higress Admin API 推送 Higress ai-proxy 热更新,零重启 流程: 1. 管理员在 Dashboard 修改渠道配置 2. New API 写入 MySQL channels 表 3. New API 更新 Redis 渠道列表缓存 4. New API 调 Higress Admin API 更新路由 5. Higress ai-proxy 热加载新配置
09 / Integration

跨域串联场景

三个域名、五个插件、四个组件之间如何协同工作

🎮 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/...

Complete Flow Diagram — 三域名全景
agent-a.com (主站) ├── /* → CDN /site/ SPA ├── /api/tenant/branding → New API (品牌配置) └── 点「注册」→ JS 跳转 dashboard.agent-a.com dashboard.agent-a.com (面板) ├── /* → CDN /dashboard/ SPA ├── /api/* → New API (管控API, JWT鉴权) ├── /v1/* → Higress ai-proxy (Playground, JWT鉴权) └── /api/payment/callback → New API (支付回调) api.agent-a.com (API) ├── /v1/chat /embed /images → Higress ai-proxy (Token鉴权) ├── /v1/videos /audio → New API (异步任务) └── /v1/models → New API 后台 (New API goroutines) ├── 消费 billing_stream → 三级扣费 → 写日志 ├── 轮询 tasks_active → 视频任务状态 ├── 证书续期 → acme.sh → Higress热加载 └── 渠道配置变更 → Higress Admin API
10 / Multi-Tenancy

多租户数据模型

所有业务表加 tenant_id,单套系统服务所有代理商

SQL — Tenant Schema (Three-Domain)
CREATE TABLE tenants ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, slug VARCHAR(50) NOT NULL UNIQUE, -- 三域名 (CNAME → gateway.your-platform.com) api_domain VARCHAR(255) UNIQUE, -- api.agent-a.com site_domain VARCHAR(255) UNIQUE, -- agent-a.com dash_domain VARCHAR(255) UNIQUE, -- dashboard.agent-a.com domain_status ENUM('pending','active','failed') DEFAULT 'pending', -- 白标配置 (JSON) brand_config JSON, -- {logo, favicon, color, name, footer} login_config JSON, -- {methods, register, oauth, smtp} payment_config JSON, -- {mode, alipay, wechat, stripe} feature_config JSON, -- {playground, user_token, show_models} site_config JSON, -- {hero, features, pricing_page} -- 财务 balance BIGINT DEFAULT 0, used_quota BIGINT DEFAULT 0, pricing_tier VARCHAR(20) DEFAULT 'standard', status TINYINT DEFAULT 1, owner_user_id INT NOT NULL, created_at BIGINT, updated_at BIGINT ); -- 所有业务表加 tenant_id ALTER TABLE users ADD COLUMN tenant_id BIGINT DEFAULT 0, ADD INDEX(tenant_id); ALTER TABLE tokens ADD COLUMN tenant_id BIGINT DEFAULT 0, ADD INDEX(tenant_id); ALTER TABLE logs ADD COLUMN tenant_id BIGINT DEFAULT 0, ADD INDEX(tenant_id, created_at); ALTER TABLE tasks ADD COLUMN tenant_id BIGINT DEFAULT 0, ADD INDEX(tenant_id); -- 三级定价 CREATE TABLE tenant_pricing ( tenant_id BIGINT NOT NULL, model_name VARCHAR(100) NOT NULL, wholesale DECIMAL(10,6), -- 代理商从你这买 retail DECIMAL(10,6), -- 代理商卖给用户 UNIQUE KEY (tenant_id, model_name) );
11 / Domain Automation

域名绑定自动化

代理商加 3 条 CNAME,平台自动验证 + 签 1 张 SAN 证书覆盖 3 个域名

Domain Binding Lifecycle
===== 代理商操作 ===== Step 1 在 Dashboard 填写 3 个域名 Step 2 去 DNS 加 3 条 CNAME → gateway.your-platform.com Step 3 点「验证」 ===== 平台自动化 ===== Step 4 CNAME 验证 (3个并行) dig CNAME api.agent-a.com → gateway... PASS dig CNAME agent-a.com → gateway... PASS dig CNAME dashboard.agent-a.com → gateway... PASS Step 5 写 Redis (Higress 即时生效) SET tenant:domain:api.agent-a.com {id:1,type:api} SET tenant:domain:agent-a.com {id:1,type:site} SET tenant:domain:dashboard.agent-a.com {id:1,type:dashboard} Step 6 签发 1 张 SAN 证书 (覆盖 3 域名) acme.sh --issue \ -d api.agent-a.com \ -d agent-a.com \ -d dashboard.agent-a.com → Higress Admin API 热加载, 零重启 Step 7 状态更新: domain_status = 'active' cron 续期: 到期前 30 天自动 renew ===== 完成! 全程 < 2 分钟 =====
12 / Billing

三级计费

成本 → 批发 → 零售,LLM 同步计费走 Higress,视频异步计费走 New API。渠道定价详见 Section 08。

上游成本
$0.003
/ 1K tokens
批发价
$0.005
/ 1K tokens
零售价
$0.008
/ 1K tokens

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

13 / White Label

白标配置

前端零编译,运行时注入品牌。两份 SPA 共享同一份代码,fetch API 获取配置。

🛠 代理商可配项

🎨 品牌外观 (主站 + 面板)
🖼 LogoCDN URL
🎨 FaviconCDN URL
🌈 主题色#3B82F6
📝 品牌名AgentA
📄 页脚ICP自定义
🌌 背景图CDN URL
🔑 登录 / 💳 支付 / 🔧 功能
📧 邮箱登录ON/OFF
💬 微信OAuth配AppID
💰 收款模式代收/自收
🏫 支付宝AppID
🎮 PlaygroundON/OFF
📋 上架模型从平台选
Frontend Brand Injection (Runtime, Zero Build)
// 主站 SPA 和 Dashboard SPA 启动时都执行这段逻辑 const res = await fetch('/api/tenant/branding') // Higress 的 tenant-router 已注入 X-Tenant-Id // New API 根据 X-Tenant-Id 返回对应品牌配置 const brand = await res.json() // { name: "AgentA", logo: "https://...", color: "#FF5500", // favicon: "https://...", footer: "ICP备xxx号", // features: { playground: true, ... } } // 动态渲染 document.title = brand.name document.querySelector('link[rel=icon]').href = brand.favicon document.documentElement.style.setProperty('--primary', brand.color) // 所有代理商共享同一份 JS 文件,品牌全靠 API 返回
14 / Data Architecture

数据库分层

热冷分离 + 按月分区 + 活跃任务独立表

🔥 热数据

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/月

15 / Deployment

部署方案与容灾

四组件 Docker Compose 起步,按阶段扩展

STAGE 1 验证/内测 — 单机

Single Machine
8C16G / SSD 100G
⚡ Higress:80 :443
🛠 New API:3000
🔴 Redis:6379
🐬 MySQL:3306
前端 SPA 部署到 CDN/OSS (不在服务器上) | 月成本 ~¥200-400

STAGE 2 生产 — 双机分离

Machine A — Gateway (Public)
4C8G
⚡ Higress:80 :443 公网
🔴 Redis:6379 内网
对外仅暴露 80/443 | 无状态
Machine B — Data (Private)
4C8G / SSD 200G
🛠 New API:3000 内网
🐬 MySQL:3306 内网
无公网 IP | 只允许 Machine A 访问

STAGE 3 高可用 — 5 台服务器集群

📦 阶段 3 采购清单 — 5 台服务器 + SLB + OSS

编号角色配置网络部署内容月成本
SLB负载均衡阿里云CLB/腾讯云CLB公网 20M监听80/443 → A1/A2 健康检查¥50-150
A1网关节点14C8G / SSD 40G公网 IPHigress :80/:443 + Redis哨兵1¥150-250
A2网关节点24C8G / SSD 40G公网 IPHigress :80/:443 + Redis哨兵2¥150-250
B应用+Redis主8C16G / SSD 50G内网New API(蓝绿) + Redis主 + Redis哨兵3¥200-400
CRedis从12C4G / SSD 20G内网Redis从节点¥50-100
DRedis从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

🖥 部署拓扑

Stage 3 Deployment Topology
SLB (:443) ├──→ A1: Higress + 哨兵1 └──→ A2: Higress + 哨兵2 A1/A2 内部转发: ├── /v1/chat等 → ai-proxy (直连上游) ├── /v1/videos等 → B: New API ├── /api/* → B: New API └── /* → OSS/CDN (前端SPA) B: New API ←→ Redis主 ├── 消费 billing_stream ├── 异步任务轮询 └── 渠道配置同步 → A1/A2 Higress Admin API Redis 主从: B (主) → C (从1) + D (从2) 哨兵: A1 + A2 + B (3个,任意1台挂仍可投票) PostgreSQL: E (主) → D (从)
SLB 可选方案 买云 CLB 最省心(¥50-100/月)。也可以用 DNS 多 A 记录(免费但故障切换慢) 或 Keepalived VIP(免费但只能主备)。如果初期流量不大,可以先只用 1 台 Higress 节点,去掉 A2 和 SLB,省 ¥200-400/月。

📋 配置选型依据

组件吃什么资源配置依据
HigressCPU(TLS) + 带宽(SSE转发)日500万请求≈60QPS峰值,4C够
New APICPU(任务轮询) + 内存(Go常驻)异步任务+计费消费,8C16G富余
Redis内存全部数据<500MB,4G足够
PostgreSQL磁盘IO + 内存(缓冲池)日志表大,SSD 500G,shared_buffers 4G

🛡 容灾

故障api.* 影响domain.comdashboard.*恢复
Higress 挂中断中断中断重启30s (无状态)
New API 挂LLM正常正常API不可用LLM由Higress独立处理
Redis 挂鉴权降级正常缓存失效哨兵30s切主
MySQL 挂LLM正常正常写入暂停主从切换
CDN 挂正常页面不可用SPA加载失败CDN SLA保障
16 / Implementation

实施路线

按风险验证优先,渐进式落地

PHASE 0 — 1-2 天
本地验证 Higress
  • Docker 起 Higress + New API + Redis + MySQL
  • 配 ai-proxy 代理 OpenAI,验证 SSE 流式
  • 验证 Wasm 插件 Redis 访问
  • 通过 → Phase 1 | 不通过 → 重新评估
PHASE 1 — 2-3 周
四组件上线 + 双轨运行
  • 单机 Docker Compose 部署
  • Higress 全量透传 New API (纯反代验证稳定性)
  • 逐步切换供应商到 ai-proxy 直连
  • 前端 SPA 部署到 CDN/OSS
  • DB 加 tenant_id + tenants 表
PHASE 2 — 2-3 周
Wasm 插件 + 域名自动化 + 第一个代理商
  • tenant-router Wasm 插件 (核心)
  • auth-validator + smart-router + billing-reporter 插件
  • 域名绑定 API (CNAME 验证 + SAN 证书)
  • 前端品牌注入 (fetch /api/tenant/branding)
  • 第一个测试代理商全流程跑通
PHASE 3 — 2-4 周
白标 + 三级计费 + 渠道定价 + DB 优化
  • 代理商配置中心 (品牌/登录/支付)
  • 三级定价 + 渠道级定价 + Redis Stream 异步结算
  • 支付模式 A (平台代收)
  • logs 按月分区 + tasks 拆表
PHASE 4 — 持续
规模化
  • 双机分离 (Gateway + Data)
  • Higress 多副本 + SLB
  • Redis Sentinel + MySQL 主从
  • 监控告警 (Prometheus + Grafana)
4
核心组件
~650
行 Wasm 代码
5
插件链
3
条 CNAME / 代理商
<2ms
多租户额外延迟
架构核心原则 Higress 是唯一入口,承担所有流量。New API 是纯后端,不托管前端。前端 SPA 部署到 CDN,运行时注入品牌。新增代理商 = 3 条 Redis 记录 + 1 张 SAN 证书,不改任何配置。智能渠道调度在 Wasm 插件内完成,亚毫秒级决策。