基于 Jamstack 的 SaaS 设计架构与多租户模型
By Leeting Yan
一、为什么用 Jamstack 构建 SaaS?
在典型 SaaS 产品中,需求包含:
- 全球快速访问 & 高 SEO 友好
- 多租户隔离(租户 = 企业/组织/业务域)
- 用户身份认证与 RBAC 权限体系
- 内容管理 / 数据 CRUD
- 付费订阅、配额、用量计费
- 对接第三方 API(支付、AI、消息、Webhook 等)
- 快速构建 + 自动化部署能力
Jamstack 在 SaaS 中带来的核心价值:
| 能力项 | Jamstack 解决方式 |
|---|---|
| 全球加速 | CDN Edge 分发 |
| 高并发能力 | 静态资源无需服务器扩展 |
| 动态业务能力 | Serverless Functions + API |
| 持续迭代 | Git Push → CI/CD 自动部署 |
| 安全 | 无传统 Web Server 暴露面 |
| 成本 | 静态站点托管成本低,可按调用量付费 |
因此,Jamstack 非常适合:
- 落地页、营销页、文档、客户门户、控制台等典型 SaaS 模块
- 以 API 为核心的 B2B SaaS、开发者工具、自动化平台
- Headless SaaS(API + Admin UI + Frontend SDK)
二、多租户 (Multi-Tenant) 模型概述
SaaS 多租户架构的核心目标:
让多个客户共享系统,而彼此之间的数据、访问权限、计费逻辑严格隔离。
核心关注点:
| 维度 | 建议内容 |
|---|---|
| 租户隔离 | 数据库级 / Schema 级 / Row 级 |
| 身份认证 | JWT / Session / OAuth2 / OpenID Connect |
| 权限策略 | RBAC / ABAC / Multi-level Permission |
| 域名路由 | 一级域名/子域名/路径映射租户 |
| 计费 | Stripe / Paddle / PayPal 按用量或订阅收费 |
| 审计与合规 | 日志、追踪、驻留地(GDPR/中国数据合规) |
三、三种 Jamstack 多租户架构模型
模型 A:前端共享 + API 多租户隔离(推荐)
CDN Cached Static App
│
▼
Browser SPA
│ calls
▼
Serverless API → Multi-tenant DB
适合:B2B SaaS Dashboard、控制台、开发者平台
特点:
| 优点 | 说明 |
|---|---|
| 极简部署 | 单一前端应用共享 |
| 良好扩展 | 后端 API 可横向扩展 |
| 高频更新友好 | 页面不受租户差异影响 |
模型 B:租户级静态渲染(SSG / ISR)
Build System →
Generates tenant pages →
CDN distributes different static snapshots
适合:多租户 CMS、Docs、知识站点、门户网站
核心逻辑:
- 构建时为每个租户生成专属静态页面
- 配合 ISR(Incremental Static Regeneration)进行部分动态更新
模型 C:租户独立前端(适合企业级)
每个租户运行自己的前端实例:
tenant1.saas.com → CDN → Frontend Build #1
tenant2.saas.com → CDN → Frontend Build #2
适合:
- 需要独立 UI/主题/定制功能的 Enterprise SaaS
- 允许私有化部署或单租户版
缺点:构建成本增加
四、租户识别与路由策略
| 模式 | 示例 | 优点 |
|---|---|---|
| 子域名模式 | acme.saas.com |
主流 B2B SaaS 模式,高识别度 |
| 路径模式 | saas.com/t/acme |
部署简单,与免费托管兼容性强 |
| 独立域名 CNAME | customer-domain.com → tenant.saas.com |
提升品牌体验,适合付费/高级版 |
建议使用:
{tenant}.yourSaaS.com
解析租户来源方式:
- 根据
Host分析租户 - 或 URL 路径:
/t/{tenantId} - JWT 中附带 tenant_id 做二次校验
五、数据隔离模型
| 模型 | 适用场景 |
|---|---|
| Row-based 行级隔离 | 中小 SaaS,最常用 |
| Schema-based 架构隔离 | 中大型 SaaS,强隔离 |
| Database per tenant | 企业、公有云/私有化部署 |
常见字段:
tenant_id (UUID/KSUID/Snowflake)
user_id
role
plan (free/pro/business/enterprise)
数据库推荐:
- Postgres(主推,支持 JSONB、行级权限)
- MySQL / TiDB / PlanetScale
- Serverless D1 / Turso(边缘数据库)
六、API & Serverless 后端设计
推荐 API 结构:
/api/v1/auth
/api/v1/tenant
/api/v1/users
/api/v1/billing
/api/v1/webhook
/api/v1/audit
Serverless 最佳选择:
| 提供商 | 适合理由 |
|---|---|
| Vercel Functions | 最佳 Jamstack 搭档,支持 Edge |
| Cloudflare Workers | 全球超低延迟,适合全球 SaaS |
| Netlify Functions | 简单易用 |
| AWS Lambda | 企业级、与 AWS 集成良好 |
七、计费、订阅与用量监控(Billing & Metering)
常见 Billing 方案:
| 类型 | 说明 |
|---|---|
| Subscription |月/年付费等级(Free、Pro、Enterprise) | |
| Usage-based |按 API 调用量 / 存储 / 数据行数计费 | |
| Seat-based |按成员数量计费(典型 SaaS 模型) |
常见支付方案:
- Stripe(国际 SaaS 标准)
- Paddle(含税务代理,适合欧盟/英国)
- PayPal(备选)
- 中国支付需适配微信/支付宝
八、参考架构拓扑
┌────────────────────┐
│ Git Repository │
└─────────▲──────────┘
│
│ CI/CD
│
┌────────┴─────────┐
│ Static Build/SSG │
└─────────▲────────┘
│ Upload
▼
┌───────────────────────────────────────────────┐
│ CDN/Edge │
└───────▲───────────────────────────────────▲──┘
│ │
Browser SPA/SSR (Next/Nuxt/Astro) │
│ │
└───────────calls───────────────────┘
Serverless API Layer
/auth /tenant /billing
│
Multi-tenant DB
九、最佳实践建议
✔ 推荐技术栈
| 层 | 推荐 |
|---|---|
| 前端 | Next.js / Nuxt / Astro |
| Infra | Vercel / Netlify / Cloudflare Pages |
| DB | Postgres / MySQL / Serverless DB |
| Auth | Auth0 / Clerk / Supabase Auth / Cognito |
| Billing | Stripe / Paddle |
✔ 安全策略
- 所有请求必须包含
tenant_id - RBAC + API Permission Matrix
- 审计日志 + 行为追踪
- 数据加密、GDPR/PIPL 合规要求
✔ 提升性能
- Edge Rendering / Edge KV 缓存
- ISR(增量静态更新)
- 分块构建与按租户增量发布
结语
基于 Jamstack 的 SaaS 架构不仅能显著降低成本,还能带来:
- 全球极速访问
- 默认高安全性
- 可插拔 API 扩展能力
- 极简运维,无服务器管理压力
- 适合个人/团队/Startup 快速推出 MVP
Jamstack + 多租户 SaaS 非常适合以下方向:
- AIGC 工具型 SaaS
- API 产品型 SaaS(DevTools / 平台接口)
- 文档/知识/团队协作 SaaS
- 内容电商 / Headless Commerce
- Web 数据仪表盘与 BI