如何在Azure应用服务的多个横向扩展实例上分发任务?在扩展Azure应用服务时分发工作
任务将从一个队列中读取数据,每个队列聚合一分钟,然后将结果写入Blob存储区。
我的任务目标是这些:
- 应该只有在任何时候每个队列一个任务运行。
- 在所有实例中均匀分配任务
- 如果有一个实例出现故障,那么所有在那里运行的任务都将在另一个正在运行的实例上启动。
- 一旦实例返回,实例将被均匀分发。
我主要关心的不是工作负载性能,而是响应性/正常运行时间。 单个实例可以托管所有任务,但如果该实例重新启动,则会导致不需要的停机时间。
我打算使用服务总线队列,仍然阅读它。 我的想法是偷看5分钟,将它们聚合并将其存储在一个blob中。然后在队列中标记这些项目已完成。如果进程崩溃,下一个会重新启动,重新启动的工作量将可以接受。问题/目标不是大数据,而是实时数据。 – hultqvist
我可能会实时处理这些消息。服务总线队列可以以两种模式工作:查看并锁定或接收和删除。如果您使用Peek&Lock,则Peek操作会使消息在给定时段内不可见。成功处理邮件后,您将明确从队列中删除邮件。这样,如果您的WebJob在处理过程中崩溃,则锁定过期并且消息变为可见再次处理。 –
@hultqvist,我原来的答案有错误。对于使用服务总线触发器,Webjob类型应该是连续的。我已经相应地更新了我的答案。 –