什么是多租户应用程序?


16

根据在线可用定义,“ 多租户是一种架构,其中软件应用程序的单个实例为多个客户提供服务 ”。这意味着我拥有一家餐馆或学校的网站,并且我提供了访问其他餐馆或学校的权限,以便他们使用我在购买学校管理产品后提供的凭据将其应用程序与自己的数据一起使用。就像我的网站像schoolmanagement.com一样,我为不同的学校客户(例如school1.schoolmanagement.comschool2.schoolmanagement.com)提供了不同的子域,但是这两个子域后面的代码相同。两家学校都有不同的功能或主题,这取决于它们各自的数据库。所以我需要提供schoolmanagement.com进行登录,一旦我的客户基于他们的登录凭据登录,我就会重定向到他们各自的URL,例如school1.schoolmanagement.com

这是我对多租户应用程序的理解。我的理解正确吗?我可以通过任何在线多租户应用程序吗?


1
“我可以通过任何在线多租户应用程序”是什么意思?您是要获取来源,还是尝试以租户身份或以主机身份运行?如您所述,域名托管是大型和小型托管公司的常见多租户示例。Google Apps for Business(或任何当前的品牌名称)也是一种分布广泛的多租户应用。
克里斯蒂安H

1
到目前为止,您走在正确的道路上。多租户关系到数据所有权。数据按tenan(所有者)进行细分。该应用程序使用相同的原因很简单:规模经济。每个tenan的数据存储也可以相同或不同。数据在Tenan之间是不可共享的(或者,据我所知,通常它们不是共享的)。
Laiv

@KristianH感谢您提供的域名托管示例。
娜美·阿里

@Laiv那么,我们可以为每个客户端使用各自独立的配置使用不同的数据库吗?
娜美·阿里

2
是。那是(IMO)最好的方法。但这也是昂贵的。当我说不同的数据库时,它们可能是:a)同一RDBMS中的不同架构或数据库实例,或者b)完全不同的RDBMS。
Laiv

Answers:


10

对,就是那样。但是维基百科的定义还不够笼统。它不解决多层体系结构或诸如SOA或微服务之类的较新形式的体系结构。

多租户软件系统数据隔离有关。一些例子:

  • 具有唯一数据库的多层系统可以是多租户。示例:一个SAP系统由一个数据库后端和几个Web应用程序服务器组成,这些服务器以可伸缩的方式公开Web服务。它是多租户的:您可以在不更改正在运行的软件安装的情况下添加新客户,并且多个客户可以在彼此不了解的情况下使用该系统。数据是完全隔离的(专有技术)。
  • 您的系统由一个或多个运行Web服务的进程组成,这些进程通过不同的域名向不同的客户开放(但仍然是在服务器上运行该进程的相同进程)。数据隔离是通过单独的数据库实现的。它绝对是多租户。
  • 一个微服务系统可以类似地运行几组松散耦合的Web服务,每组都使用一个自己的微数据库。如果需要扩大规模,则可以启动相同微服务的新克隆,它们将通过某些注册功能找到其对等项并自动连接到它们,从而为用户提供单个应用程序的行为。然后有两种情况:
    • 如果当您想为新客户提供服务时,您必须启动一组新的单独的微服务,并组织一个客户的微服务仅连接到与同一客户相关的微服务,那么它就是单租户。
    • 但是如果您可以使用正在运行的实例为新客户提供服务(并且只需要新的微服务来提高性能),那么它就是多租户

1

我想说的是,您的理解基本上是正确的。该应用程序由多个客户共享,每个客户的数据也混合在数据库中。共享相同的代码而不会在同一数据库中混合不同客户的数据可能不会被视为多租户。


2
@NomiAli不,我不会考虑该多租户。这为每个客户消除了一个单独的环境。多租户的好处之一是可以同时为所有客户升级数据库和软件。一个部署,每个人都处于最新版本。您所说的是每个客户都有各自独立的安装。我想您可能有一个共享的代码库,但数据库不同,但这是愚蠢的,因为您需要对数据库更改格外小心,从而使其成本更高,从而破坏了多租户的目的。
安迪

1
@NomiAli每个客户的模式将比每个客户的数据库具有更多的缺点,它的管理更加困难,因为您必须运行相同的脚本才能更改模式名称。同样,这并不是没有可能,但是多租户应用程序的目的是降低软件供应商的成本。您要询问的事情将它们推后备。
安迪

2
因此,如果我保存所有Tenan的孤独数据库崩溃或受到损害...降低成本的地方在哪里?当每个tenan对资源和性能的需求不同时,会发生什么?如果他们想访问数据存储该怎么办?是的 每个tenan不同的数据存储,不同的模式是多租户。在这里,我们想为客户提供的业务策略和服务比实施细节更为重要。多租户是一个功能,一个微分值。离客户需求越近越好。
Laiv


4
您稍微夸大了多数据库方面。多个数据库只是设计决策;您可以让多个数据库共享相同的架构,并使用脚本同时更新它们。所有多租户应用程序必须将每个客户的数据与其他客户分开;通过这样做的机构是一个实现细节,并且取决于像隔离程度的因素所需的等
罗伯特哈维

0

多租户是一种体系结构,其中软件应用程序的单个实例为多个客户提供服务。每个客户称为租户。可以为租户提供自定义应用程序某些部分的功能,例如用户界面(UI)的颜色或业务规则,但他们不能自定义应用程序的代码。

在多租户体系结构中,应用程序的多个实例在共享环境中运行。之所以能够使用这种架构,是因为每个租户在物理上都是集成在一起的,但是在逻辑上却是分开的。这意味着该软件的一个实例将在一台服务器上运行,然后为多个租户服务。这样,多租户体系结构中的软件应用程序可以共享配置,数据,用户管理和其他属性的专用实例。

有关更多信息,请参考https://whatis.techtarget.com/definition/multi-tenancy

与您的情况一样,每个订阅您网站的学校成员都将根据租赁角色和权限得到授权,并可以通过同一应用程序访问各自的数据库。连接到多个数据库的单个应用程序。如果您为每所学校创建一个子域,则它会退回到相同的“单租户”模型。

我希望这回答了你的问题。


1
欢迎来到软件工程!请编辑您的答案以包括对来源的引用; 现在是a 窃案
Glorfindel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.