如何在Azure App Service的多个横向扩展实例上分发任务?
任务将从一个队列中读取数据,聚合超过一分钟,将结果写入blob存储。
我的任务目标是:
我主要担心的不是工作负载性能,而是响应性/正常运行时间。 单个实例可以托管所有任务,但如果该实例重新启动,则会出现意外停机。
答案 0 :(得分:1)
根据我对您的要求的理解,我认为您不希望每个队列运行一个任务。如果您的任务失败,这将引入一个失败点。
相反,请考虑使用连续的WebJobs。您可以将所有WebJobs放在App Service Plan中的单个Web App上,然后将Web App扩展到两个或更多实例。因此,如果您有WebJobs A,B和C监视队列1,2和3,然后启动第二个Web App实例,您将拥有WebJobs A1和A2监视队列1.如果一个停止,另一个在另一个实例正在恢复时,收拾松弛。
此外,如果您要求至少传递一次但不超过一次的消息,我建议使用服务总线队列。查看ServiceBusTrigger for WebJobs。请注意,当特定WebJob实例使服务总线队列消息出列时,该消息将被锁定,以使其不会被处理两次。
要缩短响应时间(如果队列备份),您只需添加更多Web应用程序实例即可。您还可以将Web App的自动缩放设置为依赖于队列长度,因此您可以根据队列是否开始备份来自动扩展和缩小。