软件架构
架构学习更新
多租户概念是众多用户共享计算、网络和存储资源,而彼此之间看不到数据。多租户应用程序是为每组用户(所谓的租户)定制的,而整个架构和核心功能保持不变。多租户是软件即服务(SaaS)供应商的典型方法。
多租户应用程序——作者的图片。版权所有
听起来像是一个明智的商业决定?
是的,它确实。资源利用率增加,因此,项目所有权通常更合理。但它不能用于每个应用程序。让我解释一下多租户是如何工作的,它与单租户有何不同,以及何时应用它。
用例
多租户架构最适合以下类型的应用程序:
SaaS(软件即服务)或AaaS(应用程序即服务)
PaaS(平台即服务)
IaaS(基础设施即服务)
对于多个客户端使用相同算法堆栈的所有其他应用程序。主要功能是相同的或模块化的,并且可以根据客户的任何需求进行定制。
多租户与单租户
要选择模范架构,我们必须了解两者的工作原理。
1.单租户
每个用户都会收到专用的计算、网络和存储资源。每个环境都是单独开发和管理的。本质上,此选项不允许任何共享。
2.多租户
此模型支持在一个环境中托管多个客户并重用核心应用程序功能。每个租户都是孤立的,对其他人是不可见的。居民在逻辑上是分开的,而不是物理上的;因此,需要较少的硬件投资。其他好处包括简化的安全支持和更实惠的许可。在许多不同的解决方案上花费的时间/精力更少,意味着将更多的时间/精力投入到核心解决方案上。在这种情况下,整体质量获胜。
多租户和单租户应用程序——作者的图片。版权所有
示例解决方案架构
让我们继续使用一个简单但真实的多租户解决方案。
这里的数据层由单个共享的CloudSQL(MySQL)实例和对象存储组成。客户端(租户)使用组成无服务器业务层的共享云功能堆栈。
GoogleCloud上的无服务器单数据库多租户架构—作者的图片。版权所有
等等……一个数据库?
多租户应用程序中的数据管理
根据存储数据的方式,可能会有不同的多租户数据库解决方案:
1.单库+单模式
=一个数据库模式包含所有租户的数据
在这种情况下,关心租户的数据分离是最重要的。将TenantID或ClientID等数据库索引添加到对租户的行进行分区。
好处:
维护一个数据库很容易(与其他选项相比)
您可以根据需要添加任意数量的新客户(添加就像在表中键入新记录一样简单)。
陷阱:
对于可能需要不同数据使用模式的不同客户而言,灵活性并不大。当非典型客户到达时,需要进行拐杖和修补。
您可能会浪费时间和精力来尝试正确分离权限
备份和恢复可能会带来额外的问题。因为它包含来自其他客户的数据,所以不能轻易删除和重新创建表。必须向上搜索并覆盖所需的行真是让人头疼。
判决:
进行匹配操作的客户的绝佳选择。
2.单库+多模式
在这种情况下,需要多个表来存储来自不同客户端的数据。模式成为包含特定表、过程和权限的“命名空间”。
好处:
Schemas支持DBMS级别的访问共享,所以我们不需要做任何进一步的事情(我们节省了我们的精力和金钱,哈利路亚!)
更少的数据库——更少的硬件资源。又一个胜利!
良好的可扩展性。如果您需要一个新架构,您可以基于另一个架构来构建它。每次,您都可以根据需要对其进行修改。
陷阱:
来自多个客户端的数据保存在一起,因为表是在逻辑上而不是物理上划分的;
备份和恢复都是有问题的。我们有一个数据库,如果某个元素发生故障,一切都可以回滚到以前的状态,这是不可接受的。然后您可能需要合并新旧信息。这简单吗?一点也不,因为它不仅仅是还原。
判决:
对于愿意在共享环境中工作的客户来说,这是一个绝佳的选择。
3.分离数据库
另一种可能的模型是代码和数据在客户端之间(通过通用用户界面和业务逻辑)在概念上(并且可能在物理上)共享。
好处:
一键扩展。要添加新客户端,您只需配置新存储
缩放很简单。您可以支持不同服务器上的客户端数据库
定制。您可以更改每个客户端的设置(甚至将存储移动到不同的DBMS)
简单的备份。即使一个组件发生故障,其他组件也不受影响。
陷阱:
它并不便宜。单个服务器支持的存储量受到限制。你可能需要更多的硬件(比所有东西都放在一个地方要多得多)。请记住,更多硬件=更多管理员、服务器机房空间和电力费用。
再次,它并不便宜。当您的服务器托管许多位置时,总容量大于RAM大小;数据溢出到交换文件中,导致对硬盘驱动器的访问非常缓慢。解决方案是购买额外的服务器。
判决:
对于希望安全高于一切并愿意付款的客户(例如银行),这是最佳选择。
外卖
我希望您已经掌握了有关多租户的足够信息,以便根据您的要求做出正确的选择。
以下是本文的主要内容:
多租户环境托管共享计算、网络和存储资源的隔离用户。
在多租户中运行时,您可以从成本节约、资源利用率提高、可重复使用的数据处理元素、简单的发布管理和更低的维护成本中受益。
另一方面,您应该准备好面对诸如复杂的开发、高发布风险、有限的个性化、脆弱的安全性、较低的性能以及进行更改的复杂性等缺点。
在应用于多租户方案之前请三思。但您可以肯定,在为SaaS、AaaS、PaaS、IaaS和其他应用程序选择它时,核心功能要么对所有用户都相同,要么严格模块化,并且可以轻松地根据典型客户的需求进行定制。
为什么初创公司采用多租户架构?
多租户架构的主要优点是
1-更快的维护:由于多租户应用程序使用应用程序的单个实例,因此所有用户都可以立即进行集中、更改或修复错误。这将减少维护和错误纠正时间,并增加应用程序的可用性。
2-可扩展性使用共享资源将使入门成本非常低,并且可扩展性更容易和更快地应用。
微服务设计的多租户注意事项
许多软件供应商转向软件即服务——SaaS——以实现快速扩展。SaaS支持一种新形式的快速分发并实现规模经济——因为客户共享相同的代码。
客户的分离被称为租赁。或者只是多租户。
虽然多租户构成了一个已知领域,但微服务的新兴用途通常不包括在多租户的设计中。
本文是在处理微服务使用多租户的设计原则时分享一些注意事项。
多租户的数据库策略
如果您不熟悉多租户的不同策略,这里有一个快速指南。
单一数据库,相同的方案。所有租户共享相同的数据库和相同的架构。通常,租户被隔离并由每个表上的TenantId列标识,并具有对租户表的引用约束。在电子商务应用程序中,Order表和Customer表只存在一次,但按列分隔租户。
单一数据库,不同的架构。所有租户共享同一个数据库,但是每个租户都有自己的架构。通常,租户也被隔离并由每个表上的TenantId列标识,并具有对租户表的引用约束。在电子商务应用程序中,Order表和Customer表只存在一次,但按列分隔租户并分隔数据架构。
多数据库。每个租户都将自己的数据库保存在专用数据库中。通过使用连接字符串路由到每个租户,电子商务应用程序将拥有相同模式的多个数据库。这就是多租户的企业战略。
进入多租户微服务
微服务是目前编码行业最热门的话题。
微服务的概念定义
高度可维护和可测试
松耦合
可独立部署
围绕业务能力组织
由一小部分人所有
单数据域
进入本文的主要问题,后一个元素提出了一组新的设计考虑。在微服务设计中,每个服务都处理它拥有的数据域。这是一个设计事实。那么如何处理多租户呢?
在我们的电子商务应用程序示例中,我们将应用程序分解为OrderService和CustomerService。每个人都将通过提供自己的数据域来构成。如果我们应用多租户模式,您会很快发现微服务设计的简单性给结构带来了复杂性。
让我们检查一下:
单一数据库,相同的方案。微服务的设计原则禁止这种方法。这表明每个服务都有一个专用的数据库,该数据库具有相同的架构,但例如由一列分隔。这种方法将限制数据库的数量,并使每个服务的数据域保持隔离。然而,我们无法满足个别要求。
单一数据库,不同的架构。与上述一样,每个服务都有自己的数据域,提供由租户隔离器(通常是列)分隔的不同模式。这也限制了数据库的数量。
多数据库。或者每个租户的数据库是最安全和可扩展的设计。然而,随着微服务原则的引入,您将迎合每个租户、每个服务一个数据库的数据库设计。那是维护和部署的噩梦。
因此,当您开始在现代微服务环境中设计SaaS多租户解决方案时,您需要考虑您的元素。
多租户系统中的公平性
本文着眼于亚马逊采取的一些方法来管理对其系统的API请求,以避免通过实施API速率限制(也称为“限制”或“准入控制”)来避免过载。没有这些保护,系统就会过载当流入系统的流量超过当时的处理规模时。API速率限制使我们能够以不同的方式塑造传入流量,例如优先考虑保持在其计划使用范围内的客户端工作负载,同时将背压施加到无法预测的客户端工作负载。在本文中,我将涵盖从准入控制算法到在生产系统中安全更新配额值的操作注意事项等主题。我还