何谓多租户模式 ?

原文:何谓多租户模式 ?

一、什么是多租户模式

多租户模式的定义:单个产品实例为多个用户提供服务,同时用户可按需购买使用产品资源,用户数据相互隔离。

定义里的用户即租户,租户狭义上理解就是使用系统的人。广义上来说还应该包括创建的系统、数据等一切与当前租户有关的系统资源。

二、举个栗子

2.1 传统模式

假设我们有一个学生管理系统,有课程查询、成绩查询两个功能,每个学生都有账号可以登陆,使用系统中的这两个功能。然后我们把这个系统卖给很多个学校去使用,这时候需要给每个学校去部署一套系统。

2.2 多租户模式

还是上面的系统,结合第一章节的定义,我们看多租户模式下的系统架构,这时候我们只有一个学生管理系统实例,每个学校使用的时候首先以学校为单位进行租户创建,然后可以按需购买系统功能,比如只需要成绩查询,这里的每个学校就是一个租户。

三、几种数据隔离模式

3.1 共享数据表,租户ID隔离

这种模式也是我们平日里系统隔离用户使用的模式,既在表中加一个用户ID字段,多租户这里就是在表中多加一个租户ID字段进行数据区分,登陆哪个租户就通过ID查询到对应租户的数据。拿成绩表的查询SQL举例就是:

select * from t_score where tenantid = ‘租户的ID‘ 

3.2 共享数据库,Schema隔离

该模式就是共享一个数据库实例,然后根据租户建立多个Schema,以Mysql数据库为例,就是建立多个Mysql用户,每个Mysql用户下都有完整的系统表。这里在系统开发时就需要根据租户动态进行数据源切换,获取对应租户的Schema。

3.3 独立数据库

该模式就是完全独立数据库实例,还以Mysql数据库为例,就是装有很多个Mysql服务,每个租户对应一个实例 ,每个实例下具有相同的Schema和表 。这里也需要在系统开发时根据租户动态进行数据源切换,获取对应租户的数据库实例。

四、实现多租户系统的几个关键点

将一个传统模式的系统,改成多租户架构,大的方面来说,只需要做好这两点即可实现,也是最关键的两点。

4.1 租户管理

上面3.1 给了一个SQL,这个SQL在实际开发时,会发现是不可用的,满足不了需求,为什么呢?回到上面的学生管理系统,想想看,学校管理员购买了一个租户系统,而具体使用系统的人是学生,是学生在查成绩,先想一个问题,学生的数据从哪来?

(1)学校管理员添加

也就是学校管理员创建了租户系统后,在后台通过学生添加功能进行学生信息录入,这不就有了学生信息了,也容易关联上租户ID,看着好像没有问题,我们来捋一下执行过程。

学生访问系统 -> 输入账号密码,点登陆后 -> 3.1 模式因为数据源是一个,所以直接连上查t_student表 -> 对比用户名、密码 - > 找到且密码正确即认为登陆成功。

例外情况1:假如学生张三由学校A转到了学校B,这时候学校A的租户和学校B的租户都有了张三的信息,这时候有两条数据,怎么比对?这时候就不对了,租户ID还无法确定。这时候就需要下面的两种方案。

例外情况2:假如使用的是3.2 或 3.3 的数据隔离模式,相当于有多个数据源,这时候登陆时连接哪一个数据源查?这时候也就不对了。租户ID还无法确定。这时候同样需要下面的两种方案。

(2)学生注册为租户

方式一:学校想添加学生A,可以输入学生A的邮箱地址,发送邀请,学生A收到邮件邀请,登陆平台注册为租户(不创建系统),注册后自动进入发送邀请学校的学生库。

方式二:学生A直接登陆平台注册为租户,学生A将注册信息提供给学校管理员,学校管理员添加到学生库。

存储租户的租户表本身是共享的。然后需要 「租户学生表」 (创建系统的租户ID,学生租户ID)

这时候登陆并查询成绩流程就是:学生输入用户名、密码 -> 查询租户表 -> 登陆成功 -> 查询租户学生表 -> 选择对应的租户学校 -> 进入租户系统首页 -> 查询成绩

(3)特定登陆地址

即给每个租户购买系统后,生成特定独有的登陆地址,带有学校的租户ID,然后将登陆地址共享给学生即可。这也可以解决租户ID无法确定的问题。而且无需学生注册为租户。

4.2 数据路由

数据路由是数据隔离后的关键点,3.1 模式下即实现SQL的包装,做一层AOP,查询的时候在原来的SQL上附加

 where tenantid = ‘‘ and studentid = ‘‘ 

3.2、3.3 则需要根据租户ID动态切换数据源,代码层面即获取不同的Connection,实现细节限于篇幅,此处不展开了。

五、总结

其实如果抛开商业模式来说,淘宝、京东包括我们常见的系统从技术架构上看都可以算是一种多租户系统,为什么?

因为首先是单实例可以支持多用户的,其次数据是可以根据用户ID隔离的(同第三章节「共享数据表,租户ID隔离」 模式)。

从整体架构上看又不是,为什么?首先不满足的是系统功能不是按需付费,像淘宝每个会员进去功能都是一样的,不能按需挑选功能,你说我不要订单功能,可能吗?显然不可能,你要不要订单功能就在那。另外功能免费。

