Service Fabric 和扩展集群中的长 运行 任务

Long Running Tasks in Service Fabric and Scaling Cluster In

我们正在使用 Azure Service Fabric(无状态服务),它从 Azure 服务总线消息队列获取消息并处理它们。这些任务通常需要 5 分钟到 5 小时。

当它很忙时我们想扩展服务器,当它变得安静时我们想再次缩减。

我们如何在不中断长 运行 任务的情况下进行扩展?有没有办法告诉 Service Fabric 哪个服务器可以自由扩展?

  1. Azure Monitor Custom Metric

    • 将您的顺丰服务与 EventFlow。例如,让它将日志发送到 Application Insights

    • 在处理您的任务时,发送一些日志以表明 正在进行中

    • 在 Azure Monitor 中配置 custom metric 以仅在缺少指示该计算机的日志的情况下进行缩放 有正在进行的任务

这里的权衡是等待所有事件完成,直到缩小可能发生。

  1. 有一篇很好的文章解释了如何 Scale a Service Fabric cluster programmatically
  2. 这是另一种方法,需要一些编码 - Automate manual scaling

    • 开发另一个服务作为 SF 应用程序的一部分或作为 VM 扩展。这里的要点是在集群中的所有节点上创建服务运行并跟踪任务执行的状态。

    • 如何从集群中手动排除 SF 节点有明确的步骤 -

    • 运行 Disable-ServiceFabricNode with intent 'RemoveNode' 以禁用您要删除的节点(该节点类型中的最高实例)。

    • 运行 Get-ServiceFabricNode 以确保节点确实已转换为禁用状态。如果没有,请等到节点被禁用。这一步你不能着急。
    • 按照快速启动模板库中的 sample/instructions 将该节点类型中的虚拟机数量更改为一个。删除的实例是最高的 VM 实例。
    • 等等...在此处查找更多信息 Scale a Service Fabric cluster in or out using auto-scale rules。这里的要点是 这些步骤可以自动化

在新服务中实施扩展逻辑,以监视哪些节点已完成其任务并保持空闲以使用前面步骤中描述的指令扩展它们。

希望它有意义。


非常感谢@tank104 帮助详细阐述我的答案!