如何查找/解决功能应用吞吐量问题的根源

时间:2019-05-09 14:52:13

标签: azure apachebench http-status-code-429 azure-function-app

我有一个由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是我需要调查的东西?通过捕获更多请求并坚持执行直到功能应用程序可以接受并处理它们,这是否可以增加我的明显吞吐量?

在此先感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

您没有提供太多应用背景信息,但这是您可以改进的几个步骤

  1. 如果您想获得更多控制权,则需要始终使用App Service plan以避免冷启动,因为您对此计划负责,并且不启用自动缩放功能,因此您还需要配置自动缩放功能应用服务计划中的默认设置。

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

  3. 查看限制。使用host.json,您可以进行一周的搜索。

429错误表示该函数正忙于处理您的请求,因此可能在您写入表时未在使用异步和阻塞线程

答案 1 :(得分:0)

功能应用程序可以很好地运行并且可以按需扩展。这可能是因为来自Single IP和Azure的请求可能正在考虑使用DDOS。您可以执行以下操作

AzureDevOps负载测试

您可以使用azure服务之一进行负载测试。我非常确定他们拥有处理IP的更好标准。 Azure DeveOps Load Test

在Azure中配置VM

我通常的方法是天蓝色地配置VM(Windows 10专业版)并使用JMeter进行负载测试。我已经使用此方法进行测试,并且效果很好。您可以提供其中的几个并细分负载。

使用专业的负载测试服务

如果可能,您可以使用Loader.io之类的服务。他们使用复杂的算法来运行负载测试,并配置一堆VM来运行相同的测试。

使用应用洞察

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