azure - 在 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 时有效处理连接的任何解决方案?
解决方案
推荐阅读
- java - 为什么设置杰克逊不接受空列表为空?
- java - 使用 JoiObject 映射器时的问题
- javascript - 围绕对象绘制区域(不是边界框)的一组对象绘制轮廓
- javascript - 如何在此滑块中的列表项之间获得相等的空格?
- java - 为什么arraylist的大小为0,即使它已满
- vega-lite - 如何在 Vega-Lite 中向数据集添加额外字段
- java - 如何在java中的一行中将APIException消息包装在数组中
- c++ - C ++我如何覆盖类中的 << 运算符
- python - 如何使用 SQLAlchemy 和 SQLite3 存储字典
- laravel - Laravel 7.x 在监听器中使用构造变量调用控制器方法