2

我有一个由 HttpRequest 触发的 Azure 函数应用。函数应用程序读取请求,将它的一个副本扔到存储表中以进行保管,并将另一个副本发送到队列以供系统的另一个元素进一步处理。我有一个运行 ApacheBench 测试的客户端,该测试报告每秒处理大约 148 个请求。这种处理速度不足以满足我们的预期负载。

我对函数式应用程序的理解是,它应该根据需要生成尽可能多的实例来处理发送给它的负载。但是这个函数应用程序的扩展速度可能不够快,因为它每秒只能处理 148 个请求。我需要它每秒处理至少 200 个请求。

不过,我不是 100% 确定问题出在我头上。在分析我的函数应用程序的性能时,我发现了很多 429 错误。我在网上发现的内容,特别是https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits表明这些错误可能是由于发送的请求过多一个IP。一天内的几次 ApacheBench 10K 和 20K 请求负载测试会导致 429 错误吗?

但是,如果不是这样,如果问题出在我的函数应用程序上,我如何才能强制我的函数应用程序更快地生成更多实例?我认为这是每秒获得更多吞吐量的方法。但我在使用功能应用程序方面仍然很陌生,所以如果有不同的方式,我非常欢迎您的意见。

也许公共预览版的高级应用服务计划可以处理更多的吞吐量?我已经考虑过切换到那个并运行一个快速测试,但不确定我是否能够切换回来?

也许 EventHub 是我需要调查的东西?这是否可以通过捕获更多请求并保持它们直到函数应用程序可以接受和处理它们来增加我的明显吞吐量?

提前感谢您提供的任何帮助。

4

2 回答 2

1

您没有提供太多应用程序的上下文,但这是您可以改进的几个步骤

  1. 如果您想要更多控制,您需要使用始终开启的应用服务计划以避免冷启动,您还需要配置自动缩放,因为您在此计划中负责并且默认情况下在应用服务计划中不启用​​自动缩放。

  2. 您的 azure 函数必须完全异步,因为您有外部依赖项,因此您不想在调用它们时阻塞线程。

  3. 看看极限。使用host.json你可以 tweek 它。

429 错误意味着函数正忙于处理您的请求,因此当您写入表时,您可能没有使用异步和阻塞线程

于 2019-05-10T00:38:31.413 回答
0

功能应用程序运行良好,并且可以按其说明进行扩展。这可能是因为来自单一 IP 和 Azure 的请求可能正在考虑 DDOS。您可以执行以下操作

AzureDevOps 负载测试

您可以使用其中一项 azure service 进行负载测试。我很确定他们有更好的处理 IP 的标准。Azure DevOps 负载测试

在 Azure 中预配 VM

我通常做的方式是在 azure 中配置 VM(windows 10 pro)并使用 JMeter 进行负载测试。我已经使用此方法进行了测试,并且效果很好。您可以配置其中的几个并细分负载。

使用专业的负载测试服务

如果可能的话,你可以使用像Loader.io这样的服务。他们使用复杂的算法来运行负载测试并提供一堆虚拟机来运行相同的测试。

使用 Application Insights

如果还没有,您必须使用应用程序洞察力从服务器角度更好地查看。转到实时流,看看它将提供多少实例来处理负载测试。您可以轻松查看可能出现的事件和错误日志并进行调查。您可以深入研究每个相关的依赖项并调查问题。

于 2019-05-10T00:17:52.893 回答