Azure Functions - 限制并行执行
Posted
技术标签:
【中文标题】Azure Functions - 限制并行执行【英文标题】:Azure Functions - Limiting parallel execution 【发布时间】:2017-10-30 15:47:54 【问题描述】:是否可以限制并行运行的函数的最大数量?
我阅读了文档并发现了这个:
当多个触发事件发生的速度快于单线程函数运行时处理它们的速度时,运行时可能会并行调用函数多次。
如果函数应用正在使用消费托管计划,则函数应用可以自动扩展。函数应用的每个实例,无论应用在消费托管计划还是常规应用服务托管计划上运行,都可能使用多个线程并行处理并发函数调用。
每个函数应用实例中的最大并发函数调用数取决于正在使用的触发器类型以及函数应用中其他函数使用的资源。
https://docs.microsoft.com/en-gb/azure/azure-functions/functions-reference#parallel-execution
我在具有事件中心输入绑定的应用服务计划中使用函数,并且我的函数应用中只有一个函数。如果我不能限制它,有谁知道这种设置的最大并发函数调用数是多少?
【问题讨论】:
【参考方案1】:无法为事件中心触发的函数指定最大并发数,但您可以控制批处理大小和提取选项,如 described here。
最大并发调用数也可能因您的工作负载和资源利用率而异。
如果需要并发限制,这是(目前)您需要处理的事情,以下帖子讨论了一些您可能会觉得有用的模式:
Throttling Azure Storage Queue processing in Azure Function App
Limiting the number of concurrent jobs on Azure Functions queue
【讨论】:
感谢法比奥!是否有计划加入此类功能? 是的。这绝对是我们希望在未来作为产品的一部分来解决的问题。目前我还没有 ETA,但目前正在进行大量工作以实现这一目标。 @FabioCavalcante 是否有关于 2020 年正在进行的工作的更新? (我会继续搜索,但这仍然是谷歌提出的第一个热门)【参考方案2】:仅供参考,我在搜索节流时遇到了这里。您可以在函数上使用[Singleton]
属性,确保一次只执行一次。也许不是您真正想要的以及一种非常严格的节流方式,但它仍然是一种选择。
https://docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to#singleton-attribute
【讨论】:
很高兴找到安德烈。谢谢分享! 链接失效了吗?我被重定向回 wiki 主页。 @camios 你是对的。文档可以在这里找到:docs.microsoft.com/en-us/azure/app-service/…【参考方案3】:Microsoft 添加了一个新设置,可用于限制函数执行的并发性。设置为WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
,可用于限制并行执行的函数实例数。但是,根据微软的说法,它还没有完全实现。
https://github.com/Azure/azure-functions-host/wiki/Configuration-Settings
【讨论】:
感谢您添加有用的链接 Bryan。 很棒的电话,文档已移至docs.microsoft.com/en-gb/azure/azure-functions/…,现在在预览中支持 有人在生产中尝试过这个吗?这个特性确实可以帮助我们在架构中支持一些遗留的东西,但如果它不稳定,我们就不能使用它......【参考方案4】:对于那些仍然感兴趣的人: https://docs.microsoft.com/en-us/azure/azure-functions/event-driven-scaling#limit-scale-out
有一种方法可以通过设置functionAppScaleLimit
参数来限制并行执行的数量。
【讨论】:
以上是关于Azure Functions - 限制并行执行的主要内容,如果未能解决你的问题,请参考以下文章
限制服务总线消息接收的 Azure Functions 速率
使用Azure Functions 在web 应用中启用自动更新分析基于轮询的 Web 应用的限制
如何使用 Python Azure Functions QueueTrigger 手动使消息出队?
我可以使用 Azure Functions 进行 SQL 查询并返回其结果吗? [关闭]