多租户低代码 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 驱动 + 强隔离租户 + 可插拔插件架构 + 发布治理体系

该架构可支撑:

  • 百万级租户
  • 日亿级请求
  • 多端统一渲染
  • 行业级扩展能力
相关推荐
BPM_宏天低代码36 分钟前
宏天低代码 (EIP8):Groovy 动态脚本实战,表单前置 / 后置脚本配置详解
低代码·groovy脚本·groovy动态脚本
CoovallyAIHub1 小时前
BMW GenAI4Q:每57秒下线一辆车,AI如何为每辆车定制专属质检清单
数据库·算法·架构
Solar20251 小时前
企业数据API对接选型指南:技术架构、评估标准与行业实践
大数据·运维·人工智能·架构·云计算
小超同学你好2 小时前
Transformer 15: DeepSeek-V2 架构解析:MLA + DeepSeekMoE 与主流架构对比
语言模型·架构·transformer·llama
AI精钢2 小时前
OpenLobster 的优势与劣势:一次面向 OpenClaw 用户的架构审视
java·微服务·架构·ai agent·mcp·openclaw·openlobster
_下雨天.2 小时前
LNMP架构学习笔记
笔记·学习·架构
tumeng07113 小时前
springboot项目架构
spring boot·后端·架构
没有bug.的程序员3 小时前
撕裂微服务网关的认证风暴:Spring Security 6.1 与 JWT 物理级免登架构大重构
java·spring·微服务·架构·security·jwt
学嵌入式的小杨同学3 小时前
STM32 进阶封神之路(十三):空气质量传感器实战 ——KQM6600 模块从协议到代码(串口通信 + 数据解析)
c++·stm32·单片机·嵌入式硬件·架构·硬件架构·嵌入式实时数据库
头顶秃成一缕光3 小时前
Redis + Caffeine 多级缓存架构
redis·缓存·架构