选择正确方法在Azure Cosmos DB(MongoDB)中构建多租户架构

6
我在选择在MongoDB和CosmosDB API中为多租户系统创建数据库/集合的适当方法方面有些困惑。
我的应用程序将有500个租户,每个租户的数据可能会增长到3-5GB,最初每个租户可能需要最少的RUs(400 RU/s)。
对于这种用例,我有几个选项可供选择: 1. 分区键(每个租户) 2. 具有共享吞吐量的容器(每个租户) 3. 具有专用吞吐量的容器(每个租户) 4. 数据库账户(每个租户)
考虑性能隔离、成本、可用性和安全性,请告诉我哪个选项适用于上述用例? 由于我对NoSQL和Cosmos跟踪的接触较少,请让我知道您的意见。
1个回答

12

有多种选择,这取决于您特定的租户使用情况。

租户/分区是最便宜的选项,每个租户的边际成本为零。这是为您的应用程序提供“免费层”的绝佳选择,但您也可以将其扩展到付费层供客户使用。最大存储容量为20GB。使用此方案,您需要实施自己的资源管理,以确保客户不会“过热”并消耗与其他用户明显不符的吞吐量。如果您正在构建一个多租户应用程序,资源管理是您应该已经在做的事情。

租户/容器的成本更高,标准模式下的最低RU为400 RU/s。自动缩放可以降至100 RU/s。当您有非常大且需要与前一层中的其他租户隔离的租户时,这是理想的选择。自动缩放还可以帮助确保成本最低。

租户/账户的边际成本与租户/容器相同。如果您的客户有GDPR要求,阻止或要求复制到特定的Azure区域,这将非常有用。账户级别还有许多其他功能,例如备份/恢复,这也使其成为某些租户的好选择。

请注意,我不建议租户/容器使用共享的数据库吞吐量。原因是,使用这种方案时,所有容器共享相同的吞吐量,这与租户/分区所获得的吞吐量相同,但共享的数据库吞吐量的性能无法预测,并且每个数据库限制为25个容器,使其成为一个糟糕的选择。
另外值得一提的是,还有一种新的MongoDB vCore服务,它是单实例的。这基本上提供了与原生MongoDB相同的体验,可能是您的正确选择。
最后,对于您的应用程序,您需要实现一种机制来将客户从一个层级迁移到另一个层级。当然,您还需要某种类型的身份验证和授权机制。Cosmos DB支持Azure AD,但如果您的租户拥有自己的Azure AD租户,您可以决定将Cosmos与AAD隔离开来。
附注:如果您正在使用Cosmos DB构建新的服务,我建议使用我们的核心(NoSQL)API而不是MongoDB。这是我们的本地服务,您将获得最佳性能和功能。我们的MongoDB API是为那些希望迁移并想要完全托管的MongoDB体验的客户而设计的最佳选择。
希望这对您有所帮助。

3
一个安全的链接到“使用Cosmos DB多主机进行任务关键型多租户应用程序的深入研究” https://azure.microsoft.com/en-us/resources/videos/build-2019-deep-dive-mission-critical-multi-tenant-apps-with-cosmos-db-multi-master/ - Ed of the Mountain

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