增加/减少Azure中的工作者角色实例数

时间:2011-12-02 10:49:46

标签: java azure

我可以使用Azure4Java包中的ServiceManagementRest类直接从Java增加Worker Role(WR)实例的数量。请参阅教程Azure Management through Java

我的问题是,当我减少WR实例的数量时,我可以决定关闭哪些WR实例吗?因为,对于云弹性的想法,我会将实例停在IDLE状态而不是处于EXECUTING状态的实例。

此致 的Fabrizio

3 个答案:

答案 0 :(得分:7)

您无法选择要关闭的实例;您只需更改实例计数,然后结构控制器负责关闭实例。一个原因是由于故障域和SLA:如果你有2个故障域中的4个实例,并关闭故障域0中的两个实例,那么现在你在故障域1中有2个实例。所以现在你有两个也许是在同一个机架中的实例,并且该机架脱机。现在你有一个零实例运行了一段时间。

处理实例关闭是一种常见的情况,解决此问题的典型模式是利用队列来缓冲工作负载,然后让工作者角色实例使用这些队列中的工作项。如果在工作完成之前关闭实例,则该项最终会重新出现在队列中,而另一个实例可以完成工作。

这种模式需要幂等性,这有时是一种挑战。通过最近对Windows Azure队列的更新,您现在可以修改队列消息,这使得这更容易 - 您可以在完成工作项处理的各个阶段时向队列消息添加信息。然后,如果您的实例在工作完成之前关闭,则下一个接收它的工作人员可以从“开始”以外的点恢复。

还有一个细节:你应该能够处理Stopping事件,并告诉“实例停止”停止从队列中读取(可能设置一个标志)。然后,重写OnStop(),并在返回之前等待进程内操作完成。如果仍在进行中的操作将花费超过5分钟,您可能必须具有创造性......

答案 1 :(得分:2)

您无法控制将关闭哪个实例,但是几乎总是(据我所见)具有最大数字后缀的实例。即如果您有IN_0,IN_1和IN_2,并且关闭了一个实例,则很可能是关闭的IN_2。也许你可以利用这种趋势来获得优势?

如果等待工作人员角色不太忙于减少实例的时间,那么可能阻碍性最小的是什么?

答案 2 :(得分:1)

我认为永远不要假设接下来会发生什么是基于实例ID是明智的。我倾向于在服务(scaleunits)上传播角色,在需要时启动和停止 - 用于控制4000个节点的模式。