Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 如何发现/解决功能源应用程序吞吐量问题_Azure_Apachebench_Http Status Code 429_Azure Function App - Fatal编程技术网

Azure 如何发现/解决功能源应用程序吞吐量问题

Azure 如何发现/解决功能源应用程序吞吐量问题,azure,apachebench,http-status-code-429,azure-function-app,Azure,Apachebench,Http Status Code 429,Azure Function App,我有一个由HttpRequest触发的Azure函数应用程序。函数应用程序读取请求,将请求的一个副本放入存储表中进行安全保存,并将另一个副本发送到队列,以便系统的另一个元素进行进一步处理。我有一个客户端运行ApacheBench测试,该测试报告每秒处理大约148个请求。这种处理速度不足以满足我们的预期负载 我对函数应用程序的理解是,它应该产生尽可能多的实例来处理发送给它的负载。但这个功能应用程序的扩展速度可能不够快,因为它每秒只能处理148个请求。我需要它每秒至少处理200个请求 不过,我不能百

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

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

不过,我不能百分之百确定问题出在我这边。在分析我的函数应用程序的性能时,我发现了很多429个错误。特别是,我在网上发现的情况表明,这些错误可能是由于从单个IP发送的请求太多所致。在给定的一天内,几个ApacheBench 10K和20K请求负载测试是否会导致429错误

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

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

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


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

功能应用程序工作得很好,并且可以按照它所说的进行扩展。这可能是因为来自单一IP和Azure的请求可能会考虑使用DDOS。您可以执行以下操作

AzureDevOps负载测试

您可以使用azure服务之一加载测试。我非常肯定他们有更好的处理IP的标准

在Azure中配置虚拟机

我通常的做法是在azure中配置VM(Windows10Pro)并使用JMeter加载测试。我用这种方法进行测试,效果很好。您可以提供其中的两个并细分负载

使用专业的负载测试服务

如果可能,您可以使用以下服务:。他们使用复杂的算法来运行负载测试,并提供一组虚拟机来运行相同的测试

使用应用程序洞察力


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

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

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

  • azure函数必须完全异步,因为您有外部依赖项,所以在调用它们时不希望阻止线程

  • 看看极限。你可以用它来打发时间


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

    也使用函数v2或v1?我使用的是v2。但是昨晚我发现了一些关于maxOutstandingRequest限制的问题,这让我觉得回到v1可能会解决这个问题。不要转到v1,解决你的问题:)问题不在于v2I,我不确定要提供多少。函数本身除了向表和队列写入数据外,实际上什么也不做。不过,我肯定会考虑确保它是完全异步的。非常感谢你的帮助@Denise然后发布您的代码,我认为问题在于async和plan。如果您使用的是sync,通常会写入blob,队列将需要一些时间,如果您阻塞,那么它将解释为什么它会如此缓慢!实际上,根据您的第一条评论,我开始研究代码的异步性。我所拥有的我已经抄到下面了。但我刚刚发现,除了ICollector(您可以在下面看到我用来引用表和队列的内容)之外,还有一个IAsyncCollector。似乎如果我使用该对象类型和AddAsync方法(即outTable.AddAsync(thisPayload,CancellationToken CancellationToken=default(CancellationToken));),那么可能就是这样。所以谢谢你让我走这条路!!:-)看来评论篇幅有限。。。因此,我将只包括签名和添加到表和队列中的两行代码:public static async Task Run(HttpRequest req、ICollector outTable、ICollector outQueue、ILogger log)//获取请求主体,创建所需的两个guid和字符串//构建thisPayload和内容JSON outTable.add(thisPayload);outQueue.Add(Content);无法将其格式化,因此我不知道它是否会有帮助。但非常感谢您将我发送到这条感觉正确的路径。谢谢!谢谢!我想知道这是否是问题的一部分。谢谢您的测试建议。