多租户应用程序擅长使用一套代码为多个租户提供服务。该体系结构可以使用单个代码源为许多不同的客户端或租户提供服务。构建多租户系统一般都是哪些构建思路呢?

1、什么是租户

在多租户体系结构中,应用程序的一个实例可用于向一组称为客户或租户的用户提供对应用程序的访问。租户由共享相同数据,配置信息和用户管理信息的一组用户组成。每个租户都有一个特定的身份,并且应用程序应具有足够的能力以对每个租户做出不同的响应。

应该注意的是,在多租户体系结构中,每个租户在物理上是集成的,但在逻辑上是彼此分离的。每个租户甚至可能在物理上与其他人隔离。

租户共享对硬件的访问权限,并能够自定义应用程序的某些部分-这可以是用户界面的外观和风格,甚至可以自定义业务规则,当然租户无法自定义应用程序的源代码。

2、什么是单租户架构?

单租户体系结构是基于通用代码库构建的,该体系结构中的单个应用程序实例可以为单个客户或租户提供服务。与多租户应用程序相反,在单租户应用程序中,每个租户都维护自己的数据库副本和应用程序实例。

单租户应用程序被认为是可靠的,如果因灾难而丢失数据,您可以快速还原数据。如果一个租户发生数据泄露,则其他租户不会受到影响,因为这些租户使用应用程序的单独实例。租户还可以选择何时安装更新。

自定义,设置,维护和升级单租户应用程序在时间和金钱上都可能是昂贵的。尽管单租户应用程序可以访问大量资源并且可以轻松进行自定义,但是对此类应用程序进行定期维护和管理是一项艰巨的任务。因为仅由一个客户为您的应用程序买单,所以这需要付出高昂的成本。

3、什么是多租户架构?

多租户是一种软件体系结构,其中应用程序实例在应用程序的多个租户之间共享,每个租户都拥有自己的账户,出于性能,数据安全性等目的而将其隔离。

多租户是一种以最佳方式利用云环境的理想架构。本质上,它提供了一个共享平台,您可以使用该平台来充分利用云基础架构-它不断发展以与使用该应用程序的所有租户的需求保持同步。

多租户应用程序可以与多个租户共享相同的资源,同时仍是模块化和可扩展的,因此可以提高稳定性并显着降低开发和部署成本。

4、多租户架构:好处

多租户架构的好处是:

  • 轻松入门:对于需要更轻松启动体验或轻松入门且硬件需求较少的应用程序,多租户体系结构是一个理想选择。
  • 维护:易于维护是多租户应用程序的一项优势。
  • 降低成本:与单租户体系结构相反,多租户体系结构由于共享基础结构而相对便宜,有助于以更低的维护成本和更好的计算能力来构建应用程序。
  • 资源使用:与单租户体系结构相比,多租户体系结构可确保更好地利用可用资源。
  • 升级更容易:在多租户应用程序中,升级是无缝的并且相对简单。

5、多租户架构:缺点

多租户体系结构的潜在缺点是:

  • 隔离:您需要隔离租户之间的数据、配置和非功能性要求,例如性能和日志记录。这种隔离带来了挑战,并在应用程序的源代码和数据库架构中引入了额外的复杂性。
  • 复杂性:与单租户应用程序不同,多租户应用程序更复杂,主要是因为您有多个租户,每个租户都具有隔离的数据和配置存储。当多租户应用程序由于数据库不可用而关闭时,使用该应用程序的所有租户都会受到影响。
  • 安全性:尽管其他租户无法访问您的数据,但是您组织的数据存储在单个数据库中,与您组织有关的所有用户都可以访问该数据库,如果后台代码处理不当,有可能会发生窜租户的重大安全问题。

6、多租户应用程序的功能

这些是多租户体系结构的显着特征:

  • 租户数据隔离:租户数据隔离是多租户应用程序最重要的功能之一。这意味着每个租户只能访问其数据。多租户应用程序中的数据在逻辑上和物理上是按每个租户隔离的,一个租户无法访问与另一租户有关的数据。您可能必须为每个租户配置不同的应用程序。此类配置数据通常可能包括身份验证密钥,数据库连接字符串等。
  • 租户解决策略:租户解决策略表示应在哪个租户上下文上执行特定请求。租户解决方案策略应考虑租户可以访问的数据库,要使用的配置等。在多租户应用程序中,您应该制定租户解决方案。

7、多租户数据库

多租户数据库是具有共享模式的共享数据库,其中存储了与多个租户有关的数据。为了隔离与不同租户有关的数据,通常使用租户标识符列。多租户应用程序遵循下一部分讨论的三种数据库体系结构之一。

