我们有一个多租户 SaaS 应用程序,即 B2B 上下文。 租户范围从小(100s MB)到非常大的数据大小(100s GB)。 我们当前在 Cosmos DB 中的设置是: 每个域的数据库 每个租户的容器
所以: 数据库命令
我们使用数据库级预配吞吐量,并启用自动驾驶仪。
我们正在研究转向无服务器版本,因为我们已经将它用于另一个应用程序并且运行良好。我们需要考虑一些限制(大小、最大吞吐量等),但最大的限制已经消失:额外的容器是免费的!
这意味着我们现在正在研究两种模型中的一种:
有没有人选择这两种选择中的一种,为什么?您可以分享的任何其他优点/缺点以及我们需要注意的任何限制(除了软限制)?
谢谢!
答案 0 :(得分:2)
我意识到这个问题接近于观点,但在 Cosmos DB 上设计多租户应用程序时,有一些客观的事情需要理解。
首先,每个租户的最低成本取决于提供吞吐量的位置。使用数据库级吞吐量,每个容器的最低成本约为 1 美元/月。但是,DB 级别吞吐量的问题是您无法获得该数据库中容器(租户)的可预测性能。如果您的租户规模不对称,则尤其如此
其次,您使用的设计应基于您拥有对称租户还是非对称租户。你的似乎是不对称的。出于这个原因,您需要一种不同的方法。每个容器的租户不会使用 DB 级别的吞吐量,因为租户之间会有嘈杂的邻居问题。您需要将较大的租户隔离在他们自己的容器中。
第三个考虑因素是成本。 DB 级别吞吐量的每个租户成本 < 1 美元/租户(~400 RU/s = 25 美元/月 / 数据库中具有 DB 级别吞吐量的 25 个容器)。具有容器级吞吐量的每个租户的成本为 25 美元。还有第三个选项,即每个逻辑分区的租户。这里每个租户的边际成本为零。然而,最大大小为 20GB 并且也可能出现相同的嘈杂邻居问题
鉴于所有这些,我的建议是对小租户使用每个逻辑分区的租户,对较大的租户使用每个容器的租户。对于较小的租户,您需要实施某种资源治理以防止嘈杂的邻居问题,但这是任何多租户应用程序所必需的。当租户过大或想要升级时,将它们迁移到自己的容器中,并具有自己的吞吐量。
有一个关于这个主题的演讲值得一看here,其中详细介绍了更多细节。