CPU 上的服务结构自动平衡

service fabric auto-balancing on CPU

我正在尝试确定 Service Fabric 是否会根据其中一个节点上的 CPU 负载自动平衡集群。

根据 MSDN 文献,Service Fabric 自动平衡 指标 (https://azure.microsoft.com/en-us/documentation/articles/service-fabric-cluster-resource-manager-balancing/)。默认指标是 Count 和 Primary Count,我们可以定义和报告其他指标。但是,如果节点变得太 "hot"(即高 CPU),则没有提及移动副本和平衡集群。

我设置了以下内容来尝试模拟这种情况。

我创建了一个 Service Fabric 应用程序,并使用以下服务部署到 5 节点 Azure 集群:

  1. 具有简单 int 计数的有状态服务。它公开了一个远程接口,该接口增加计数并使 CPU 保持忙碌 1 秒。此服务分为 10 个命名分区 - a、b、c、d、e、f、g、h、i、j。

  2. 为请求的分区调用上述接口的 Web API 无状态服务。

  3. 监控节点CPU并在CPU超过50%时报告健康警告的无状态服务

将应用程序部署到集群后,我注意到两个分区具有相同的主节点。例如,分区 "a" 和 "c" 的主分区都在 "node 1" 上。然后我在本地 运行 本地客户端应用程序,每秒为这两个分区调用上述网络 API 。正如预期的那样,"node 1" 上的 CPU 在测试期间达到了 90% 左右,但即使在 运行 测试 5 分钟后,副本也不会四处移动以保持平衡节点。事实上,在某些情况下,客户端调用开始超时。

以上实验是否证明 Service Fabric 不会在 CPU 负载上自动平衡,或者我遗漏了什么?

首先,健康警告对集群的平衡没有任何作用。唯一触发平衡的是负载报告。

然而,它确实 CPU 平衡。您需要在 cluster/applicationmanifests 中指定您自己的资源以进行平衡。然后您可以动态报告应用程序中的负载,但根据我上周对问题的回答,这是虚拟资源。