我有一个Azure云服务,可以向外扩展实例,也可以向内扩展实例。使用一些应用程序见解指标来管理自动扩展规则,这可以正常工作。
当鳞片和天蓝色消除宿主时,就会出现问题。有没有一种方法可以在实例完成处理任务后仅在该实例中扩展?
答案 0 :(得分:1)
无法自动执行此操作。 Azure将始终在数量最多的实例中进行扩展。
理想的解决方案是使工作成为幂等和成块的,这样,如果正在执行某组工作的实例被中断(按比例缩放,VM重新启动,断电等),则另一个实例可以接管工作它停了下来。这样一来,您就可以从许多可能的情况(例如断电)中恢复过来,而不仅仅是尝试设计一些专门针对比例放大的工具。
话虽如此,您可以手动创建一个缩放解决方案,该解决方案仅删除不起作用的实例,但是这样做将需要相当一部分代码。本质上,您将使用在每个实例中运行的信令机制,该机制将使某些外部服务(Logic应用程序或WebJob或类似的东西)知道实例何时处于忙碌状态,并且该外部服务可以使用Delete Role删除空闲实例。实例API(https://docs.microsoft.com/en-us/rest/api/compute/cloudservices/rest-delete-role-instances)。
有关此主题的更多讨论,请参见:
答案 1 :(得分:0)
另一种解决方案,但这打破了我们正在使用Azure云服务的假设;如果您使用应用程序服务而不是云服务,则可以在应用程序服务计划上设置自动扩展功能,从而有效地照顾到您遇到的实例丢失。
这是一项基础架构更改,因此不是一键单击,但我认为应用程序服务更适合包括这种情况在内的许多情况。
您可以查看一些优点和缺点,但是如果您的产品是由流量管理的,则此切换不会很麻烦。
答案 2 :(得分:0)
Kwill,感谢您提供的链接/信息,第二个链接中的第一项是最好的折衷方案。
流程工作时间通常在5分钟以内,并且该服务已经对失败的流程进行了重新处理,因此,经过一些研究,我们决定跟踪该服务何时处理队列项的状态,并在其中使用while循环。 RoleEnvironment.Stopping事件以延迟重新启动和放大事件,直到该过程有机会完成为止。
App Insights用于在on stop事件期间跟踪自定义事件,以跟踪它在延迟周期内完成与重新启动的频率。