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功能时可以有效处理连接的任何解决方案?