7.1、多租户数据库的类型

您可以使用逻辑隔离或物理隔离来实现多租户。租户应在逻辑上隔离,但他们在物理上隔离的程度可能有所不同。在实现租户的逻辑隔离时,您还应该注意两个问题,例如数据隔离和跨租户访问。前者涉及隔离特定租户的数据的需求,而后者则意味着属于多个租户一部分的用户对数据的访问。

根据对数据的访问,可以采用三种类型的方法来设计多租户数据库:

  • 多个数据库:每个租户只有一个数据库
  • 每个租户具有单独架构的单个数据库
  • 具有共享架构的单个数据库

7.1.1 多个数据库:每个租户一个数据库

每个租户设计一个数据库,可提供最高级别的数据安全性。数据库在物理上是分开的,并且一个租户无法访问与另一租户有关的数据,因此您也可以更好地隔离数据。这种方法非常灵活,如果需要,您可以轻松地还原租户的数据,但是您必须支付额外的服务器费用。换句话说,您可以更好地隔离数据,但这是以增加复杂性为代价的-管理,维护和可伸缩性的复杂性,因为您必须部署多个数据库。

7.1.2 每个租户具有独立架构的单个数据库

在此模型中,使用了一个数据库,但是有多个模式:每个租户一个。每个租户在数据库内部都有其自己的架构,该架构通常由一组表组成。如果您愿意降低数据库层的运营成本以及服务器基础架构的复杂性,则可以选择这种设计。但是,这种方法的缺点是,您需要花费更多的精力进行数据备份和还原,尤其是在与一个租户有关的数据已损坏的情况下。

7.1.3 具有共享架构的单个数据库

这是一个易于实现的简单设计。您拥有所有租户都使用的共享架构。本质上,所有租户的架构都是相同的,即,所有租户都使用相同的数据库表。您无需为每个租户创建架构或为数据库运行其他服务器,并且通常需要使用租户ID来检索与特定租户有关的数据。但是,缺点是随着时间的流逝,随着越来越多的租户使用该应用程序,查询或更新数据变得越来越困难。

7.2、租户识别

使用多租户体系结构构建的应用程序善于对各种客户或租户做出不同的响应。多租户应用程序可以识别特定请求来自哪个租户。换句话说,租户标识基于可用信息(例如主机名,源IP或自定义HTTP标头)确定涉及哪个租户。每个租户都有一个特定的唯一身份,并且该应用程序的行为在一个租户与另一个租户之间是不同的。此类更改可能包括UI更改,包含配置参数的数据更改以及行为更改。

一个租户的身份不同于另一个租户。两个租户可能在以下一项或多项上有所不同:

  • 数据:每个租户只能访问其自己的数据。每个租户都有其自己的配置数据,即连接字符串,工作流,域名等。
  • 行为:一个租户可能会根据其访问的功能而与另一个租户有不同的行为。
  • 用户界面:外观可能包括样式表,图像等。

7.3、多租户架构:挑战和解决方案

可能的挑战和解决方案:

  • 安全性:多租户应用程序中的安全性至关重要。利用正确的安全算法,并应用最高级别的安全性来保护应用程序及其数据。人为错误可能会损害数据安全性,并且未经授权的人可能会访问应用程序和数据库。还存在黑客的威胁;无论加密算法多么安全,聪明的黑客都可能破坏安全性。制定适当的安全策略来解决此问题,当然不要只依靠一种安全算法。
    一些公司有某些法规限制,可能会阻止在共享基础结构中存储数据。此外,如果未正确配置基础结构,则一个租户的损坏数据可能会散布到其他租户中。

  • 性能:如果一个租户正在使用过多的计算能力,则可能对其他租户的性能产生不利影响。

  • 松散耦合:如果您使用单个代码库来满足多个租户,则您的应用程序代码也应该是松散耦合的并且可以配置。您可能想要决定是否应该拥有特定于客户的源代码分支,或者是在单个代码库中提供这种灵活性。

  • 复杂性:与单租户应用程序相比,多租户应用程序要复杂得多。数据库管理员需要正确的工具和知识来最大化容量,同时降低成本。为了确保您符合服务水平协议,必须对交付和可用性进行适当的监视。

  • 租户解析
    租户解析是一种可以使请求与租户匹配的技术。有几种方法可以做到这一点,当然也不限于此。

  • 主机头

  • 请求路径

  • 请求标头。

8、小结

多租户系统是构建SAAS平台的基础,因此设计之初,应该在此方面多思考和权衡各种方案的利弊,结合公司内的资源选出适合自己的方案,完全没有必要生搬硬套,一步到位!

