在扩展Azure App Service时分发工作

时间:2017-04-20 14:34:46

标签: azure-web-sites

如何在Azure App Service的多个横向扩展实例上分发任务?

任务将从一个队列中读取数据,聚合超过一分钟,将结果写入blob存储。

我的任务目标是:

  • 每个队列应始终只运行一个任务。
  • 在所有实例中均匀分配任务
  • 如果一个实例出现故障,那么在那里运行的所有任务都将在另一个正在运行的实例上启动。
  • 实例重新启动后,实例将均匀分发回来。

我主要担心的不是工作负载性能,而是响应性/正常运行时间。 单个实例可以托管所有任务,但如果该实例重新启动,则会出现意外停机。

1 个答案:

答案 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的自动缩放设置为依赖于队列长度,因此您可以根据队列是否开始备份来自动扩展和缩小。