还有就是商业模式的问题,不是将软件本身作为服务销售,还拿淘宝来说,它售卖的是淘宝上的商品,而不是淘宝软件本身的功能。所以模式上不是SAAS,严格上就不算多租户系统。

最后给大家一个公式,完整的多租户模式 = 多租户商业模式 + 多租户技术架构。

PS  :可关注「风象南讲全栈」公众号,有机会成为作者微信私人好友

原文地址:https://www.cnblogs.com/lonelyxmas/p/10404477.html

时间: 2024-08-14 02:16:01

何谓多租户模式 ?的相关文章

SaaS多租户模式数据存储方案比较

云计算多租户几乎用于所有软件即服务 (Software as a Service, SaaS) 应用程序,因为计算资源是可伸缩的,而且这些资源的分配由实际使用决定.话虽如此,用户可以通过 Internet 访问多种类型的 SaaS 应用程序,从小的基于 Internet 的小部件到大型企业软件应用程序.根据存储在企业网络之外的软件供应商的基础架构上的数据不同,安全需求也在不断增长.应用程序需要多租户是有许多原因的,其中最明显的原因就是成本:在大多数情况下,为每个客户增加几个服务器和一个数据库是远

SaaS多租户模式数据存储方案

  云计算多租户几乎用于所有软件即服务 (Software as a Service, SaaS) 应用程序,因为计算资源是可伸缩的,而且这些资源的分配由实际使用决定.话虽如此,用户可以通过 Internet 访问多种类型的 SaaS 应用程序,从小的基于 Internet 的小部件到大型企业软件应用程序.根据存储在企业网络之外的软件供应商的基础架构上的数据不同,安全需求也在不断增长.应用程序需要多租户是有许多原因的,其中最明显的原因就是成本:在大多数情况下,为每个客户增加几个服务器和一个数据库

近乎产品MVC架构介绍-多租户模式

近乎产品下载地址:http://www.jinhusns.com

ABP Zero 多租户管理

ABPZero - 多租户管理 启用多租户 ASP.NET Boilerplate和module-zero可以运行多租户或单租户模式.多租户默认为禁用.我们可以在我们的模块PreInitialize方法启用它,使之如下所示:[DependsOn(typeof(AbpZeroCoreModule))]public class MyCoreModule : AbpModule{    public override void PreInitialize()    {        Configura

SharePoint 2013 多租户(一)简介

多租户(multi-tenancy)简介 我这里要介绍给大家的是SharePoint 2013中的多租户概念,那什么是多租户呢?应用多租户模式有什么意义和使用场景呢?我这里就为大家揭开这个神秘的面纱. 多租户:是指能够管理网站数据以及共享服务或软件并对其进行分区,以便容纳多个租户.这与运行服务的多个实例或设置单独硬件相对.在 Microsoft 产品和技术中,服务多租户可创建服务器场资源最大化的托管环境.在了解托管环境之前,必须了解服务体系结构. 初学SharePoint的工程师很少遇到使用多租

运营商发展公有云的五种模式--【软件和信息服务】2015.04

这两年公有云发展的如火如荼,运营商受到OTT的打压,自然也不甘落后.虽然发展公有云的形式各异,但运营商发展公有云有五种常见模式. 1)自研模式 自研模式是最高大上的模式,也是所有开源组织最热衷的模式,既然云操作系统.云安全.SDN.NFV等都提供了开源选择,运营商作为高大上的用户,当然很多人想到就是自研.比如现今如日中天的OpenStack.Xen等都为运营商开发自己的云平台提供了很好的基础,Google.阿里云等都为运营商树立了很好的榜样.并且也确实有运营商基于这种模式在运行,包括Verizo

OpenStack 企业私有云的若干需求(3):多租户和租户间隔离(multi-tenancy and isolation)

本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云(Hybrid cloud)支持 主流硬件支持和云快速交付 大规模扩展性支持 商业生态环境(包括CDN 和商业SDN控制器)支持 独立的服务,包括培训.运维等 向上扩展性(PaaS 和 SaaS 等支撑) 裸金属(Bare metal)支持 企业IT环境支持 1. 基本概念 1.1 用户

JeeSite 4.x SAAS 多租户技术设计方案

SaaS 是 Software-as-a-Service(软件即服务)的简称,从技术角度上可称之为 "多租户技术或称多重租赁技术".它与 "按需软件.应用服务提供商.托管软件" 所具有相似的含义.它是一种通过互联网提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务.用户不用再购买软件,而改用向提供商租用基于Web的软件,来管

多租户SaaS的数据库设计模式

前言 在设计多租户SaaS应用程序时,您必须仔细选择最适合您应用程序需求的租户模型.租户模型确定每个租户的数据如何映射到存储.您选择的租户模式会影响应用程序设计和管理.以后切换到另一个模型有时代价昂贵. 关于可选择的租户模型的讨论如下. A,怎么选择一个合适的租户模型 一般来说,租赁模式不会影响应用程序的功能,但它可能会影响整体解决方案的其他方面.以下标准用于评估每个模型: 可扩展性(Scalability) 租户的数量级 每个租户的存储级别 整体存储 工作负载 租户隔离性(Tenant iso