如何在不损失性能的情况下同时运行多个Azure函数实例?(I/O绑定任务)



我正在开发一个Azure函数(队列触发(,该函数可以处理1000个到外部API的请求。我使用asyncioaiohttp同时执行此操作。我的目标是处理100k个请求(100k/1k=100个AF(,并希望同时运行多个Azure函数,这样我就可以减少执行时间。

当只运行一个AF时,一切都很好,过程也很快。当同时尝试2时,速度会减慢。但是,当尝试运行超过3个时,速度会慢得离谱,只按顺序运行所有内容会更有意义。该功能应用程序采用高级计划。

我已将FUNCTIONS_WORKER_PROCESS_COUNT应用程序设置设置为10(最大值(。使用asyncio,我的代码在一个线程中运行,所以我的印象是,如果有更多的AF实例,它们会分散在工作人员身上,而不会影响彼此的性能。我没有正确理解这个概念吗?

最终,我的问题是,在功能应用程序级别上,我能做些什么来允许这种场景?

函数在单独的实例上运行,这应该允许您并行处理100条消息,而不会影响一个实例的CPU消耗(取决于您的托管计划(。

当处理时间随着实例的添加而增加时,则表明存在阻止其他实例处理消息的锁定资源,或者存在无法处理负载的资源。

既然你在使用aiohttp,可能是与你通信的网站在扩展方面存在问题吗?

最新更新