首页 > 解决方案 > 在 Azure Functions 中管理多租户应用程序的连接 - 防止错误:超出主机阈值

问题描述

Azure 函数在函数应用程序中运行。在消费计划中,函数应用程序在 Azure Web 应用程序沙箱中运行,这对函数代码可以执行的操作施加了一定的限制。最值得注意的是,函数应用程序一次可以打开的外部服务的连接数量是有上限的。连接数限制当前为 300。这意味着函数应用最多可以有 300 个 HttpClient、CloadBlobClient、DocumentClient 和 SqlClient 连接。因此,函数代码应该设计成防止在请求进来时打开过多的连接,否则函数运行时会抛出这个错误:“超出主机阈值”。另一方面,我们不想在每次调用函数时重新实例化昂贵的资源,例如数据库连接。

Microsoft 建议对连接使用静态变量,以减轻此限制:https ://github.com/Azure/azure-functions-host/wiki/Managing-Connections 但是,在典型的多租户应用程序中,不同的可为每个服务分配不同的连接字符串。例如,我们正在使用一个目录,其中包含每个租户的数据库条目和 blob 连接字符串。这意味着对 CloudBlobClient 或单个 SqlClient 使用单个静态变量将不是我们的选择。我们一直在思考一些解决方案。例如,我们可以创建一个包含 300 个静态变量的循环列表来保存连接。但这会产生额外的复杂性并增加我们运行时的大小。

你将如何解决这个问题?您是否知道在典型的多租户应用程序中使用 Azure Functions 时有效处理连接的任何解决方案?

标签: azureconnectionazure-functionssandboxmulti-tenant

解决方案


推荐阅读