Skip to content

低代码平台详细技术方案 - 总览 ​

完整的低代码平台技术架构设计方案

技术栈: Golang (Gin + GORM + go-redis) + PostgreSQL + Elasticsearch + Vue 3 + Element Plus


📚 文档导航 ​

本技术方案分为以下几个部分:

  1. 后端架构方案 - Golang 后端详细设计
  2. 前端架构方案 - Vue 3 前端详细设计
  3. 总览文档(本文档) - 整体架构和关键设计

一、系统整体架构 ​

1.1 技术架构图 ​

bash
┌─────────────────────────────────────────────────────────┐
│                    用户层 (Browser)                       │
│          设计器界面 | 运行时界面 | 管理后台                │
└─────────────────────────────────────────────────────────┘
                          ↓ HTTPS
┌─────────────────────────────────────────────────────────┐
│              前端层 (Vue 3 + Element Plus)                │
│  ┌──────────────┬──────────────┬──────────────────┐    │
│  │  设计器模块   │  运行时引擎   │   管理功能        │    │
│  │  PageDesigner│  Renderer    │   UserManagement │    │
│  │  FormDesigner│  FormEngine  │   RoleManagement │    │
│  │  FlowDesigner│  EventEngine │                  │    │
│  └──────────────┴──────────────┴──────────────────┘    │
│         状态管理 (Pinia) | 路由 (Vue Router)             │
└─────────────────────────────────────────────────────────┘
                          ↓ REST API
┌─────────────────────────────────────────────────────────┐
│                  网关层 (可选 Nginx/Kong)                 │
│         限流 | 鉴权 | 负载均衡 | API 聚合                  │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│                  后端层 (Golang + Gin)                    │
│  ┌──────────────────────────────────────────────────┐  │
│  │              Middleware 中间件层                   │  │
│  │  Auth | Permission | Logger | RateLimit | CORS   │  │
│  └──────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────┐  │
│  │               Handler 处理器层                     │  │
│  │  Metadata | Form | Data | Workflow | Auth        │  │
│  └──────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────┐  │
│  │               Service 业务逻辑层                   │  │
│  │  PageService | FormEngine | DataService          │  │
│  │  WorkflowEngine | RuleEngine                     │  │
│  └──────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────┐  │
│  │             Repository 数据访问层                  │  │
│  │  PostgresRepo | ElasticsearchRepo | RedisRepo    │  │
│  └──────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘
                          ↓
┌──────────────┬──────────────────┬────────────────────┐
│  PostgreSQL  │  Elasticsearch   │       Redis        │
│  (主数据库)   │   (搜索/日志)     │    (缓存/会话)      │
│              │                  │                    │
│ • 元数据存储  │ • 全文检索        │ • 配置缓存         │
│ • 业务数据    │ • 操作日志        │ • 用户会话         │
│ • 用户权限    │ • 数据聚合        │ • 分布式锁         │
│ • 流程数据    │                  │ • 限流计数         │
└──────────────┴──────────────────┴────────────────────┘

1.2 核心模块划分 ​

前端模块 ​

模块功能技术选型
页面设计器拖拽式页面搭建Vue 3 + vuedraggable
表单设计器可视化表单设计Element Plus + 自定义渲染引擎
流程设计器工作流可视化编排LogicFlow / bpmn-js
数据模型设计器ER 图设计自研或集成第三方
动态渲染引擎运行时页面渲染递归组件 + 表达式求值
状态管理全局状态管理Pinia
组件库低代码组件库Element Plus + 自定义组件

后端模块 ​

模块功能技术选型
元数据服务页面/组件/模型配置管理GORM + PostgreSQL
表单引擎表单校验和联动govaluate 表达式引擎
数据服务通用 CRUD / 动态查询GORM 动态 SQL
流程引擎工作流执行Temporal / 自研状态机
规则引擎业务规则执行govaluate / expr
搜索服务全文检索Elasticsearch
认证授权JWT + RBACjwt-go + Casbin
缓存服务Redis 缓存管理go-redis

二、核心技术选型详解 ​

