Skip to content

核心概念

作者:唐亚峰 | battcn
字数统计:1.1k 字

学习目标

理解 SaaS、多租户、微服务等核心概念,为后续深入学习打下基础

什么是 SaaS?

SaaS(Software as a Service) 即软件即服务,是一种通过互联网提供软件的模式。

传统软件 vs SaaS

对比项传统软件SaaS 软件
部署方式本地安装云端部署
维护成本用户自行维护服务商维护
更新升级手动升级自动更新
付费模式一次性购买订阅制
访问方式限定设备任意设备

SaaS 的优势

┌─────────────────────────────────────────────────────────┐
│                    SaaS 架构优势                         │
├─────────────────────────────────────────────────────────┤
│  💰 降低成本     │ 无需购买硬件,按需付费               │
│  🚀 快速部署     │ 开箱即用,无需安装配置               │
│  🔄 持续更新     │ 自动获取最新功能                     │
│  📱 多端访问     │ 支持 PC、手机、平板等设备            │
│  🔒 数据安全     │ 专业团队保障数据安全                 │
│  📈 弹性扩展     │ 根据业务需求灵活扩容                 │
└─────────────────────────────────────────────────────────┘

什么是多租户?

多租户(Multi-Tenant) 是 SaaS 的核心架构模式,让多个租户(客户)共享同一套应用程序,同时保证数据隔离。

租户隔离策略

Wemirr Platform 支持三种租户隔离策略:

1. 字段隔离(推荐入门使用)

┌────────────────────────────────────────┐
│            共享数据库                    │
├────────────────────────────────────────┤
│  ID  │ tenant_id │  name  │   data    │
│  1   │    A      │  张三  │   ...     │
│  2   │    A      │  李四  │   ...     │
│  3   │    B      │  王五  │   ...     │
│  4   │    B      │  赵六  │   ...     │
└────────────────────────────────────────┘
通过 tenant_id 字段区分不同租户数据

优点: 简单、成本低、易维护
缺点: 大租户可能影响小租户性能
适用: 中小型租户,年订单量 < 200W

2. Schema 隔离

┌─────────────────────────────────────────┐
│              共享数据库实例               │
├─────────────┬─────────────┬─────────────┤
│  Schema_A   │  Schema_B   │  Schema_C   │
│  ├─ users   │  ├─ users   │  ├─ users   │
│  ├─ orders  │  ├─ orders  │  ├─ orders  │
│  └─ ...     │  └─ ...     │  └─ ...     │
└─────────────┴─────────────┴─────────────┘
每个租户独立 Schema,物理隔离表

优点: 隔离性好、便于备份恢复
缺点: 租户数量受限、跨租户查询复杂
适用: 中型租户,需要较好隔离性

3. 数据源隔离

┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│  Database_A │  │  Database_B │  │  Database_C │
│  (租户 A)   │  │  (租户 B)   │  │  (租户 C)   │
│  ├─ users   │  │  ├─ users   │  │  ├─ users   │
│  ├─ orders  │  │  ├─ orders  │  │  ├─ orders  │
│  └─ ...     │  │  └─ ...     │  │  └─ ...     │
└─────────────┘  └─────────────┘  └─────────────┘
每个租户完全独立的数据库

优点: 完全隔离、性能最优、便于定制
缺点: 成本高、运维复杂
适用: 大型租户,年订单量 > 200W

如何选择?

场景推荐方案
初创企业,快速验证字段隔离
中型企业,平衡成本与隔离Schema 隔离
大型企业,高安全要求数据源隔离
混合场景组合策略

微服务架构

