【问题标题】:Which instances are stopped when I scale my Azure role down?当我缩减 Azure 角色时,哪些实例会停止?
【发布时间】:2012-02-20 06:56:48
【问题描述】:

假设我有一个运行三个实例的 Azure 角色。我要求 Azure 通过管理门户或管理 API 将角色计数更改为两个。

Azure 将如何决定取消哪个角色?

【问题讨论】:

  • 这不属于“要问就做错了”的范畴吗?实例可以根据需要来来去去不是重点吗?
  • @Damien_The_Unbeliever:有点。当一个角色被取消时,它应该停止并正确完成其工作,因此意外取消的角色会导致丢失部分已完成的工作。
  • @Damien_The_Unbeliever - 实例失败,您可以通过幂等操作和由此产生的工作延迟来处理失败。但是在非失败的情况下:假设每个工作实例上执行一个渲染作业,每个需要一个小时。您收到大量请求,因此您从 2 个实例跳到 5 个。几个小时后,流量下降,因此您转回 2 个。您无法指定要关闭哪些实例。假设 3 个实例处于空闲状态,2 个正在忙于渲染。可能有 1 或 2 个繁忙的实例被关闭,导致渲染作业重新运行。

标签: azure cloud scaling


【解决方案1】:

正如英国开发人员所提到的,Windows Azure Fabric 控制器决定关闭哪些实例。你无法控制这个过程。我不认为它总是最后一个数字,因为我不确定结构控制器是否在关闭后不重命名实例。所以即使它关闭了 IN_1,在进程结束时我们仍然会有 IN_0 和 IN_1,例如 IN_0 和 IN_2。

您可以使用RoleEnvironment.Stopping 事件来处理您的实例的正确停止(干净关闭)。在 VM 从负载均衡器轮换中取出之后并且在调用 RoleEntryPoint 类的 OnStop Method 之前引发此事件。

我不确定我在哪里指出,但我知道你必须完成清理有一个硬时间限制,即我认为实例将在等待 OnStop 或 Stopping 处理程序 5 分钟后关闭(我记不太清了,但 fabrci 控制器不会一直等你清理)。

【讨论】:

  • Stopping 事件的时间限制曾传言约为 30 秒。但这实际上是由于一个已修复的错误造成的。上次我听说没有需要完成停止事件的时间范围,但我总是会提醒人们尽可能保持简短。
  • 停止时间为 5 分钟,然后强制执行。它不是无限的。
  • 添加一些澄清,因为这个答案只是从另一个问题链接。缩小时删除的实例始终是最后一个(即具有最高 IN_ 编号的实例)。目前没有记录,理论上将来可能会改变,但目前没有计划改变这种行为。
【解决方案2】:

它通常是最后一个被旋转的。所以你有 IN_0 IN_1 和 IN_3。我只看到 IN_3 在您移除一个时出现故障,所以它似乎就是那个。

但是,Microsoft 没有在任何地方记录这一点,因此不能保证会出现这种情况……只是似乎在实践中。

【讨论】:

  • 微软内部有人在 1.2 SDK 时间范围内对此进行了测试。正如您所说,90% 左右的时间是最新的(最高的#)之一。但是,有一些结果不是这样。所以,这只是一种启发式方法。
猜你喜欢
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2014-03-23
  • 2015-04-24
  • 1970-01-01
  • 2012-03-20
  • 2013-10-16
  • 2012-03-03
相关资源
最近更新 更多