多租户应用程序擅长使用一套代码为多个租户提供服务。该体系结构可以使用单个代码源为许多不同的客户端或租户提供服务。构建多租户系统一般都是哪些构建思路呢?
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平台的基础,因此设计之初,应该在此方面多思考和权衡各种方案的利弊,结合公司内的资源选出适合自己的方案,完全没有必要生搬硬套,一步到位!