2.1 后端技术栈 ​

Gin Web 框架 ​

  • 优势: 性能优异(比 Beego 快 10 倍)、中间件生态丰富、轻量级
  • 用途: HTTP 路由、中间件链、请求处理
  • 版本: v1.9.x

GORM ​

  • 优势: 功能完善、支持复杂关联、插件丰富、JSONB 支持
  • 用途: PostgreSQL ORM、数据迁移、模型关联
  • 版本: v1.25.x
  • 关键特性:
    • JSONB 字段存储灵活配置
    • 软删除支持
    • 事务管理
    • 预加载优化(解决 N+1 问题)

go-redis ​

  • 优势: 官方推荐、支持集群、Pipeline、Pub/Sub
  • 用途: 缓存、会话、分布式锁、限流
  • 版本: v9.x
  • 应用场景:
    • 元数据配置缓存(1小时 TTL)
    • JWT Token 管理(7天 TTL)
    • 限流计数器(滑动窗口算法)
    • 分布式锁(编辑冲突控制)

PostgreSQL ​

  • 优势: JSONB 支持、强大的索引、事务完整性、扩展性
  • 版本: 15.x
  • 核心特性:
    • JSONB 存储页面配置、表单 Schema
    • GIN 索引加速 JSON 查询
    • 分区表支持(日志表按月分区)
    • 全文检索(中文分词 zhparser)

Elasticsearch ​

  • 优势: 分布式搜索、实时分析、高可用
  • 版本: 8.x
  • 应用场景:
    • 全局搜索(跨模型、跨字段)
    • 操作日志存储和分析
    • 数据聚合统计
    • 业务数据搜索

2.2 前端技术栈 ​

Vue 3 ​

  • 优势: Composition API、性能提升、TypeScript 支持
  • 版本: 3.3.x
  • 核心能力:
    • 组合式 API 提升代码复用性
    • Teleport 支持弹窗管理
    • Suspense 异步组件加载

Element Plus ​

  • 优势: 组件丰富、Vue 3 原生支持、中文友好
  • 版本: 2.4.x
  • 使用场景:
    • 基础 UI 组件(Input、Select、Table 等)
    • 布局组件(Container、Row、Col)
    • 反馈组件(Message、Dialog)

Pinia ​

  • 优势: 轻量级、TypeScript 支持、DevTools 集成
  • 版本: 2.1.x
  • 状态划分:
    • designerStore - 设计器状态
    • metadataStore - 元数据缓存
    • runtimeStore - 运行时状态
    • userStore - 用户信息

TypeScript ​

  • 优势: 类型安全、IDE 支持、代码可维护性
  • 版本: 5.2.x
  • 类型定义:
    • 组件 Schema 类型
    • API 接口类型
    • 表单数据类型

三、核心功能设计 ​

3.1 元数据驱动架构 ​

设计理念: 一切皆配置,配置即代码

bash
配置存储 (PostgreSQL JSONB)
    ↓
配置加载 (后端 API + Redis 缓存)
    ↓
配置解析 (前端渲染引擎)
    ↓
组件渲染 (动态组件 + 递归渲染)
    ↓
用户交互 (事件绑定 + 数据双向绑定)

页面配置示例 ​

