azure - 在 Azure 中管理 Multi-Tenancy 存储的最有效方法?

标签 azure azure-storage multi-tenant

我们正在创建一个 Multi-Tenancy 应用程序,该应用程序必须在租户之间隔离数据。每个租户都会保存各种文档,每个文档可以分为几个不同的文档类别。我们计划使用 Azure Blob 存储来存储这些文档。但是,考虑到我们的用户群以及文档数量和每个文档的大小,我们不确定如何使用当前的 Azure 订阅最好地管理存储帐户。

这里有一些需要考虑的数字。拥有 5,000 名用户,每个用户每年有 27,000 个 8Mb 文档,即每年总计 1080TB。每个存储帐户的存储容器最大容量为 500TB。

所以我的问题是,存储这些数据并保持在 Azure 限制范围内的最有效且最具成本效益的方法是什么?

以下是我们考虑的一些事项:

  1. 为每个客户端创建一个存储帐户。这不起作用,因为每个订阅只能有 100 个存储帐户(这将是最理想的解决方案)。

  2. 为每个客户端创建一个 Blob 容器。一个存储帐户最多可以有 500TB,因此这可能会起作用,除非最终我们必须分成其他存储帐户。我不确定如果最终用户在两个帐户中拥有数据,这将如何工作。可能会变得困惑。

也许我们在这里遗漏了一些本质上简单的东西。

更新 目前,我们的想法是使用 Azure 表存储,并为每种文档类型提供一个表。在每个表中,分区键是租户的 ID,行键是文档 ID。每行还包含文档的元数据类型信息,以及链接到 blob 本身的 URI(或其他内容)。

最佳答案

这并不是一个真正的答案,但可以将其视为“深思熟虑的食物”:)。基本上,您的架构应该基于每个存储帐户都有一些 scalability targets 的事实,并且您的设计应该不会超出这些范围,以保持应用程序的存储高可用性。

一些建议:

  • 首先创建多个存储帐户(假设从 10 个开始)。我们称它们为 Pods
  • 每个租户都会获得一个 Pod。您可以随机选择 Pod 存储帐户或使用某些预定义的逻辑。有关 Pod 的信息与租户信息一起存储。
  • 从描述来看,当前您似乎仅将文件信息存储在一张表中。这会给一个表/存储帐户带来很大的压力,恕我直言,这不是一个可扩展的设计。相反,当创建租户时,您将一个 Pod 分配给该租户,然后为每个租户创建一个表,该表将在该表中存储文件信息。这将具有以下好处:1) 您可以很好地隔离每个租户数据,2) 读取请求现在已实现负载平衡,从而使您能够保持在可扩展性目标之内,3) 由于每个租户数据位于单独的表中,因此您的 PartitionKey 变为免费,如果需要,您可以分配一些其他值。

现在开始存储文件:

  • 您可以再次采用 Pod 概念,其中每个租户的文件驻留在该租户的 pod 存储帐户中。
  • 如果您发现此方法存在问题,可以随机选择 pod 存储帐户并将文件放在那里,并将 Blob URL 存储在 Files 表中。
  • 您可以只使用一个 Blob 容器(例如 tenant-files ),也可以为每个租户使用单独的 Blob 容器。
  • 只要为所有租户提供一个 Blob 容器,管理开销就会更小,因为您只需在委托(delegate)新的 pod 时创建此容器即可。但缺点是您无法在逻辑上按租户分隔文件,因此如果您想提供对文件的直接访问(使用共享访问签名),则会出现问题。
  • 通过为每个租户提供单独的 Blob 容器,管理开销会增加,但可以获得很好的逻辑隔离。在这种情况下,当租户加入时,您必须在每个 Pod 存储帐户中为该租户创建容器。同样,当调试新的 Pod 时,您必须确保为系统中的每个租户创建一个 Blob 容器。

希望这能让您了解如何构建解决方案。我们在解决方案中使用其中一些概念(明确使用 Azure 存储作为数据存储)。看看您想出什么样的架构真的很有趣。

关于azure - 在 Azure 中管理 Multi-Tenancy 存储的最有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29190763/

相关文章:

sql-server - 我可以在不直接指定数据库名称的情况下查询数据库属性吗?

azure - 是否可以仅依赖 AZIR 构建从 blob 到本地 SFTP 的 Azure 管道?

ios - 如何将文件(>64M)上传到 Azure Blob 存储[iOS]

azure - 定期发送 Azure 推送通知

php - AzurePHP - 轮询 Azure 队列

azure - 在资源管理器(新门户)中为 Azure Blob 存储设置自定义域

azure - Azure 表服务中是否需要表的概念?

azure - 使用图形 API 从 Multi-Tenancy AD 应用程序获取所有用户

使用 r2dbc 的基于 Multi-Tenancy 模式的应用程序

mysql - 共享租户对象