如何为每个工作者角色配置_instance_(不是角色)

时间:2014-06-27 15:40:44

标签: azure quartz.net azure-worker-roles

给定:一个工作者角色+几个Quartz.net工作。 Quartz作业与主机无关,并以Worker角色执行。

可以将辅助角色缩放到多个实例。

目标:能够定义在运行时在哪个实例中运行的作业(或仅使用配置定义,不更改代码)。例如:

  • MyRole Instance 1:Job1,Job2,Job3
  • MyRole Instance 2:Job4,
  • MyRole Instance 3:Job4,
  • MyRole Instance 4:Job4,
  • MyRole Instance 5:Job5,Job6

在我的示例中,Job4收到了很多负载。所以我希望能在更多实例上运行。我还希望它在运行时可以扩展(或者至少通过配置,不需要代码更改)。

AFAIK每个实例无法进行azure配置(仅限每个角色本身)。在类似问题上在线搜索没有任何结果。

问题:有没有人有类似的情况?什么是最好的方法?非常感谢任何其他设计建议。感谢。

1 个答案:

答案 0 :(得分:3)

这是一个特定于Azure的架构问题。最常见的解决方案是设置每个实例/进程可以访问的“代理”,并询问其各自的工作负载。无论您部署解决方案的平台如何,挑战在于如何a)识别代理和b)确保代理管理的“状态”信息在代理进程终止时保持不变。

在Azure中解决这些问题的最常见方法是使用带有租约的blob,允许代理“自选”(获得租约的第一个进程是代理),并存储两者代理的地址和代理的状态(存储在blob中的元数据)。然后,您将以最适合您的任务分配需求的方式将作业分配给此代理。