每个帐户一个 cosmosclient

Single cosmosclient per account

使用 Azure Cosmos v3 的 .NET SDK 时,建议使用单例 CosmosClient。 但是,此客户需要帐户详细信息。 在我们的例子中,我们在 Azure 中为每个 (B2B) 租户设置一个单独的数据库帐户(因此物理上是不同的资源)。那么是否仍然建议使用这样的单例,或者每个租户一个实例是否仍然可以?

请记住,租户共享相同的应用程序实例(以及应用程序内存)。

Cosmos 客户端实例是每个帐户的。您不能创建单个实例并将其同时连接到多个帐户。

一般来说,同一应用程序实例中的多租户应用程序设计为每个容器的租户或每个分区键的租户。使用 Cosmos 帐户作为租户边界的应用程序通常仅在租户具有不同的复制区域或具有其他网络或其他需求时才会完成,例如只能在帐户级别管理的安全性。

如果不是这种情况,那么我建议您评估您的租户边界是什么。每个帐户的租户是每个租户基础上的昂贵选项。它还具有最高的操作开销。

最近的 Cosmos DB Conf 有一个非常好的演示文稿,它很好地解释了如何使用 Cosmos DB 设计多租户应用程序。绝对值得一看,From the trenches: Building an awesome multitenant SaaS with Cosmos DB and Azure.

还有另一个较早的演讲也讨论了租户边界的选项,这也非常好。前20分钟是多租户部分,Mission-critical multi-tenant apps with Cosmos DB multi-master