【发布时间】:2021-09-23 23:41:07
【问题描述】:
我们正在开发一个多租户应用程序。在架构方面,我们为业务逻辑设计了共享中间层,为数据持久化设计了每个租户一个数据库。也就是说,业务层将与每个租户的数据库服务器建立一组连接(连接池)。这意味着应用程序为每个租户维护单独的连接池。如果我们预计大约有 5000 个租户,那么这个解决方案需要很高的资源利用率(每个租户的应用服务器和数据库服务器之间的连接),这会导致性能问题。
我们已经通过保持公共连接池解决了这个问题。为了维护跨不同数据库的单一连接池,我们创建了一个名为“App-master”的新数据库。现在,我们总是先连接到“App-master”数据库,然后将数据库更改为租户特定的数据库。这解决了我们的连接池问题。
此解决方案与本地数据库服务器完美配合。但它不适用于 Azure Sql,因为它不支持更改数据库。
提前了解如何维护连接池或更好的方法/最佳实践来处理这种多租户场景。
【问题讨论】:
-
池是每个不同的连接字符串。这意味着如果您有 5000 个租户,则池大小为 5000*100 个连接(每个连接字符串池中有 100 个连接)。我想知道你当时谈论的是什么问题。我们维护了几个拥有数千个租户的多租户应用程序,并且没有发现任何与池相关的问题会导致我们实施自定义池。
-
我们在 Azure 中有一个类似的系统,与现有的池连接相比,与数据库的初始连接时间明显慢。
-
快速问:您是直接从云外部连接到数据库,还是(大提示)您使用 Web 服务将连接问题牢牢控制在 Azure 端?
-
@WiktorZychla,感谢您的回复。实际上,我们认为它应该成为我们的瓶颈,所以要小心。所以,你的意思是你已经经历过这样的场景,你没有发现任何问题(SQL Server /所有其他应用服务器)?
-
@SeanCocteau,目前我们正在尝试使用本地开发盒,但最终生产将在 Azure 上进行。
标签: c# azure azure-sql-database connection-pooling multi-tenant