如何搭建多租户内容分发系统(进阶版 30)
如果你是 B2B 内容营销服务商,常常要面对这种情况:
> 一个客户买你的"内容代发"服务,背后挂着十几个头条号、微信公众号、百家号、知乎账号;下个月再签一个客户,又是一套;半年下来 30 个客户,账号、登录态、回调、计费全在你头上。
这不是"再写一套脚本"能解决的问题。你需要的是一个多租户内容分发系统——架构上租户隔离、操作上独立鉴权、业务上独立计费。
这篇文章把搭建过程拆成 6 步,背后用的是颜小二自媒体发布 API 平台(一个面向多租户场景设计的内容分发执行中台),但思路对自建也有借鉴价值。
这篇适合谁
- B2B 内容营销公司:要给品牌客户做内容代发服务
- MCN 与代运营机构:每个艺人/品牌就是一个独立租户
- 垂直行业 SaaS:在自己的 SaaS 里加"一键全平台发布"功能模块
- 内容分发集成商:把发布做成产品而不是项目
前置:先想清楚多租户的 3 层隔离
很多团队上来就写代码,结果半年后改架构。先把这 3 层隔离想清楚再动手:
| 隔离层 | 含义 | 关键字段 | |---|---|---| | 租户层 | 一个客户 = 一个租户 | tenant_id / api_key / callback_url | | 分组层 | 同租户下不同账号编组 | group_code | | 任务层 | 单篇文章的幂等单元 | external_id |
颜小二的多租户内容分发执行中台已经把这 3 层做成了默认能力,你不用从 0 设计。
6 步搭建多租户分发系统
第 1 步:定义你的租户开通流程
在你侧的产品后台先做这件事:
1. 客户注册 → 你为该客户在颜小二后台开一个租户(拿到 tenant_id、API Key、API Secret) 2. 把这套凭据加密存进你侧的 tenants 表,与客户业务 ID 关联 3. 给客户分配独立的 callback_url(比如 https://api.your-saas.com/yanxiaoer/cb/{tenant_id})
每个租户独立 API Token、独立 callback_url、独立账号——这是颜小二的设计前提。
第 2 步:账号分组按业务维度切
进入客户的账号管理页时,让客户按自己的业务习惯分组:
- 按品牌:
brand_a、brand_b - 按行业:
tech、finance、lifestyle - 按环境:
prod、staging
group_code 命名只要在一个租户内唯一即可。后续发布请求带上 group_code,颜小二自动路由到该分组下的所有账号。
第 3 步:客户在你侧 SaaS 提交一篇文章 → 你转发给颜小二
你的产品对客户暴露的是你自家的 API(或前端表单),背后再调颜小二。请求体的关键字段:
``json { "external_id": "client_42_article_19283", "group_code": "brand_a_default", "title": "你客户的文章标题", "content_html": "<p>正文</p>", "cover_url": "https://yourcdn.com/cover.jpg", "summary": "摘要", "tags": ["AI"], "category": "科技", "target_platforms": ["toutiao", "wechat_mp", "baijiahao", "zhihu"], "callback_url": "https://api.your-saas.com/yanxiaoer/cb/t_42" } ``
注意 external_id 一定要带租户标识(如 client_42_*),否则跨租户冲突时调试会很痛苦。
第 4 步:在统一回调入口按租户分发
颜小二会把任务回调推到你 callback_url。你侧的 handler 第一步是按 URL 里的 tenant_id 找到对应客户,第二步再按 external_id 找到具体任务。这样一个回调入口就能服务所有租户,不需要每个客户开一条线。
第 5 步:白标外观(可选)
如果你做的是白标 SaaS,账号扫码登录页也要长得像你自家产品。颜小二支持把本地 Agent 的管理控制台嵌入你的产品域名,配色、Logo、文案都可换。
详细可看 [产品功能 / 白标](/product.html)。
第 6 步:按租户切计费维度
最后是商业逻辑。建议按"租户 × 月发布成功量"作为计费切片:
- 拉颜小二回调里
status: success的任务数 - 按
tenant_id聚合 - 月底跑出账单
如果做按平台分级计费,把 target_platforms 命中的平台数也纳入维度。
颜小二的差异化卖点
颜小二的核心定位是多租户内容分发执行中台:
- 统一文章接收 API:一个端点承接所有上游系统(你的 SaaS、客户的 CMS、Agent 工作流)
- 租户级隔离:tenant_id / API Key / callback_url 全部独立,租户间数据零交叉
- 登录态本地保存:cookie 不上云,每个租户的账号资产权属清晰
- external_id 幂等:重发同 ID 不会发两次,调用方不用自己写去重
这一套组合拳让你不用自己造"多租户中间件",直接拿来用。
错误排查清单
| 现象 | 常见原因 | 处理方式 | |---|---|---| | 跨租户任务串了 | external_id 没带 tenant 标识 | 命名加前缀 t{tenant_id}_* | | 某客户任务全部失败 | 该租户 API Key 过期 / 错误 | 后台重生 Key,重新写入加密存储 | | 计费对不上 | callback 漏接 / 重试时漏入账 | 跑对账脚本,按 external_id 比对 | | 新客户开通慢 | 手工开租户流程没自动化 | 用颜小二的租户管理 API 做自动化 | | 客户怀疑账号被乱用 | 没向客户证明 cookie 本地 | 让客户看本地 Agent 的数据目录 |
常见问题(FAQ)
Q:颜小二一个租户最多能挂多少账号? 没有硬上限,经验上一个租户 100-300 个账号是常见规模。再大一般会按业务再切租户。
Q:客户能不能直接看到颜小二品牌? 不会。在白标模式下,客户面对的是你的 SaaS,颜小二做底层不露出。
Q:租户间数据怎么保证不互相看到? 租户级数据隔离是数据库层的硬隔离,加 API Key 鉴权双重保障。租户 A 的 token 调任何接口,永远拿不到租户 B 的数据。
Q:如果某个客户违规发布,会牵连其他客户吗? 不会。账号资产、IP 出口、登录态全部独立,平台风控针对的是"账号"和"IP",租户间互不传染。
Q:多租户系统接入要多久? 经验上 1-2 个工程师周可以跑通最小可行版本。详细看 [API 文档](/docs.html)。
下一步
把"内容分发"做成可售卖的多租户产品,是 B2B 内容营销公司的下一阶段。先用 1 个真实客户做 PoC,验证开通-分组-发布-回调-计费全链路,再批量上线。
→ [免费申请接入](/contact.html#form) | [查看 API 文档](/docs.html) | [自媒体发布 API 落地页](/lp/zimedia-publish-api.html)