json
{
  "pageId": "user-list",
  "name": "用户列表",
  "route": "/users",
  "layout": "default",
  "components": [
    {
      "id": "search-form",
      "type": "el-form",
      "props": {
        "inline": true
      },
      "children": [
        {
          "id": "username-input",
          "type": "el-input",
          "props": {
            "field": "username",
            "placeholder": "请输入用户名",
            "clearable": true
          }
        },
        {
          "id": "search-btn",
          "type": "el-button",
          "props": {
            "type": "primary"
          },
          "events": {
            "click": {
              "actionType": "api",
              "actionConfig": {
                "method": "GET",
                "url": "/api/v1/data/user",
                "params": "{{form}}"
              }
            }
          },
          "slot": "搜索"
        }
      ]
    },
    {
      "id": "user-table",
      "type": "el-table",
      "props": {
        "data": "{{tableData}}",
        "border": true
      },
      "children": [
        {
          "id": "col-username",
          "type": "el-table-column",
          "props": {
            "prop": "username",
            "label": "用户名"
          }
        },
        {
          "id": "col-email",
          "type": "el-table-column",
          "props": {
            "prop": "email",
            "label": "邮箱"
          }
        }
      ]
    }
  ]
}
```bash

### 3.2 表单引擎

#### **功能特性**

1. **动态渲染:** 基于 JSON Schema 生成表单
2. **实时校验:** async-validator + 自定义校验
3. **字段联动:** 表达式驱动的显隐、禁用、赋值
4. **分步表单:** 支持多步骤向导
5. **自定义组件:** 可扩展的组件注册机制

#### **联动规则示例**

```json
{
  "rules": [
    {
      "condition": "form.type === 'enterprise'",
      "actions": [
        { "type": "setVisible", "target": "companyName", "value": true },
        { "type": "setRequired", "target": "companyName", "value": true }
      ]
    },
    {
      "condition": "form.province === '北京'",
      "actions": [
        { "type": "setValue", "target": "city", "value": "北京市" }
      ]
    }
  ]
}

3.3 动态数据服务 ​

核心能力 ​

  1. 通用 CRUD: 基于数据模型自动生成接口
  2. 查询构建器: 可视化构建复杂查询条件
  3. 数据权限: 行级、字段级权限控制
  4. 关联查询: 支持多表关联

查询请求示例 ​

json
{
  "model": "user",
  "filters": [
    { "field": "status", "operator": "eq", "value": "active" },
    { "field": "created_at", "operator": "between", "value": ["2024-01-01", "2024-12-31"] }
  ],
  "sorts": [
    { "field": "created_at", "order": "desc" }
  ],
  "page": 1,
  "page_size": 20
}
```bash

### 3.4 工作流引擎

#### **流程定义**

- **BPMN 2.0 标准:** 兼容业界标准
- **节点类型:**
  - 开始节点
  - 任务节点(用户任务、系统任务)
  - 网关节点(排他网关、并行网关)
  - 结束节点

#### **流程执行**

启动流程 → 创建流程实例 → 分发任务 → 任务执行 → 流转到下一节点 → 结束流程

bash

#### **推荐方案**

- **Temporal:** 强大的工作流引擎,支持长时间运行的流程
- **自研状态机:** 轻量级方案,适合简单流程

---

## 四、数据库设计要点

### 4.1 PostgreSQL 表设计

#### **核心表**

| 表名 | 用途 | 关键字段 |
|------|------|---------|
| lc_pages | 页面配置 | config (JSONB), version, status |
| lc_components | 组件定义 | schema (JSONB), default_props (JSONB) |
| lc_data_models | 数据模型 | fields (JSONB), indexes (JSONB) |
| lc_workflow_definitions | 流程定义 | bpmn_xml, config (JSONB) |
| lc_workflow_instances | 流程实例 | variables (JSONB), status |
| lc_users | 用户表 | username, password, status |
| lc_roles | 角色表 | name, code |
| lc_permissions | 权限表 | resource, action |

#### **JSONB 字段应用**

```sql
-- 创建 GIN 索引加速 JSONB 查询
CREATE INDEX idx_page_config ON lc_pages USING GIN (config);

-- JSONB 查询示例
SELECT * FROM lc_pages
WHERE config @> '{"layout": "default"}';

-- JSONB 字段提取
SELECT
  id,
  name,
  config->>'layout' as layout,
  config->'components' as components
FROM lc_pages;

4.2 Elasticsearch 索引设计 ​

索引命名规范 ​

bash
业务数据:business_data_{model_code}
操作日志:audit_logs-{YYYY-MM}
全文搜索:full_text_search

中文分词配置 ​

json
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_max_word_analyzer": {
          "type": "custom",
          "tokenizer": "ik_max_word"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}
