给定:一个工作者角色+几个Quartz.net工作。 Quartz作业与主机无关,并以Worker角色执行。
可以将辅助角色缩放到多个实例。
目标:能够定义在运行时在哪个实例中运行的作业(或仅使用配置定义,不更改代码)。例如:
在我的示例中,Job4收到了很多负载。所以我希望能在更多实例上运行。我还希望它在运行时可以扩展(或者至少通过配置,不需要代码更改)。
AFAIK每个实例无法进行azure配置(仅限每个角色本身)。在类似问题上在线搜索没有任何结果。
问题:有没有人有类似的情况?什么是最好的方法?非常感谢任何其他设计建议。感谢。
答案 0 :(得分:3)
这是一个特定于Azure的架构问题。最常见的解决方案是设置每个实例/进程可以访问的“代理”,并询问其各自的工作负载。无论您部署解决方案的平台如何,挑战在于如何a)识别代理和b)确保代理管理的“状态”信息在代理进程终止时保持不变。
在Azure中解决这些问题的最常见方法是使用带有租约的blob,允许代理“自选”(获得租约的第一个进程是代理),并存储两者代理的地址和代理的状态(存储在blob中的元数据)。然后,您将以最适合您的任务分配需求的方式将作业分配给此代理。