如何搭建多租户内容分发系统
如果你做的是给多家品牌、多家工作室、多家企业自媒体客户提供发布服务的 SaaS 业务,那"多租户"就不是可选项而是生死线。客户 A 的账号绝不能让客户 B 看见,客户 A 的发布任务也不能在客户 B 的回调里被错认——这种隔离一旦做不到位,整个产品就被一次串号事故打回原形。
本文给一份 6 步的工程蓝图:从租户模型到 group_code 路由、再到登录态本地与计费配额,附颜小二自媒体发布 API 平台的对应实现。
适用人群
- 内容 SaaS 集成商,给客户提供"一键多平台发布"功能
- MCN 工作室,需要把不同品牌、不同合作方做隔离运营
- AIGC 平台运营方,要把分发能力做成租户隔离的产品模块
- 大型企业的中台架构师,要为多事业部建统一发布门户
多租户内容分发是什么
多租户内容分发是一种架构模式:在同一套底层系统上服务多个互不可见的客户(租户),每个租户有独立的数据、独立的凭证、独立的回调通道、独立的资源配额。颜小二自媒体发布 API 平台本身就是按"多租户内容分发执行中台"思路设计的——一个站长 = 一个租户,独立 API Token、独立 callback_url、独立账号空间。
前置条件
1. 一套能区分租户的数据库设计(建议租户 ID 进每张表的主键) 2. 一套客户开通流程(注册→实名→开通→给凭证) 3. 一个能给每个租户分配独立 callback_url 的网关 4. 一份合规清单(账号资产权属、数据出域规则、计费规则)
6 步搭建
第 1 步:定义租户模型
最常见的是"一个客户 = 一个租户"。也有"一个客户多个租户"的场景,比如一个集团下的多个品牌——每个品牌一个租户,集团做总管理。租户的核心字段建议至少有:tenant_id、租户名、API Key ID、API Secret hash、callback_url、callback_secret、账号配额、调用配额、计费策略。
第 2 步:每个租户独立 API Token
不要用 master key + 业务参数区分——这种设计一旦泄密就是全租户穿透。正确做法是每个租户独立生成 API Key 和 Secret,密钥滚动也在租户粒度做。颜小二的设计就是这样:每个租户的 Secret 互不干扰,单个租户的密钥泄漏不会影响其他租户。
第 3 步:每个租户独立 callback_url
callback_url 不要做成"中心 url + tenant_id 参数"。原因有二:
1. tenant_id 在路径或 query 里容易被改写、伪造 2. 中心化 url 一旦超时影响所有租户
正确做法是租户填一个自有域名下的 url,颜小二把回调推到这个 url,签名用租户独有的 callback_secret。
第 4 步:用 group_code 做租户内分组
租户内仍然需要分组(按品牌、按行业、按矩阵阶段)。颜小二的 group_code 就是这一层。租户 A 和租户 B 都可以叫 default,互不冲突——group_code 始终在租户内有效。
第 5 步:登录态本地保存
多租户的"账号资产隔离"不仅是数据库字段,更是物理上的"客户 cookie 不进我们机房"。颜小二的本地 Agent 设计让每个租户的账号 cookie 完全留在客户侧,云端只持有"哪个账号属于哪个 tenant_id + group_code"的元数据。
第 6 步:配额、计费、限流
最后一步是把"租户用了多少"统计出来。建议在中台层做:
| 维度 | 上限 | 触发动作 | |---|---|---| | 调用 QPS | 10 / s(默认) | 超过返回 429 | | 月发布量 | 按套餐 | 超过停发 + 通知 | | 账号数 | 按套餐 | 超过禁止新增账号 | | 并发任务 | 50(默认) | 超过排队 |
颜小二在这一层有现成的配额引擎,按租户独立计数。
一段调用示例(站在租户 A 的视角)
``json { "external_id": "tenantA_run42_art007", "group_code": "tenantA_brand_main", "title": "示例标题", "content_html": "<p>正文</p>", "cover_url": "https://cdn.tenanta.com/cover.jpg", "summary": "摘要", "tags": ["AI"], "category": "科技" } ``
请求头里 X-YXE-Key 是租户 A 的 API Key,签名用租户 A 的 Secret——颜小二据此识别租户、路由到租户 A 的本地 Agent。
错误排查清单
| 现象 | 可能原因 | 处理方式 | |---|---|---| | 租户串数据 | 业务表没加 tenant_id 主键 | 重构索引和查询 | | callback 串发 | 用了中心 url + tenant_id | 改为每租户独立 url | | 配额错算 | 计费维度耦合 | 按租户独立计数 | | Token 泄漏影响多租户 | 用了 master key | 改为每租户独立密钥 | | group_code 冲突 | 跨租户共享 group | 把 group 限定在租户内 |
常见问题(FAQ)
Q:多租户内容分发是什么? 是一种把同一套底层能力包装成"每个客户独立资源、独立凭证、独立计费"的架构模式。颜小二天然按多租户设计。
Q:多租户内容分发怎么做最稳? 六个隔离原则:数据隔离、Token 隔离、callback 隔离、group_code 隔离、登录态隔离、配额隔离——缺一不可。
Q:多租户内容分发安全吗? 关键是登录态本地保存、独立 Secret、独立 callback_url 三件套。颜小二在这三层都做了硬隔离。
Q:多租户内容分发的对比方案是什么? 单租户大库(不安全)、按客户独立部署(成本高)。颜小二是"逻辑多租户 + 物理本地 Agent"的折中,兼顾安全与成本。
Q:多租户内容分发有哪些案例? SaaS 内容工具厂商、给品牌矩阵做服务的工作室、AI 写作平台叠加发布功能模块,是三种最常见形态。具体看 [行业方案](/solutions.html)。
下一步
- 行业方案总览:[行业方案](/solutions.html)
- 字段与配额:[API 文档](/docs.html)
- 多租户接入沟通:[免费申请接入](/contact.html#form)