.net - 需要提高 Azure Function App 的吞吐率
问题描述
我的事件触发 Azure 函数应用的当前吞吐率约为 11 条记录/秒(1 个事件有 1 条记录)。它从 Eventhub 获取数据并将其发布到 API 端点。我一直在调整 host.json 设置(maxBatchSize,prefetchCount),但他们没有提高费率。
- 应用程序在 .NET 上运行,因此甚至无法尝试使用 FUNCTIONS_WORKER_PROCESS_COUNT 手动增加工作人员。
- API 端点的限制为 100 条记录/秒。
下面是一些测试结果:
测试 | 领域 | 应用服务计划 | 实例 | 最大批量大小 | 预取计数 | 平均 CPU 使用率 | 数据传输(记录) | 总时间 | 吞吐率(记录/秒) |
---|---|---|---|---|---|---|---|---|---|
1 | 产品 | S1 | 1 | 100 | 200 | 100 | 3281 | 0:18:31 | 2.95 |
2 | 产品 | P2V2 | 1 | 100 | 200 | 11.5 | 34264 | 0:48:57 | 11.67 |
3 | 销售订单 | P1V2 | 2 | 64 | 128 | 11(对于两种情况) | 33816 | 0:49:25 | 11.41 |
在这里感谢您的帮助。
解决方案
增加单个实例的并发性的一种方法是更改 maxConcurrentRequests。 例如,如果您的函数应用具有两个 HTTP 函数并且 maxConcurrentRequests 请求设置为 25,则对任一 HTTP 触发器的请求将计入共享的 25 个并发请求。当该函数应用扩展到 10 个实例时,这十个函数有效地允许 250 个并发请求(10 个实例 * 每个实例 25 个并发请求)。
第二种方法是扩展功能应用程序实例本身。下面是Function App提供的扩容计划表:
推荐阅读
- python - 向 aiohttp WSGI 处理程序添加路由
- scala - 两个流之间的Scala Flink Join不起作用
- android - NativeScript ./gradlew 失败,退出代码为 1
- javascript - 为什么我得到两个橙子和 abc arrys 的相同输出?
- spring - 尽管我使用的是 spring taglib,但在 jsp 中未定义 Spring tag(form : form)。为什么?
- azure - EXE 在本地 Docker 容器中运行,但在 Azure 上
- android - 错误崩溃原因:空指针取消引用 Unity/firebase
- java - 在JAVA中获取树形图中唯一值的所有键
- apache-spark - 如何在spark sql case/when语句中为多个列分配值
- asp.net-core - 通过 ngrok 进行多组织身份验证的 Blazor 应用程序关联失败