```bash

---

## 五、Redis 缓存设计

### 5.1 Key 设计规范

格式:{项目前缀}:{模块}:{业务}:

示例: lc:page:config:1001 - 页面配置 lc:user:token:1001 - 用户 Token lc🔒page:edit:1001 - 页面编辑锁 lc:rate_limit:ip:192.168.1.1 - IP 限流

bash

### 5.2 缓存策略

| 场景 | TTL | 更新策略 |
|------|-----|---------|
| 页面配置 | 1小时 | 更新时删除 |
| 组件定义 | 2小时 | 更新时删除 |
| 用户会话 | 7天 | 登出时删除 |
| 查询结果 | 5分钟 | 定时过期 |
| 分布式锁 | 30秒 | 自动续期 |

---

## 六、安全设计

### 6.1 认证授权

#### **JWT 认证流程**
  1. 用户登录 → 验证账号密码
  2. 生成 JWT Token(包含 UserID、过期时间)
  3. 将 Token 存入 Redis(lc:token:{userID})
  4. 返回 Token 给前端
  5. 前端每次请求携带 Token
  6. 后端验证 Token 并从 Redis 检查有效性
bash

#### **RBAC 权限模型**

用户 → 角色 → 权限 → 资源

示例: 用户(张三) → 角色(编辑) → 权限(页面写权限) → 资源(/api/v1/pages)

bash

### 6.2 数据安全

- **SQL 注入防护:** 参数化查询(GORM 自动处理)
- **XSS 防护:** 前端输出转义
- **CSRF 防护:** Token 验证
- **敏感数据加密:** AES-256 加密存储
- **密码加密:** bcrypt 哈希

---

## 七、性能优化

### 7.1 后端优化

1. **数据库优化**
   - 索引优化(EXPLAIN ANALYZE 分析)
   - 查询优化(避免 N+1、使用 JOIN)
   - 连接池配置(MaxOpenConns: 100)
   - 分页优化(游标分页代替 OFFSET)

2. **缓存优化**
   - 多级缓存(Redis + 本地缓存)
   - 缓存预热
   - 缓存雪崩/击穿/穿透防护

3. **并发优化**
   - Goroutine 池
   - 并发限流
   - 异步任务队列

### 7.2 前端优化

1. **加载优化**
   - 路由懒加载
   - 组件懒加载
   - 图片懒加载
   - CDN 加速

2. **渲染优化**
   - 虚拟滚动(大列表)
   - 防抖/节流
   - 组件缓存(KeepAlive)

3. **打包优化**
   - 代码分割(SplitChunks)
   - Tree Shaking
   - Gzip 压缩

---

## 八、部署架构

### 8.1 Docker 容器化

```yaml
# docker-compose.yml
version: '3.8'

services:
  frontend:
    image: low-code-frontend:latest
    ports:
      - "80:80"

  backend:
    image: low-code-backend:latest
    ports:
      - "8080:8080"
    depends_on:
      - postgres
      - redis
      - elasticsearch

  postgres:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: secret

  redis:
    image: redis:7-alpine

  elasticsearch:
    image: elasticsearch:8.11.0
    environment:
      - discovery.type=single-node

8.2 Kubernetes 部署(生产推荐) ​

yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: low-code-backend
spec:
  replicas: 3
  selector:
    matchLabels:
      app: low-code-backend
  template:
    spec:
      containers:
      - name: backend
        image: low-code-backend:v1.0
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "1000m"
```bash

---

## 九、监控和运维

### 9.1 监控指标

**应用监控:**
- QPS、响应时间、错误率
- Goroutine 数量、内存使用
- 慢查询(>1s)

**基础设施监控:**
- CPU、内存、磁盘使用率
- 数据库连接数、慢查询
- Redis 命中率、内存使用
- ES 集群状态

### 9.2 日志管理

**日志级别:**
- DEBUG:调试信息
- INFO:正常日志
- WARN:警告信息
- ERROR:错误信息

**日志收集:**
- ELK Stack(Elasticsearch + Logstash + Kibana)
- 或 Loki + Grafana(更轻量)

---

## 十、开发规范

### 10.1 代码规范

**后端(Golang):**
- 遵循 Go 官方规范(gofmt、golint)
- 目录结构清晰(分层架构)
- 错误处理规范(error wrapping)
- 注释完整(godoc 格式)

**前端(Vue 3):**
- ESLint + Prettier 代码格式化
- 组件命名规范(PascalCase)
- 类型定义完整(TypeScript)
- 组件拆分合理(单一职责)

### 10.2 Git 工作流

main ─────────●────────●─────────→ (生产) ↑ ↑ develop ─────●───┴────●───┴────●────→ (开发) │ │ │ feature/xxx ●────┘ │ │ hotfix/xxx │ │ release/xxx ●────────┘

bash

---

## 十一、技术难点和解决方案

### 11.1 难点一:动态表结构

**挑战:** 用户自定义的数据模型如何存储和查询?

**方案:**
1. **JSONB 方案:** 使用 PostgreSQL JSONB 字段存储动态数据
   - 优点:灵活、无需迁移
   - 缺点:查询性能较差、索引受限

2. **动态建表方案(推荐):** 根据数据模型动态创建物理表
   - 优点:查询性能好、支持完整索引
   - 缺点:实现复杂、需要迁移管理

3. **混合方案:** 核心字段物理列 + 扩展字段 JSONB

### 11.2 难点二:复杂表达式求值

**挑战:** 如何安全、高效地执行用户自定义表达式?

**方案:**
1. 使用 `govaluate` 或 `expr` 库
2. 表达式沙箱执行(限制函数调用)
3. 预编译优化(缓存编译结果)
4. 超时控制(防止死循环)

### 11.3 难点三:大规模并发

**挑战:** 多用户同时设计页面如何保证性能?

**方案:**
1. Redis 分布式锁(防止编辑冲突)
2. WebSocket 实时同步(协同编辑)
3. 读写分离(主从复制)
4. 缓存优化(多级缓存)

---

## 十二、参考资源

### 12.1 开源项目

- **NocoBase** - 数据库驱动的低代码平台(参考数据模型设计)
- **Appsmith** - 应用构建平台(参考 UI 设计)
- **Budibase** - 业务应用构建(参考流程引擎)
- **Lowcode-Engine** - 阿里低代码引擎(参考设计器)

### 12.2 技术文档

- [Gin 官方文档](https://gin-gonic.com/)
- [GORM 官方文档](https://gorm.io/)
- [Vue 3 官方文档](https://cn.vuejs.org/)
- [Element Plus 文档](https://element-plus.org/)
- [PostgreSQL JSONB 文档](https://www.postgresql.org/docs/current/datatype-json.html)

---

## 附录:关键依赖版本

### 后端依赖(go.mod)

```go
require (
    github.com/gin-gonic/gin v1.9.1
    gorm.io/gorm v1.25.5
    gorm.io/driver/postgres v1.5.4
    gorm.io/datatypes v1.2.0

    github.com/redis/go-redis/v9 v9.3.0
    github.com/elastic/go-elasticsearch/v8 v8.11.0

    github.com/spf13/viper v1.17.0
    go.uber.org/zap v1.26.0

    github.com/golang-jwt/jwt/v5 v5.1.0
    github.com/casbin/casbin/v2 v2.79.0

    github.com/Knetic/govaluate v3.0.0
    github.com/google/uuid v1.5.0
)

前端依赖(package.json) ​

json
{
  "dependencies": {
    "vue": "^3.3.8",
    "vue-router": "^4.2.5",
    "pinia": "^2.1.7",
    "element-plus": "^2.4.4",
    "axios": "^1.6.2",
    "@logicflow/core": "^1.2.20",
    "echarts": "^5.4.3",
    "monaco-editor": "^0.44.0"
  }
}
```bash

---

**文档版本:** v1.0
**编写日期:** 2024-01-01
**维护团队:** 低代码平台开发组

**相关文档:**
- [后端架构详细设计](./低代码平台详细技术方案-后端架构.md)
- [前端架构详细设计](./低代码平台详细技术方案-前端架构.md)