[ PROMPT_NODE_24458 ]
Workers For Platforms 设计模式
[ SKILL_DOCUMENTATION ]
# 多租户模式
## 按计划计费
typescript
interface Env {
DISPATCHER: DispatchNamespace;
CUSTOMERS_KV: KVNamespace;
}
export default {
async fetch(request: Request, env: Env): Promise {
const userWorkerName = new URL(request.url).hostname.split(".")[0];
const customerPlan = await env.CUSTOMERS_KV.get(userWorkerName);
const plans = {
enterprise: { cpuMs: 50, subRequests: 50 },
pro: { cpuMs: 20, subRequests: 20 },
free: { cpuMs: 10, subRequests: 5 },
};
const limits = plans[customerPlan as keyof typeof plans] || plans.free;
const userWorker = env.DISPATCHER.get(userWorkerName, {}, { limits });
return await userWorker.fetch(request);
},
};
## 资源隔离
**完全隔离:** 为每个客户创建唯一资源
- 每个客户一个 KV 命名空间
- 每个客户一个 D1 数据库
- 每个客户一个 R2 存储桶
typescript
const bindings = [{
type: "kv_namespace",
name: "USER_KV",
namespace_id: `customer-${customerId}-kv`
}];
## 主机名路由
### 通配符路由(推荐)
在 SaaS 域上配置 `*/*` 路由 → 调度智能体
**优势:**
- 支持子域 + 自定义虚荣域名
- 无每路由限制(常规智能体限制为 100 条路由)
- 程序化控制
- 适用于任何 DNS 代理设置
**设置:**
1. Cloudflare for SaaS 自定义主机名
2. 后备源站(如果智能体是源站,则使用虚拟 `A 192.0.2.0`)
3. DNS CNAME 指向 SaaS 域
4. `*/*` 路由 → 调度智能体
5. 调度智能体中的路由逻辑
typescript
export default {
async fetch(request: Request, env: Env): Promise {
const hostname = new URL(request.url).hostname;
const hostnameData = await env.ROUTING_KV.get(`hostname:${hostname}`, { type: "json" });
if (!hostnameData?.workerName) {
return new Response("Hostname not configured", { status: 404 });
}
const userWorker = env.DISPATCHER.get(hostnameData.workerName);
return await userWorker.fetch(request);
},
};
### 仅子域
1. 通配符 DNS: `*.saas.com` → 源站
2. 路由: `*.saas.com/*` → 调度智能体
3. 提取子域进行路由
### Orange-to-Orange (O2O) 行为
当客户使用 Cloudflare 并将 CNAME 指向您的智能体域时:
| 场景 | 行为 | 路由模式 |
|----------|----------|---------------|
| 客户未使用 Cloudflare | 标准路由 | `*/*` 或 `*.domain.com/*` |
| 客户使用 Cloudflare (代理 CNAME) | 在边缘调用智能体 | `*/*` requ