Skip to content

架构概览

MolanDev Cloud 基于现代化的分层架构设计,核心创新是支持单体/微服务双模部署,一套代码可自由切换。


分层架构

┌─────────────────────────────────────────────────────────┐
│              表示层 (Presentation Layer)                  │
│                                                          │
│            Vue 3 + Element Plus + Pinia                 │
└────────────────────────────┬────────────────────────────┘
                             │ HTTP/JSON
┌────────────────────────────▼────────────────────────────┐
│           接口层 (API Gateway / Controller)               │
│                                                          │
│   Gateway (微服务) / FeignClient自动映射 (单体)            │
└────────────────────────────┬────────────────────────────┘

┌────────────────────────────▼────────────────────────────┐
│                业务层 (Service Layer)                      │
│                                                          │
│  业务逻辑处理 · 事务管理 · 数据验证 · 服务编排             │
└────────────────────────────┬────────────────────────────┘

┌────────────────────────────▼────────────────────────────┐
│            数据访问层 (Repository / Mapper)                │
│                                                          │
│          MyBatis Plus Mapper / Custom SQL               │
└────────────────────────────┬────────────────────────────┘

                   ┌─────────┴─────────┐
                   │                   │
┌──────────────────▼──────┐  ┌─────────▼────────────────┐
│   持久化层 (Storage)     │  │  中间件层 (Middleware)    │
│                         │  │                          │
│  ┌────────┬─────────┐  │  │  ┌──────────┬────────┐  │
│  │ MySQL  │  Redis  │  │  │  │ RabbitMQ │ S3/OSS │  │
│  └────────┴─────────┘  │  │  └──────────┴────────┘  │
└─────────────────────────┘  └──────────────────────────┘

跨层关注点

系统通过框架层自动处理以下横切关注点:

关注点实现方式说明
认证授权Gateway Filter / LocalAuthFilter双模自动适配
权限校验@HasPermission + AOP按钮级权限控制
日志记录@OpLog + AOP声明式操作日志
异常处理@RestControllerAdvice统一异常处理
数据验证Bean Validation参数自动校验
缓存管理Redis + Spring Cache字典/菜单缓存
事务管理@TransactionalService 层事务
分布式锁@GlobalLock / LockUtilsRedis/内存双策略
事件总线EventUtil + @MolanListener本地/MQ 自动切换

双模部署架构

MolanDev Cloud 的核心创新是双模部署:同一套代码可在单体和微服务之间自由切换。

单体模式架构

┌─────────────────────────────────────┐
│    molandev-standalone-service      │
│                                     │
│  ┌─────────────┬──────────────────┐ │
│  │  base       │      ai          │ │
│  │ (系统/文件/  │  (知识库)         │ │
│  │  消息/任务)  │                  │ │
│  └─────────────┴──────────────────┘ │
│         ↓                           │
│    ┌──────────┐                    │
│    │  MySQL   │                    │
│    │  Redis   │                    │
│    └──────────┘                    │
└─────────────────────────────────────┘

特点:
• 接口调用走本地 Bean 注入
• 事件通信走进程内内存
• 支持本地事务
• 资源占用少,运维简单

配置:

yaml
molandev:
  run-mode: single

微服务模式架构

             ┌──────────┐
             │ Gateway  │
             └─────┬────┘
       ┌───────────┼───────────┐
       ↓           ↓           ↓
  ┌─────────┐ ┌─────────┐
  │  base   │ │    ai   │
  └────┬────┘ └────┬────┘
       │           │
       └───────────┼───────────┘

              ┌──────────┐
              │  Nacos   │
              │ RabbitMQ │
              └──────────┘

特点:
• 服务独立部署,可独立扩展
• 接口调用走 HTTP 远程调用
• 事件通信走 RabbitMQ
• 支持服务治理、限流熔断

配置:

yaml
molandev:
  run-mode: cloud

核心实现原理

1. 接口即服务

所有服务间调用都通过 Feign 接口:

