Azure DocumentDB 多租户架构

4

在预览阶段,我将DocumentDB引入了一个多租户系统。我的计划是为每个注册的租户,在DocumentDB账户下生成一个新的数据库。大部分代码已经就绪,测试进展非常顺利。

由于DocumentDB已正式发布且文档已经最终确定,我了解到每个DocumentDB账户的数据库限制为100个,这让我停下来重新考虑我的架构。

我希望保持我的租户隔离,以便删除账户变得容易,并且组织起来非常干净。租户之间的数据不需要相互作用,因此保持分离不会成为问题。

我的问题:

由于我想使其扩展到数万甚至数十万个租户,是否由于DocumentDB的限制和/或成本,我需要考虑一个不同的架构?

这是否意味着我需要在多个DocumentDB账户中分片每100个账户?

根据微软的说法,100个数据库的限制只是一个可以根据请求进行扩展的软限制,但如果需要,它是否可以增加到100,000+?如果我收到超出预期的账户注册并达到生产限制,可能会失去客户,怎么办?

这种限制是否存在是为了阻止开发人员以这种方式对租户进行分区,这是出于一些我应该考虑的充分理由?


这篇博客文章是否回答了你的问题:使用Azure DocumentDB扩展多租户应用程序 - user272735
1个回答

4
当涉及到分区/分片租户数据时,没有一种适合所有情况的答案。通常,如何分区数据取决于应用程序的查询模式以及每个租户的资源需求(包括存储和吞吐量)。只需记住,集合是DocumentDB事务和查询的边界单位。
请查看上面评论中用户272735提到的博客文章:使用Azure DocumentDB扩展多租户应用程序。这是一篇很棒的文章。
如果您需要针对特定场景或数据库/集合限制放宽的1:1指导,请随时通过andrl {at} microsoft.com与我联系。

1
我仔细查看了我的Azure账单,因为DocumentDB已经GA。看起来,每个S1层上的集合每月将收取大约25美元的费用。因此,由于成本原因,我将不得不完全重新考虑我的分区方案,并在同一集合中维护多个帐户的文档。如果这是真的,这确实会妨碍我认为我将拥有的DocumentDB的灵活性,甚至可能让我重新考虑使用它。我的假设正确吗?您对此事有何进一步指导? - INNVTV
1
在思考更新我的情景时:如果我需要删除一个租户的所有数据,现在是否需要查询所有相关材料,对结果进行分页,并逐个删除每个文档?我的原始架构使得仅通过数据库删除变得非常容易,但每个租户每月25美元是不可能的。对于管理这个问题有什么建议吗? - INNVTV
  1. 你说得对,定价模型是按集合计算的。我建议将租户分组到集合中以节省成本;您可以使用租户ID标记每个文档。您可以执行类似于hash(Tenant)%NumCollections的操作,或在应用程序中手动分配租户-集合映射。如果您给我更多细节,我可以帮助您找到自然的分区方案(例如地理位置)。
  2. 我今年不会参加 //BUILD/,但我的几位同事会去。我可以让你和他们联系。
  3. 给我发封电子邮件好吗?看起来我们已经达到了评论字符限制。
- Andrew Liu
谢谢Andrew,我刚刚给你发送了一封电子邮件,并将此问题标记为已回答。非常感谢你的指导! - INNVTV
@aliuy,我想给我的用户选择是他们想要独立还是在共享数据库中。对于隔离的用户,我该如何处理冗余的“TenantID”列? - Shimmy Weitzhandler
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接