Wemirr Platform 采用 Spring Cloud 微服务架构:

                    ┌─────────────┐
                    │   Nginx     │
                    │  (负载均衡)  │
                    └──────┬──────┘

                    ┌──────▼──────┐
                    │   Gateway   │
                    │  (API网关)   │
                    └──────┬──────┘

         ┌─────────────────┼─────────────────┐
         │                 │                 │
    ┌────▼────┐      ┌────▼────┐      ┌────▼────┐
    │   IAM   │      │  Suite  │      │ Plugin  │
    │ (认证)  │      │ (业务)   │      │ (插件)  │
    └────┬────┘      └────┬────┘      └────┬────┘
         │                 │                 │
         └─────────────────┼─────────────────┘

              ┌────────────┼────────────┐
              │            │            │
         ┌────▼────┐  ┌────▼────┐  ┌────▼────┐
         │  Nacos  │  │  Redis  │  │  MySQL  │
         │(注册中心)│  │ (缓存)  │  │(数据库) │
         └─────────┘  └─────────┘  └─────────┘

核心服务说明

服务端口职责
Gateway9000统一入口、路由转发、限流、鉴权
IAM5001用户认证、授权、租户管理
Suite5002核心业务功能
Plugin按需可插拔的扩展模块

RBAC 权限模型

RBAC(Role-Based Access Control) 基于角色的访问控制:

┌─────────┐      ┌─────────┐      ┌─────────┐
│  用户   │─────▶│  角色   │─────▶│  权限   │
│ (User)  │ 1:N  │ (Role)  │ N:M  │(Permission)│
└─────────┘      └─────────┘      └─────────┘

                       ┌───────────────┼───────────────┐
                       │               │               │
                  ┌────▼────┐    ┌────▼────┐    ┌────▼────┐
                  │  菜单   │    │  按钮   │    │  数据   │
                  │ (Menu)  │    │(Button) │    │ (Data)  │
                  └─────────┘    └─────────┘    └─────────┘

权限层级

  • 菜单权限 - 控制用户能看到哪些菜单
  • 按钮权限 - 控制用户能操作哪些按钮
  • 数据权限 - 控制用户能访问哪些数据(本人、本部门、全部等)

技术栈一览

后端技术栈

技术版本说明
JDK21来自 wemirr-platform-dependencies/pom.xmljava.version
Spring Boot3.5.7来自 wemirr-platform-dependencies/pom.xmlspring-boot.version
Spring Cloud2025.0.0来自 wemirr-platform-dependencies/pom.xmlspring-cloud.version
Spring Cloud Alibaba2025.0.0.0来自 wemirr-platform-dependencies/pom.xmlspring-cloud-alibaba.version
Sa-Token1.44.0来自 wemirr-platform-dependencies/pom.xmlsa-token.version
MyBatis-Plus3.5.15来自 wemirr-platform-dependencies/pom.xmlmybatis-plus.version
MySQL(运行环境)8.0.19来自 附件/docker/docker-compose.ymlmysql:8.0.19
Redis(运行环境)5.0来自 附件/docker/docker-compose.ymlredis:5.0
Nacos(运行环境)2.4.2来自 附件/docker/docker-compose.ymlnacos/nacos-server:2.4.2

前端技术栈

技术版本说明
Vben Admin(Monorepo)5.5.9来自 wemirr-platform-ui/package.jsonversion
Vue3.5.24来自 wemirr-platform-ui/pnpm-lock.yaml(catalog: vue
TypeScript5.9.3来自 wemirr-platform-ui/pnpm-lock.yaml(catalog: typescript
Ant Design Vue4.2.6来自 wemirr-platform-ui/pnpm-workspace.yaml + pnpm-lock.yaml(catalog: ant-design-vue
Vite7.2.2来自 wemirr-platform-ui/pnpm-workspace.yaml + pnpm-lock.yaml(catalog: vite
Pinia3.0.3来自 wemirr-platform-ui/pnpm-workspace.yaml + pnpm-lock.yaml(catalog: pinia

版本说明

为避免“文档版本”和“项目实际依赖”不一致,上述版本来自本地源码:

  • 后端:wemirr-platform-dependencies/pom.xml
  • 前端:wemirr-platform-ui/pnpm-workspace.yamlwemirr-platform-ui/pnpm-lock.yaml

下一步