SAAS平台的基础,构建多租户系统的思考相关推荐

  1. 关于多租户系统的思考

    前言 今天去公园走了十四多公里,想通了很多事情.其实,最近困扰我的主要是这个多租户系统的搭建都需要做什么事情.初步想来,其实很多问题,但是,当我大方向决定使用分数据库来解决的时候,似乎大多数问题都解决 ...

  2. buildroot:Linux平台构建嵌入式Linux系统的框架

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...

  3. Spring Boot构建多租户SaaS平台核心技术指南

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 树下魅狐 来源 | oschina.net/r ...

  4. Spring Boot 构建多租户 SaaS 平台核心技术指南

    1. 概述 笔者从2014年开始接触SaaS(Software as a Service),即多租户(或多承租)软件应用平台:并一直从事相关领域的架构设计及研发工作.机缘巧合,在笔者本科毕业设计时完成 ...

  5. 传统企业IT系统迁移上云-构建公有云PaaS+SaaS平台

    今天谈下对传统企业IT系统迁移上云的进一步思考. 在我前面谈云原生的很多文章里面都谈到一个核心观点,即公有云服务商本身一个关键变化就从IaaS层资源能力提供到PaaS层服务能力提供,整个抽象层次在不断 ...

  6. 实战Spring Boot构建多租户SaaS平台分享(含源代码)

    推荐教程 Java 微服务实践视频教程 - Spring全家桶 Java 微服务实践视频教程 - Spring Boot Java 微服务实践 视频教程- Spring Cloud 1. 概述 笔者从 ...

  7. 关于SaaS平台中应对多租户系统模式的权限设计

    概要 在不同的系统中,其实关于权限设计是没有标准方案的.一般地,依据项目需求进行系统的功能规划设计.组织结构设计以及对应的权限设计等即可.权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是 ...

  8. php宝塔搭建saas平台多租户多应用多终端系统ThinkPHP6框架

    大家好啊,我是测评君,欢迎来到web测评. 有个朋友问我,有没有SaaS相关的系统,最好是php开发的,今天逛了开源社区,刚好看到这套挺不错的,本期就给大家分享这套bwsaas多端SAAS平台运营系统 ...

  9. 新零售SaaS架构:多租户系统架构设计

    什么是多租户? 多租户是SaaS领域的特有产物,在SaaS服务中,租户是指使用SaaS系统的客户,租户不同于用户,例如,B端SaaS产品,用户可能是某个组织下的员工,但整个企业组织是SaaS系统的租户 ...

最新文章

  1. Python:urllib2模块的URLError与HTTPError
  2. Java 中Comparator 的使用,实现集合排序
  3. VC2008中处理CStatic控件的单击STN_CLICKED消息
  4. AUTOSAR从入门到精通100讲(四十二)-Autosar架构下的模块详细设计及代码实现--基于配置的编程方法
  5. EXEJ4 生成的java exe文件更换电脑后出现闪退情况解决办法
  6. zabbix监控mysql死锁
  7. 【笔记】时间片轮转 RR 进程调度算法(Java 实现)
  8. 矩阵乘法运算-JAVA实现
  9. mysql pxc 安装_MYSQL PXC 集群安装
  10. 查询rssi指令_无线接收信号强度(RSSI)那些事儿
  11. Linux C++ 信号量学习 sem_init sem_post sem_wait sem_timedwait
  12. 读取EL1809模块输入信号
  13. 工作中有可能用到的运维小知识《现查现用》
  14. 苹果手机免越狱群控无需硬件即插即用高清投屏控制操作
  15. 一些很漂亮的字符图片
  16. JAVA学习笔记五---函数
  17. 2.8 Multisim应用举例
  18. 一线互联网大厂中高级Android面试真题收录!大厂直通车!
  19. authenticated users: 权限介绍
  20. Windows的EventLog

热门文章

  1. ChatGPT 登上了时代杂志封面,意味着什么?
  2. 37个项目!2020年5G+智慧灯杆项目落地情况大汇总
  3. 在excel筛选出某一列多个重复值
  4. 计算机网络基础知识笔记五--会话层/表示层/应用层
  5. git ssh配置文件 服务器_Linux 环境 搭建Git 服务器,并且修改SSH端口使用
  6. 蓝桥杯练习-调和级数。
  7. new Date()得到时间是东八区时间 存储到mysql里面少了八个小时 原来以为是 java new date 与系统时间相差8小时
  8. 51nod 1629 B君的圆锥
  9. 枚举算法5——填数游戏
  10. win18系统如何打开c语言,控制面板在哪里打开(Windows打开控制面板的方法)