【问题标题】:Azure Autoscaling: Scale down after process ends on instanceAzure 自动缩放:在实例上的进程结束后按比例缩小
【发布时间】:2019-03-20 09:48:14
【问题描述】:

我有一个 azure 云服务,可以向外和向内扩展实例。使用一些应用洞察指标来管理自动扩展规则,这可以正常工作。

当缩放和 azure 消除主机时,问题就出现了;一旦实例完成处理其任务,有没有办法让它只在实例中扩展?

【问题讨论】:

  • 如果超过 5 分钟,您可以配置规则(我不确定 5 分钟是最小值还是更高)CPU/内存下降以进行缩减

标签: azure autoscaling azure-cloud-services


【解决方案1】:

Kwill,感谢您提供的链接/信息,第二个链接中的顶部项目是最好的折衷方案。

进程的工作时间通常在 5 分钟以下,并且服务已经重新处理了失败的进程,因此经过一些研究,决定跟踪服务何时处理队列项的状态,并在RoleEnvironment.Stopping 事件延迟重启和缩减事件,直到进程有机会完成。

App Insights 用于在停止事件期间跟踪自定义事件,以跟踪它在延迟周期内完成与重启的频率。

【讨论】:

    【解决方案2】:

    另一种解决方案,但这个解决方案打破了我们正在使用 Azure 云服务的假设;如果您使用应用服务而不是云服务,您将能够在应用服务计划上设置自动缩放,从而有效地处理您遇到的实例丢失。

    这是一项基础架构更改,因此不是两次点击即可完成,但我相信应用服务更适合包括这种情况在内的许多情况。

    您可以查看一些优点和缺点,但如果您的产品是流量管理的,那么这种转换不会很痛苦。

    【讨论】:

    • 我明白你的意思,看起来有一些很好的优势,特别是应用服务的启动/停机时间,但如果我转向应用服务,同样的问题会不会出现?
    • 这不是问题,因为一个应用服务有 1-10(20) 个实例,并且跨实例共享相同的线程和执行内存。这是一篇不错的文章:docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/…。在应用服务模型下扩展的一般规则是; 1-线程数,内存和cpu使用率是王道。 2-为输入/输出设置自动缩放规则(更多或更少实例)。 3- 放大和缩小是手动完成的。
    【解决方案3】:

    无法自动执行此操作。 Azure 将始终在数量最多的实例中进行扩展。

    理想的解决方案是使工作具有幂等性和分块性,这样如果一个正在执行某些工作的实例被中断(缩减、VM 重启、断电等),那么另一个实例可以接手工作它停止了。这使您可以从许多可能的情况(例如断电)中恢复过来,而不仅仅是尝试设计特定的扩展功能。

    话虽如此,您可以手动创建仅删除不工作的实例的扩展解决方案,但这样做需要您编写相当多的代码。本质上,您将使用在每个实例中运行的信号机制,让某些外部服务(逻辑应用程序或 WebJob 或类似的东西)知道实例何时空闲或忙碌,并且该外部服务可以使用删除角色删除空闲实例实例 API (https://docs.microsoft.com/en-us/rest/api/compute/cloudservices/rest-delete-role-instances)。

    有关此主题的更多讨论,请参阅:

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多