工人-无法选择最佳技术

时间:2019-09-05 17:08:47

标签: microservices azureservicebus worker .net-core-3.0

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

diagram

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

  1. 托管服务
  2. Azure Web作业
  3. 天蓝色批次

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

1 个答案:

答案 0 :(得分:6)

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

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

    enter image description here

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

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

    enter image description here

    enter image description here

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