如何在云计算中实现多租户 ?


什么是多租户? 多租户允许服务的每个部分(即每个微服务)迎合多个客户,而无需为每个客户部署单独的实例。
为了让 SaaS 解决方案能够以经济的方式扩展、满足客户需求并具有弹性(即云资源的成本效益),它必须支持多租户。
多租户架构提供了许多重要且通常必不可少的功能:

  • 允许应用程序同时为多个客户提供服务,同时共享底层基础设施和服务
  • 安全合规的访问分离
  • 负载均衡和扩展

多租户的两层
归根结底,多租户一旦理解就很容易,它基本上只需要两件事:应用程序级别的访问控制和管理数据模式。
让我们把它分解成两个平面:

  • 数据平面是关于您如何传输、存储和管理孤立的数据(即底层基础设施如何避免混淆不同租户的数据)。数据平面的多租户通常作为数据层上的分区实现——例如,数据存储模式(如何将其保存在数据库中)和主题(例如、Kafka 主题)、标签、域、套接字和/或端口,用于传输中的数据。


具有简单的基于列的租户分离的数据库表示例

  • 应用程序平面是关于您如何在逻辑层中接收上下文和访问,即为不同的租户使用相同的代码。授权是应用程序平面内实现多租户的组件。

实现多租户
授权层是从单租户应用程序安全升级到多租户应用程序的最快、最可靠的方法。此外,授权层可以通过跨所有相关服务应用策略来实现分离,而无需更改服务本身。
选择正确的策略模型可以进一步简化这种过渡,例如 RBAC + Tenancy、ReBAC + Hierarchy(租户成为根级关系)或普通 ABAC(以租户作为属性)等经典模型。
好处是我们不需要自己实现多租户授权,而是可以享受现成的开源工具和服务。

使用 OPA + OPAL(开源)实现多租户
开源是开始实施多租户授权层的绝佳选择。虽然有多种选择,但开放策略代理 (OPA) 是最有前途的。 OPA 充当授权微服务,我们可以将其添加到我们的应用程序中,并使用其专有的Rego 语言编写的规则来强制访问。
OPA 与 OPAL(开放策略管理层)相结合,使我们能够大规模地管理我们的授权层,使用 Pub/Sub 主题使我们的代理与策略(Rego 代码)和数据(JSON 文档)保持同步。例如,主题可以是我们的租户名称或 ID,允许我们将代理与每个租户的更改同步。

总结一下——
多租户允许我们的应用程序迎合多个客户,而无需为每个客户部署单独的实例。Gist 中的多租户实施包括两个层面:数据和应用程序。实现多租户的最佳方法之一是创建一个授权层,该层可以实现分离,而无需更改服务本身。尽管您可以构建自己的授权层,但也有一些开源选项(例如 OPA + OPAL)允许您在应用程序中实现一个 - 将关键转变为多租户更容易获得。