多租户低代码 SaaS 平台架构白皮书

第一部分:跨端低代码 DSL Schema 规范

1. 设计目标

  • 平台无关(Vue / 小程序 / 未来端)
  • 不依赖具体 UI 组件库
  • 不包含 DOM 概念
  • 声明式 UI DSL
  • 可版本演进

2. 顶层结构

ts 复制代码
interface PageSchema {
  dslVersion: string
  meta: MetaSchema
  state?: Record<string, any>
  computed?: Record<string, ExpressionSchema>
  root: NodeSchema
}

3. MetaSchema

ts 复制代码
interface MetaSchema {
  id: string
  code: string
  name: string
  version: string
  tenantId?: string
  platform?: 'all' | 'web' | 'mp'
}

4. NodeSchema

ts 复制代码
interface NodeSchema {
  id: string
  component: string
  props?: Record<string, any>
  model?: { path: string }
  children?: NodeSchema[]
  style?: StyleSchema
  visible?: ExpressionSchema
  disabled?: ExpressionSchema
  readonly?: ExpressionSchema
  events?: EventSchema
  permission?: PermissionSchema
  dataSource?: DataSourceSchema
  ext?: Record<string, any>
}

5. ExpressionSchema

ts 复制代码
interface ExpressionSchema {
  type: 'js' | 'logic'
  value: string
}

表达式上下文允许:

  • state
  • user
  • tenant
  • env
  • datasource

禁止访问:

  • window
  • document
  • eval
  • this

6. 权限模型

ts 复制代码
interface PermissionSchema {
  roles?: string[]
  codes?: string[]
  logic?: 'AND' | 'OR'
}

7. DataSource 结构

ts 复制代码
interface DataSourceSchema {
  type: 'static' | 'api'
  apiCode?: string
  config?: Record<string, any>
  cache?: {
    enabled: boolean
    ttl: number
  }
  transform?: ExpressionSchema
}

第二部分:DSL 示例

示例一:客户新增表单

json 复制代码
{
  "dslVersion": "1.0.0",
  "meta": {
    "id": "page_customer_create",
    "code": "customer_create",
    "name": "客户新增",
    "version": "1.0.0"
  },
  "state": {
    "form": {}
  },
  "root": {
    "id": "root",
    "component": "Form",
    "children": [
      {
        "id": "name",
        "component": "Input",
        "model": { "path": "form.name" },
        "props": { "label": "姓名" }
      },
      {
        "id": "submit",
        "component": "Button",
        "props": { "text": "提交" },
        "events": {
          "click": [
            {
              "type": "api",
              "config": {
                "url": "/api/customer/save",
                "method": "POST",
                "body": "{{state.form}}"
              }
            }
          ]
        }
      }
    ]
  }
}

示例二:条件显示

json 复制代码
{
  "id": "companyName",
  "component": "Input",
  "model": { "path": "form.companyName" },
  "visible": {
    "type": "js",
    "value": "state.form.type === 'company'"
  }
}

第三部分:多租户 SaaS 架构设计

一、总体架构图

复制代码
                      ┌──────────────┐
                      │     CDN      │
                      └──────┬───────┘
                             │
                ┌────────────▼────────────┐
                │       API Gateway        │
                │ 路由 / 认证 / 限流 / 灰度 │
                └────────────┬────────────┘
                             │
        ┌────────────────────▼────────────────────┐
        │           低代码 Runtime 集群            │
        │  DSL 引擎 | 表达式引擎 | 权限引擎 | 状态引擎 │
        └────────────────────┬────────────────────┘
                             │
        ┌────────────────────▼────────────────────┐
        │            平台管理后台                  │
        │  设计器 | API中心 | 版本管理 | 发布系统   │
        └────────────────────┬────────────────────┘
                             │
        ┌────────────────────▼────────────────────┐
        │               核心服务层                 │
        │ 租户管理 | 权限服务 | 数据模型 | 流程引擎 │
        └────────────────────┬────────────────────┘
                             │
        ┌────────────────────▼────────────────────┐
        │                数据层                    │
        │  Tenant DB | Redis | DSL存储 | 对象存储   │
        └──────────────────────────────────────────┘

二、多租户隔离模式

推荐:数据库独立模式

复制代码
Tenant_A → DB_A
Tenant_B → DB_B
Tenant_C → DB_C

优点:

  • 强隔离
  • 易扩展
  • 易迁移

第四部分:运行时微内核架构

复制代码
core-runtime
├── component-engine
├── expression-engine
├── permission-engine
├── state-engine
├── data-engine
└── plugin-loader

特性:

  • 插件可扩展
  • 可按行业定制
  • 可支持未来端扩展

第五部分:发布架构

支持:

  • 草稿版本
  • 审批发布
  • 灰度发布
  • 多环境(Dev/Test/Prod)

发布流程:

复制代码
设计器 → 提交版本 → 审批 → 生成快照 → 推送 Runtime

第六部分:高并发优化

  • DSL 预编译缓存
  • 表达式 AST 缓存
  • Redis 二级缓存
  • API 结果缓存
  • 多 Runtime 水平扩展
  • Kubernetes 弹性伸缩

第七部分:企业级能力清单

能力 必须性


多租户隔离 必须

DSL 签名防篡改 必须

审计日志 必须

灰度发布 必须

API 注册中心 必须

在线调试 必须

插件系统 推荐

多环境发布 必须


总结

企业级多租户低代码 SaaS 平台的核心:

微内核运行时 + DSL 驱动 + 强隔离租户 + 可插拔插件架构 + 发布治理体系

该架构可支撑:

  • 百万级租户
  • 日亿级请求
  • 多端统一渲染
  • 行业级扩展能力
相关推荐
Seoyoneh1 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
AI_Auto3 小时前
架构视角看数字化转型|核心架构:大共享平台+小应用,从按需走向适变
大数据·人工智能·架构·制造
科芯创展3 小时前
XU9238 外置NMOS架构宽压Boost升压恒压驱动器方案设计与工程落地指南
架构
Dawson Zhu3 小时前
AI 辅助调试陷入「反复修改」循环?用证据驱动的四步法破局
人工智能·语言模型·架构·aigc·agi
她的男孩5 小时前
多租户和数据权限怎么共存?扒完拦截器注册链路,我找到 4 个隐蔽的坑
java·后端·架构
这个DBA有点耶6 小时前
非关系型数据库到底有几种?键值、文档、列族、图,一篇讲透
mysql·架构·nosql
昇腾知识体系6 小时前
昇腾 A5 ISA 指令集:文档入口与 mem_bar 等关键指令
人工智能·华为·架构·知识图谱
诚心呈意共享外卖配送系统6 小时前
校园配送系统架构设计:最后100米智能调度与两段接力实践
架构·系统架构·创业创新
爱读源码的大都督7 小时前
DeepSeek面试官问:多租户 RAG 系统怎样实现细粒度权限控制?
后端·面试·架构
企业通信技术笔记8 小时前
企业IM内外网隔离部署:DNS、证书、WebSocket与跨网接口设计
websocket·网络协议·架构·php·信息与通信