多租户架构

软件设计师的库
内容

  • 介绍
  • 单租户vs多租户
  • 数据库和多租户
  • 真实示例
  • 优点
  • 缺点
  • 用例
  • 概要
1.简介在多租户环境中,多个客户(租户)共享相同的应用程序,它们在相同的操作系统上,相同的硬件上以相同的数据存储机制运行 。客户之间的区别是在应用程序设计期间实现的 。客户不会共享或看到彼此的数据 。与每个用户都有自己专用环境的专用系统相比,这样做的主要动机是降低每位用户的成本 。
多租户架构

文章插图
 
【多租户架构】> In a multi-tenant Application, most of the software stacks — up until the application itself, — are shared by the different tenants.
软件即服务(SaaS)应用程序经常使用多租户 。SaaS的本质归结为以下事实:供应商开发软件,将其放置在服务器上,维持其性能,安全性,客户可用性(通常为复数形式),支付服务器费用和其他费用 。对于客户而言,这种方法更便宜,而对于卖方而言则是值得的(因为它解决了许可和盗版问题,而且最重要的是,可以为多个客户提供一项服务) 。
2.单租户vs多租户2.1单租户该软件和支持基础结构的单个实例为单个客户提供服务 。通过单一租赁,每个客户都有自己的独立数据库和软件实例 。本质上,此选项不会发生共享 。
2.2多租户多租户意味着该软件及其支持基础结构的单个实例为多个客户提供服务 。每个客户共享该软件应用程序,还共享一个数据库 。每个租户的数据都是孤立的,其他租户看不到 。
多租户架构

文章插图
> Single-Tenant and Multi-Tenant architectures comparison
3.数据库和多租户3.1一个通用数据库,一个通用模式一切都存储在一个数据库和公用表中 。要实现此选项,先决条件是引入一个附加的字段TenantID(或您喜欢的CustomerID)以分隔客户之间的信息 。
好处:
  • 当我们将所有信息存储在一组表中时,更易于开发,更新和维护
  • 添加客户就像在客户表中创建新记录一样简单
缺点:
  • 没有灵活性,所有客户端都使用同一组表和列 。出现了非典型客户会导致问题和打补丁 。
  • 浪费人力和精力开发自己的权限分离系统:(
  • 备份和恢复问题 。一个表不能简单地删除和创建,因为它包含其他客户端的数据 。您必须查找所需的行并将其覆盖,这很麻烦 。
解析度:
如果您有很多客户并且缺乏资金/服务器,并且所有硬盘驱动器不会同时消失,那么这是个不错的选择 。
3.2一个通用的数据库,不同的模式来自不同客户端的信息存储在不同的表中 。模式是包含某些资源(例如表)的“命名空间”,可以在其上授予某些权限 。
好处:
  • 由于有了这些架构,访问共享发生在DBMS级别,因此不需要我们进行其他开发(我们节省了工时)
  • 更少的数据库-更少的硬件资源,再次保存
  • 可扩展性不错-在添加客户端时,我们会基于标准架构创建一个新架构,配置访问权限,然后完成 。尽管所有架构都基于标准架构,但由于保留了隔离性,因此它们可能会发生一些更改,因此可以编辑列,表等 。
缺点:
  • 由于表在逻辑上而不是物理上分开,因此不同客户的数据存储在一起 。
  • 备份和恢复存在问题 。因为只有一个数据库,所以如果来自一个客户端的表已折叠,则数据库的简单回滚将把所有客户端的数据返回到过去,这是不可接受的 。在这里,您将需要选择性地回滚以及合并新旧数据 。该过程比仅回滚整个数据库要复杂一些 。
解析度:
如果客户准备好生活在共享环境中,则选择均衡的方案 。
3.3分开的数据库代码在客户端之间共享(使用通用的UI和业务逻辑),数据在逻辑上(可能物理上)在客户端之间共享 。
好处:
  • 简单的可扩展性(添加客户端足以创建和配置新数据库)
  • 轻松扩展-您可以在不同的服务器上分发不同客户端的数据库
  • 个性化-您可以为某些客户端进行个别设置(甚至将数据库放置在另一个DBMS上)
  • 简单备份-如果某个客户端在数据库回滚期间发生故障,则其他客户端不会受到任何影响;
缺点: