我想知道同步运行相同角色的多个 Azure 实例的最佳实践。 更准确地说,我想防止多个工作角色在同一个工作单元上工作。
Azure 队列似乎对此事没有帮助。 一种选择是使用带有锁和存储过程的 sql 表;但是在Azure中使用sql同步似乎有点尴尬。
有什么想法吗?
编辑,我的详细(但简化的问题)如下:
- 有 n 个目标。
- 必须以指定的时间间隔(例如 30 秒 - 但每个目标都不同)对每个目标完成一个工作单元。
- 我有 m 个工作线程(托管在 h 个实例中)。
- 处理一个工作单元可能需要 10 秒到 1 小时之间的时间。
我的想法是,我有一个调度程序,它将工作单元放入 Azure 队列中,每个 m 个工作人员都会读取这些工作单元并进行处理。
问题:
- worker1 开始处理 unit1(与 target1 有关) - 这将需要很长时间,比如 10 分钟
- 30 秒过去了
- 调度程序为target1放置另一个工作单元,例如unit13
- worker2 开始在 unit13 上工作,针对相同的 target1 - 不好
我有一些想法,但它们似乎不够多云,所以我很想知道您会针对这个问题应用什么解决方案。
最佳答案
我刚刚写了几篇关于使用 blob 租约来做此类事情的博客文章。请参阅http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases和 http://blog.smarx.com/posts/building-a-task-scheduler-in-windows-azure .
关于Azure 角色间同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7258692/