我想创建一个微服务来并行处理我通过Azure服务总线通过push
获得的某些任务。如果任务成功完成,此微服务将通知Azure服务总线。请参见下图:
我已经考虑了以下三个选项:
由于先决条件之一是该微服务必须位于.NET Core 3中,因此是否有使用Web Jobs代替Hosted Services的有效理由?哪个选项可确保鲁棒性和可扩展性?
答案 0 :(得分:6)
根据我在Azure云上进行并行处理的知识并考虑您的方案,我认为有以下三种解决方案作为候选选项,
Azure Web作业。众所周知,Azure仅支持在多个Azure WebApp实例上运行的连续Web作业,如文档Run Background tasks with WebJobs in Azure App Service
中的下图所示,其可伸缩性取决于Azure App Service的层数和应用程序实例的数量。此选项的性能有限,不适用于真正的并行计算。
Azure Batch,Azure云上真正的大规模并行和高性能计算(原因除外,HDInsight)。但是,如果没有繁重的数据处理任务,那么执行一些只需要多线程中的并发功能的任务就太昂贵了。
带有服务总线触发器的Azure功能,请参考官方文档Azure Service Bus bindings for Azure Functions
。真正的无服务器架构是为您的微服务方案设计的。在下图Azure Functions scale and hosting
中定义了其对横向扩展和最大实例的功能的限制(来自文档host.json
)。
因此,如果不是真正的并行数据处理方案,我建议使用Azure Functions,否则Azure Batch是并行大数据任务的最佳选择。 Azure WebJobs只能使用Azure App Service托管您的网站并运行带有连续作业的并行任务,但是性能有限。我认为托管服务可以根据多线程内基于Webhook请求的并发任务进行处理,