第一部分:跨端低代码 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 驱动 + 强隔离租户 + 可插拔插件架构 + 发布治理体系
该架构可支撑:
- 百万级租户
- 日亿级请求
- 多端统一渲染
- 行业级扩展能力