多租户模式

1、简介

定义

  • 多租户模式:单个产品实例(SaaS)为多个用户提供服务,用户可按需购买使用产品资源,用户数据相互隔离。
  • 租户:
    • 狭义:系统的使用者,即用户。
    • 广义:除了用户,还包括创建的系统、数据等所有与租户有关的资源。

示例:学生管理系统,具备 ABCD 系统功能。

  • 传统模式:
    • 厂商将系统卖给学校。
    • 每个学校部署一套系统,拥有系统的完整资源。
    • 存在多个服务实例,每个实例具有完整功能 ABCD。
  • 多租户模式:
    • 厂商提供 SaaS 化产品。
    • 学校按需购买系统功能,厂商以学校为单位创建租户并分配资源。
    • 存在唯一的服务实例(厂商),每个租户具有特定资源。

2、数据隔离方式

数据库分级:从上往下的包含关系

  • MySQL 服务
  • 数据库
  • Schema
  • 表
  • 字段

常见隔离方式

租户 ID Schema 数据库
共享形式 表 数据库 MySQL 服务
区分方式 租户 ID 字段 每个租户对应一个 Schema 每个租户对应一个数据库实例
前置操作 定义租户 ID 或租户关联表 为每个租户建立 Schema(具有相同的表) 为每个租户建立数据库(具有相同的 Schema 和表)
操作 根据租户 ID 筛选数据 根据租户动态切换数据源,访问相应 Schema 根据租户动态切换数据源,访问相应数据库实例

3、技术要点

3.1、租户管理

以学生管理系统的成绩查询为例,真正的用户是学生,如何查询成绩?

  • 学校即租户:每个学校对应一个租户(共享表,通过租户 ID 隔离)。
    1. 实现:学生表 t_stu 保存学生账号密码。
    2. 执行流程:学生登录系统 → 查 t_student 表校验账号密码 → 登录成功 → 查询成绩。
    3. 失败情况:
      1. 学生转学:两个学校存在相同数据,且登陆时无法指定租户 ID。
      2. 隔离方式:假如是 Schema 隔离或数据库隔离,无法确定数据源。
  • 学生租户:将学生注册为租户(不创建系统),且与学校租户关联。
    1. 实现:租户学生表 t_tenant_stu 保存学生账号密码,关联学生租户 ID 与学校租户 ID。
    2. 执行流程:学生登录系统 → 查租户表校验账号密码 → 登录成功 → 查 t_tenant_stu 表确定学校 → 查询成绩。
  • 特定登录地址:每个学校对应一个租户,且系统登录地址唯一(与租户 ID 绑定)。

3.2、数据路由

根据隔离方式,采用不同的数据路由方式

  1. 租户 ID:在 SQL 查询条件追加 WHERE tenant_id = ? AND stu_id = ?
  2. Schema 或数据库:Spring AOP 根据租户 ID,动态切换数据源。

4、总结

多租户模式 = 多租户技术架构 + 多租户商业模式

  1. 技术架构:
    • 根据用户进行数据隔离,如租户 ID、Schema、数据库级别。
    • SaaS 化,支持按需付费。
  2. 商业模式:将软件系统本身作为服务销售,而不是售卖其它商品。

示例

  • 多租户:阿里云、腾讯云、华为云等平台。支持按需购买平台资源。
  • 非多租户:淘宝。所有用户的功能相同且免费,实际交易的是商品而非系统本身。
posted @ 2022-10-17 18:01  Jaywee  阅读(1183)  评论(0)    收藏  举报

☝

👇