工人-无法选择最佳技术

Kir*_*512 0 worker azureservicebus microservices .net-core-3.0

我想创建一个微服务来并行处理我通过pushAzure Service Bus 获得的一些任务。如果任务成功完成,此微服务将通知Azure服务总线。请参见下图:

图

我已经考虑了以下三个选项:

  1. 托管服务
  2. Azure Web作业
  3. Azure批处理

由于先决条件之一就是该微服务必须位于.NET Core 3中,因此是否有使用Web Jobs代替Hosted Services的正当理由?哪个选项可确保鲁棒性和可扩展性?

Pet*_*Pan 6

根据我在Azure云上进行并行处理的知识并考虑您的方案,有以下三种解决方案作为候选选项,我认为这已经足够了。

  1. Azure Web作业。众所周知,Azure仅支持在多个实例的Azure WebApps上运行的Continuous WebJobs,如下图所示Run Background tasks with WebJobs in Azure App Service,其可伸缩性取决于Azure App Service的层数和应用程序实例的数量。此选项的性能有限,不适用于真正的并行计算。

    在此处输入图片说明

  2. Azure Batch(Azure云上真正的大规模并行和高性能计算)(HDInsight除外)。但是,如果没有繁重的数据处理任务,那么执行一些仅需要多线程中的并发功能的任务就太昂贵了。

  3. 带服务总线触发器的Azure函数,请参考正式文档Azure Service Bus bindings for Azure Functions。真正的无服务器架构是为您的微服务方案设计的。Azure Functions scale and hostinghost.json文件中定义了如下图(来自文档)对横向扩展和最大实例功能的限制。

    在此处输入图片说明

    在此处输入图片说明

因此,如果不是真正的并行数据处理方案,我建议使用Azure Functions,否则Azure Batch是并行大数据任务的最佳选择。Azure WebJobs只能使用Azure App Service托管您的网站并运行带有连续作业的并行任务,但是性能有限。作为我的观点,托管服务不建议基于Webhook请求在多线程中处理并发任务。