我们希望使我们的客户能够计划每天,每周和每月的重复任务。线性可伸缩性对我们来说真的很重要,这就是为什么我们使用Windows Azure表存储而不是SQL Azure。当前的设计如下:-调度信息存储在表存储表中。例如:任务A,每天;任务B,每周;... -有工作进程,每小时运行一次并查询此表。然后决定,他们是否必须运行给定的任务。
但是,如果多个工作角色开始运行相同的任务呢?
其他一些要求:-工作进程可以在不同的时区。
Windows Azure队列存储可以解决上面提到的所有cuncurrency问题,但它也引入了一些新的问题:-我们应该生成多少个队列项目?-如果客户更改了重复率或取消了计划怎么办?
因此,我的问题是:如何使用Windows Azure Storage设计一个具有多个异步工作进程的重复任务调度器?
发布于 2013-11-06 10:09:28
也许新的Azure Scheduler服务可以有所帮助?
http://www.windowsazure.com/en-us/services/scheduler/
发布于 2013-10-04 11:05:29
一些想法:
但是,如果多个工作者角色开始运行同一任务怎么办?
这很有可能发生。为了避免这种情况,您可以做的是让一个工作者角色实例(池中的任何工作者角色实例)从表中读取消息并推送队列中的消息。当此实例执行此工作时,所有其他实例都在等待。要确定哪个实例执行此工作,您可以使用blob租用功能。
一些其他要求:-工作进程可以在不同的时区。
对此不太确定。假设你谈论的是Cloud Services Worker Roles,它们可能在不同的数据中心,但它们都在UTC时区。
我们应该生成多少个队列项目?
这真的取决于需要做多少工作。您可以将所有消息放入一个队列中。一个客户端一次最多只能将32条消息从队列出队。因此,如果您有100个任务,因此有100条消息,那么每个实例在对队列服务的一次调用中最多只能从队列中读取32条消息。
如果客户更改了重复率或取消了计划,该怎么办?
这应该没问题,因为一旦任务完成,您必须从队列中删除消息。下次调用任务时,您可以再次从表中读取,它将为您提供有关表中任务的最新信息。
发布于 2013-10-04 04:20:52
我会继续使用Azure Table Storage,但在工作人员开始工作之前将进程标记为“正在进行”。由于ATS支持由Etags控制的并发性,因此您可以放心,两个进程不会启动同一进程
但是,当作业意外失败时,我会考虑重试逻辑,并且有一个重新启动看似孤立的作业的进程
https://stackoverflow.com/questions/19168326
复制相似问题