java
// 定义 Feign 接口
@FeignClient(name = "${molandev.service-name.molandev-base:molandev-base}", path = "/feign/user")
public interface SysUserApi {
    @GetMapping("/{id}")
    UserDto getById(@PathVariable String id);
}

// 业务代码调用(单体/微服务完全一致)
@Service
public class OrderService {
    @Autowired
    private SysUserApi userApi;  // 注入接口

    public void createOrder(OrderDTO order) {
        UserDto user = userApi.getById(order.getUserId());  // 自动适配
    }
}
  • 单体模式: Feign 接口通过 molandev-rpc 自动转为本地调用
  • 微服务模式: Feign 接口通过 HTTP 远程调用

2. 事件驱动适配

java
// 发布事件(单体/微服务完全一致)
EventUtil.publish(new UserRegisteredEvent(user));

// 监听事件
@MolanListener
public void onUserRegistered(UserRegisteredEvent event) {
    emailService.sendWelcomeEmail(event.getUser().getEmail());
}
  • 单体模式: 本地事件总线(Spring Event)
  • 微服务模式: RabbitMQ 分布式消息

3. 定时任务双模

java
@TaskSchedule("NotifyExpiredUser")
public void execute() {
    // 业务逻辑
}
  • 单体模式: 本地直接调用
  • 微服务模式: HTTP 远程调度
  • 分布式锁: 防止多节点重复执行

详细了解

双模部署的详细实现原理请参考 双模部署文档


数据流转

单体模式数据流

浏览器
  │ HTTP Request

Controller/FeignClient自动映射
  │ 参数验证 + 权限校验

Service 业务层
  │ 业务逻辑 + 事务管理

Mapper 数据层
  │ SQL 执行

MySQL / Redis

返回响应(字典翻译 + 脱敏)

浏览器

微服务模式数据流

浏览器
  │ HTTP Request

Gateway 网关
  │ 路由匹配 + 认证鉴权 + 权限转发

Target Service
  │ Controller → Service → Mapper
  │ (可调用其他服务 Feign 接口)

RabbitMQ (异步事件)

MySQL / Redis / S3

返回响应(经 Gateway)

浏览器

核心组件

1. 认证授权

  • RBAC 模型: 用户-角色-菜单-权限码
  • JWT 认证: Token 自动续期
  • 网关鉴权: 统一认证 + 权限按需转发
  • 按钮权限: 前后端双重校验

详细了解

请参考 认证授权系统

2. 字典管理

  • @Dict 注解: 自动翻译字典值
  • 前端组件: DictSelect 自动加载选项
  • 缓存机制: 内存缓存 + 事件刷新

详细了解

请参考 字典管理

3. 事件总线

  • 统一接口: EventUtil.publish()
  • 自动适配: 单体内存 / 微服务 RabbitMQ
  • 异步处理: 不阻塞业务

详细了解

请参考 消息服务

4. 分布式锁

java
// 编程式
LockUtils.runInLock("ORDER_" + orderId, () -> {
    // 业务逻辑
});

// 注解式
@GlobalLock(key = "'INVENTORY_' + #productId")
public void deductInventory(Long productId) {}
  • 单体模式: 内存锁
  • 微服务模式: Redis 分布式锁

技术栈

后端核心技术

技术版本用途
Spring Boot3.x应用框架
MyBatis Plus3.5.x数据访问
Spring Cloud2025.x微服务(可选)
Redis6.0+缓存/分布式锁
RabbitMQ3.12+消息队列(微服务)
Nacos2.3+服务注册/配置(微服务)

前端核心技术

技术版本用途
Vue3.x前端框架
Vite5.x构建工具
Element PluslatestUI 组件库
Pinialatest状态管理

核心框架

  • MolanDev Framework: 自研双模部署框架
    • molandev-rpc: 接口即服务,自动适配本地/远程
    • molandev-event: 统一事件总线
    • molandev-datasource: 智能多数据源路由
    • molandev-lock: 分布式锁
    • molandev-encrypt: 全链路加密

详细了解

完整的技术栈请参考 后端技术栈前端技术栈


下一步