我们可以在不受早期专用基础设施的缺点困扰的情况下实现更强的数据隔离。
翻译自 The Past, Present and Future of Multitenancy 。
图片来自 Shutterstock 的 Grand Warszawski
多租户软件与敏捷软件开发、软件即服务(SaaS)和云计算同步出现。要理解现代多租户,我们必须看看现有的实践是如何塑造早期多租户的,并深入研究技术的进步,这意味着我们必须重新思考如何对待它。
让我们看看世纪之交时期是如何构建软件的。你可能每年一两次创建你的应用程序的黄金副本。这些副本会刻录到光盘上,系统管理员和终端用户会用它来安装软件。
对于业务线应用程序,你会使用网络位置而不是光盘,使用检查清单而不是安装向导。
不选择自己托管购买的软件,你可以采购一个应用程序服务提供商来管理它。提供商会为你管理基础架构和安装。这导致了软件供应商代表你提供托管实例的想法,现在我们称之为 SaaS。
一旦同一组织构建并运营软件,它不可避免地发现可以通过在多个客户之间共享软件来降低基础设施和许可成本。
自托管应用的客户可以使用虚拟化来降低软件的运营成本,但 SaaS 提供商可以通过在多个客户之间共享应用实例来进一步降低成本。
下面显示了三种托管模型,以及可以归因于单一租户的非共享成本。
托管模型 | 分享内容 | 非共享成本 |
---|---|---|
专用基础设施 | 无共享 | 电源、机架、网络、服务器、操作系统、应用程序许可证 |
虚拟机 | 共享服务器 | 操作系统、应用程序许可证 |
多租户软件 | 共享应用实例 | 应用程序许可证 |
这种与专用实例的比较理所当然地影响了早期的多租户。多租户的设计会尝试通过在每个租户的用户和数据周围强制执行边界来复制由客户特定的软件安装创建的边界。安全意识强烈的组织所关心的问题会加强这种设计。
尽管很容易预测基础设施成本和节省,但多租户软件的总成本还包括操作复杂性和代码复杂性的无形成本。
配置必须变得更加动态,以支持在单个应用程序实例上为多个租户提供服务,并且必须谨慎管理信息边界。这可能导致新功能的成本增加。
在操作上,虽然要管理的实例较少,但实例必须满足新的扩展需求。当需要在共享数据库中管理特定于租户的数据时,出现了一类新问题。
多租户软件的成本效益分析会更加关注切实可行的成本。例如,与预测与额外的代码复杂性相关的未来成本相比,计算服务器数量和操作系统许可证的数量是一项简单的任务。
自多租户软件出现以来,已经进行了几项直接影响它的技术进步,即容器、部署自动化和基础设施自动化。
随着容器的出现,虚拟化已经发生了变革,它提供了在不需要多个操作系统的情况下进行隔离的能力,而不增加额外的成本。部署自动化消除了手动安装软件和升级的成本,使得部署一千个实例就像部署一个实例一样容易。基础设施自动化也为每个租户提供了专用云基础设施或容器的配备提供了同样的便利。
将这些发展与二十年来的多租户软件架构经验结合起来,需要一种新的方法。经济学已经发生了巨大的变化。
多租户与专用物理或虚拟基础设施之间的旧二分法导致了单一或多租户软件之间的二进制选择。我们必须调整将多租户视为整个系统设计过程的观点。
在这种新方法中,有两个要考虑的维度:共享的层次和组件级别的决策。在过去,我们考虑的是应用程序实例是否是多租户的,现在我们要看每一层,以决定是否应该共享。我们可以将租户特定的数据库与单个应用程序实例组合起来,或者只与租户特定的基础设施自动配置共享代码库和 CI/CD 管道。
同样,我们不会一次性为整个系统做出这个决定,而是为每个组件做出。这使我们能够设计一个具有租户特定实例的系统,这些实例调用共享的多租户服务。如果服务不了解租户,比如无状态服务或其状态不是租户特定的服务,这可能尤其强大。
通过将多租户的视野扩展到软件、基础设施和 CI/CD 管道,可以设计利用现代虚拟化隔离的轻量级租户特定应用程序的系统,并调用可扩展的共享服务。关于应该受保护的租户数据和不属于租户特定数据的数据,可以采取更加周到的方法。
这种新方法意味着我们可以获得更好的系统级结果。我们可以在没有早期专用基础设施的缺点的情况下实现更强大的数据隔离。
尽管早期的多租户是通过共享应用程序和数据库的实例来定义的,但技术进步需要更广泛的视角和更精细的决策方法。在权衡的正确平衡之间,唯一的方法是考虑最广泛的可用选项。
您不应再将租户视为用户和数据的专用隔离实例的模拟。租户是必须受到保护的数据的视图。数据集通常存储在租户的边界之外,用户可以访问多个租户。
除了技术变化外,企业比以往更注重安全性,这可以从自 2005 年以来 ISO 27001 认证的增加中看出。
在关于共享层次的组件级决策中定义了现代多租户。