【问题标题】:Microsoft Azure Concurrent task processing in Web jobs / functionsWeb 作业/函数中的 Microsoft Azure 并发任务处理
【发布时间】:2017-10-03 00:22:03
【问题描述】:

我们有一项服务,它调用 3rd 方(处理 每次调用 1 个请求标准)服务来获取数据并在 rd 方服务仅处理 1 个请求标准。我们计划创建一个包装服务,它以异步方式同时发出 100 个请求(针对每个条件),并汇总结果。我们计划在云上部署服务,我们需要保持相同的响应时间。 我们有两种方法:

  1. 创建一个 Web 应用并使用 TAP 进行并行处理
  2. 创建 Azure 函数(包装器(主函数)和另一个调用 3rd 方 服务)并进行并行处理

任何人都可以提出实现这一目标的最佳模式和实践吗?

【问题讨论】:

  • 您是否向第 3 方传达了每次呼叫请求多个标准的需求?也许他们可以扩展他们的服务来适应你。

标签: c# azure asynchronous parallel-processing azure-functions


【解决方案1】:

您将很难为这些新的聚合请求实现相同的延迟,因为您的响应时间成为您进行的这 100 次调用中最差的。

Web 应用解决方案的性能可能会更高,因为它没有链式函数解决方案所具有的中间调用。

瓶颈似乎是这个第 3 方服务 - 你能缓存你需要的标准吗?

【讨论】:

  • 我要补充一点,即使您可以编写应用程序以通过异步编程向 3rd 方服务发出 100 个并发请求,但您的应用程序可能不会同时发出 100 个 HTTP 请求。从您的服务器上的应用发出的并发 HTTP 请求的数量可能会受到限制,甚至来自 3rd 方服务中的同一客户端。
  • 我们计划在 Azure 中将服务部署为可扩展的应用服务/服务结构。它会起作用吗?
【解决方案2】:

如前所述,您最大的瓶颈似乎是第三方响应(除非您有一个巨大的请求正文或类似的东西)。
这里最大的问题是,即使您设法一次推出 100 个请求,您也不能保证它们会以并行方式处理,因为可能另一端已备份,它会将您的请求排队.也许您的请求也可能会发出类似锁的操作,这会妨碍另一端的可扩展性。您也无法从第 3 方缓存中受益,因为所有请求都同时进入...
您可能面临的另一个问题是,如果另一边一切正常,您可能无法一次处理所有返回回家的请求响应,例如,您将被阻塞!毕竟,有 100 个备用线程只是放在周围并不常见......

我的建议是使用你武器库中的所有武器:

  • 缓存任何可以避免不必要调用的内容。
  • 批量处理您的请求,尝试批量处理 25 个项目。
  • 尝试通过在相关信息出现时更新相关信息来解决您的 1 秒时间范围(是的,这通常会被最终用户很好地接受)

【讨论】:

    【解决方案3】:

    我认为最重要的是,无论您选择哪种解决方案,无论它多么好,都会引入您以前不必担心的开销。

    话虽如此,我在单个 Web 服务器上使用 TAP 进行类似项目(即在网络上发现摄像头)取得了不错的成功。尽管考虑到 100 次通话的新要求,但我不确定您能否保持在 1 秒以下。

    我能想到的以这种响应时间完成此请求的唯一其他方法是让 100 个“暖”云服务运行并准备响应。但这对于你正在做的事情来说绝对是太昂贵了。

    我也想到了 Azure Batch,但我认为这会产生更多开销。

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多