2011-12-02 43 views
2

我可以直接从Java使用在Azure4Java包ServiceManagementRest类增加工作者角色(WR)的实例的数目。请参阅教程Azure Management through Java增加/减少工作者角色实例的数量在天青

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

问候, 法布里奇奥

回答

7

您无法选择关闭哪个(或多个)实例;您只需更改实例计数,并且结构控制器负责关闭实例。其中一个原因是由于故障域和SLA:如果在2个故障域中有4个实例,并且在故障域0中关闭了两个实例,则现在在故障域1中有2个实例。因此,现在您有两个可能位于同一机架中的实例,并且该机架脱机。现在你有一段时间运行零个实例。

与实例关闭处理是常见的情况,并围绕此工作的典型模式是通过采取队列的优势来缓冲你的工作量,然后让工人角色实例使用来自这些队列的工作项目。如果您在工作完成之前关闭实例,则该项目最终会重新出现在队列中,而另一个实例可以完成工作。

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

一个细节:你应该能够处理停止活动,并告诉“实例停止”停止从队列中读取(可能设置一个标志)。然后,重写OnStop(),然后等待进程中的操作完成后再返回。如果仍然在处理操作将花费超过5分钟,你可能得到创造性...

+0

当你说_这种模式需要幂等性_意味着每个工人可以执行任何任务? – jfabrizio

+0

对不起,不澄清:幂等操作是一个可以重复一致,可重复的结果和副作用的操作。例如:如果您在完成处理之前正在处理队列消息并发生了某些情况(可能需要比消息超时更长的时间或虚拟机崩溃)。此消息将重新出现在队列中,并最终再次处理。结果应该是一样的,不管你是一次还是多次处理消息。 –

2

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

可能至少梗阻什么是是,如果你等待一天的时间,当工人的角色是不太繁忙的减少情况?

1

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