【问题标题】:Azure: Best architecture to run a lot of tasks that takes between 5 and 10 seconds each (triggered from web api)?Azure:运行大量任务的最佳架构,每个任务需要 5 到 10 秒(从 web api 触发)?
【发布时间】:2020-09-19 14:17:27
【问题描述】:

我们为此使用 Azure 服务,并且我们有一个在 Azue Web Service App 上运行的 Web api (Flask),连接到不同服务中的 PostgreSQL(到目前为止一切都很好,虽然连接有点慢)。无论如何,用户执行的操作会触发流程。基本上,我们需要预处理数千条记录(介于 1000 到 5000 条之间),处理每条记录需要 5 到 10 秒。

我们在使用 Azure Functions 时想到了这一点,并触发了数千个 http 请求。但即使我们添加了更多实例,请求也不会并行化。他们似乎在排队。我与 Azure 支持人员进行了交谈,他们告诉我这可能不是最好的解决方案,因为 Azure 功能预计会快速运行,而不需要几秒钟即可执行。

所以我的问题是:在 Azure 上执行此类操作的最佳架构是什么?我读到了一个叫做事件网格的东西,但我不知道(第一次使用 Azure)。基本的解决方案是拥有一个可以接收参数和启动进程的 VM,但这太复杂了(我们的团队中没有可以处理这些的 devops)。

提前致谢。

【问题讨论】:

  • 如何触发函数?
  • 现在,我们正在向 Azure 函数发送异步 http 请求。它们是同时发送的,我们正在测量它,我在 Azure 功能仪表板中看到所有请求都已收到。但它们不会立即执行(我们在函数的开头和结尾添加日志)。我们还尝试使用仅 1) 记录、2) 睡眠、3) 再次登录的功能,这是相同的行为,而不是并行化。
  • 您是否尝试将消息发送到队列并让新消息触发该功能?另外,这可能会提供一些线索:stackoverflow.com/questions/46191002/…
  • 不,我没有尝试使用队列。正如我所说,我是 Azure 的新手,所以我现在不提供所有可用的服务 :( 你认为这会使它们并行运行吗?
  • 您是在 Azure 函数或应用服务计划托管中使用消费托管选项。因为如果是消费,那么函数应该非常迅速地向外扩展。看到这个:docs.microsoft.com/en-us/azure/azure-functions/…

标签: azure events architecture execution


【解决方案1】:

我强烈建议为此评估 azure 持久功能,运行时自动支持fan out,这意味着您可以非常轻松地获得大规模。确保这些函数与之通信的系统也可以处理负载!

基本结构是您启动一个协调器功能,然后该功能可以启动多个活动功能,如有必要,这些活动功能本身可以链接在一起,甚至可以再次展开。您引用的时间不会成为问题,请参阅here。您可以愉快地在消费计划上运行所有这些。

当然你需要在这里考虑成本,如果你确实使用消费计划,你将按 Mb-second 支付,即成本与使用的内存和花费的时间成正比。

【讨论】:

  • 谢谢,我去看看。一个 HTTP 请求可以触发持久化函数吗?
  • 是的,它可以,我们将它们用于许多用例。
【解决方案2】:

您可以尝试使用 Azure 队列存储触发器,当您在 azure 队列中添加消息时,它将触发 azure 函数,是的,它将并行运行 但它有一个限制,但您可以按照文档中的说明对其进行扩展。

Azure Queue storage trigger for Azure Functions

【讨论】:

    【解决方案3】:

    Matt 的回答是可行的,但是我特别注意到您希望请求被并行化(即执行时间是优先事项)。你看过Azure Batch 吗?它专为大规模并行工作负载而设计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      相关资源
      最近更新 更多