首页 > 其他分享 >多租户模式

多租户模式

时间:2022-10-17 18:13:12浏览次数:50  
标签:隔离 租户 数据库 模式 学生 ID Schema

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. 商业模式:将软件系统本身作为服务销售,而不是售卖其它商品。

示例

  • 多租户:阿里云、腾讯云、华为云等平台。支持按需购买平台资源。
  • 非多租户:淘宝。所有用户的功能相同且免费,实际交易的是商品而非系统本身。

标签:隔离,租户,数据库,模式,学生,ID,Schema
From: https://www.cnblogs.com/secretmrj/p/16800116.html

相关文章

  • 【设计模式——六原则】
    前言:​在学习设计模式的时候,贯穿二十三个设计模式的始终——设计模式六原则,单一职责原则、开放—封闭原则、依赖倒转原则、迪米特原则、里氏代换原则、合成—聚合复用原则。......
  • 【设计模式之三工厂】
    前言:本文中所讲解的三工厂指的是简单工厂,工厂方法,抽象工厂设计模式,在大话设计模式中,三个工厂最后以三姐妹的身份出现在比赛现场中,本文中将三个工厂联系起来进行学习。内容:......
  • 【设计模式之代理模式】
    前言:今天我们学习的模式为代理模式,见名字如见该模式,代理模式,则提供一个代理,由代理对对象进行访问,暂时先这么理解!通过接下来的学习,大家肯定会对代理模式有一个全面的了解。......
  • 【设计模式之装饰模式】
    前言:装饰模式,属于二十三个设计模式中之一,那么,什么是装饰模式,下面,大家请跟着我一起走进装饰模式,来看看装饰模式:核心:(一)、结构图想知道设计模式吗?那么看了它的UML图,你就一目......
  • 【设计模式之策略模式】
    前言:最近在学习设计模式,简单工厂是接触的第一个模式,后来,就遇到了策略模式,策略模式真是有谋略啊!定义了算法家族,有了算法家族,再难的计算都不在话下了!!!今天,我们一起来学习策略......
  • 12-Go设计模式-观察模式
    观察模式样例代码/*观察者模式观察者模式是用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生......
  • 你还在写垃圾代码?快用 Java 8 重构传统设计模式吧,是真的优雅!
    来源:https://www.cnblogs.com/yjmyzz/p/refactor-design-pattern-using-java8.htmljava8中提供的很多新特性可以用来重构传统设计模式中的写法,下面是一些示例:一、策略模......
  • 10-Go设计模式-命令模式
    命令模式样例代码/*命令模式将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种......
  • Flink集群部署-standalone部署模式
    简单研究下Flink的任务部署。我们在IDEA开发工具中用代码跑Flink的时候,实际是会虚拟出一个小型的Flink集群,当执行execute的时候是将上面的代码作为一个job提交到Fl......
  • Winform 窗体重命名(改名)后,设计模式对窗体的任何修改都无效,执行结果为改名前的窗体(一个
    (如图)1.新建Winform窗体应用程序  2.窗体设计器不关闭,直接改名 3.设计窗体 4.运行程序,结果(窗体空白) 5.解决方案   5.1丢弃设计,直接关闭设计窗体,重新......