Проще говоря, это просто получение количества разделов, умноженного на количество выделенных реплик (с состоянием) или экземпляров (без сохранения состояния), которые имеет служба:
В вашем случае вы устанавливаете количество экземпляров на -1, при условии, что количество узлов равно 3, математика будет выглядеть следующим образом:
3(instances) * 5(partitions) = 15 (instances)
Использование PowerShell
$instances = 0
foreach ($partition in Get-ServiceFabricPartition -ServiceName "fabric:/AppName/ServiceName") {
foreach ($replica in Get-ServiceFabricReplica -PartitionId $partition.PartitionId)
{
if($replica.ReplicaStatus -eq 'Ready'){
$instances++
}
}
}
echo $instances
Использование FabricClient:
int instances = 0;
var fabricClient = new FabricClient();
var partitions = await fabricClient.QueryManager.GetPartitionListAsync(new Uri("fabric:/AppName/ServiceName"));
foreach (var partition in partitions)
{
instances += (await fabricClient.QueryManager.GetReplicaListAsync(partition.PartitionInformation.Id)).Where(r => r.ReplicaStatus == ServiceReplicaStatus.Ready).Count();
}
Сценарии вышедолжен работать для Stateful и Stateless.
Есть несколько предостережений:
- Службы с сохранением состояния имеют концепцию первичного и вторичного, если вы не обрабатываете запросы во вторичном, вы должны рассмотретьтолько количество разделов (которое будет таким же, как количество первичных реплик)
- Не принимайте число узлов в качестве количества экземпляров, когда установлено -1, SF поместит сервисы только в узелесли узел доступен для этой реплики, это означает:
- , если узел не отключен, реплика \ экземпляр не будет размещена на отключенных узлах
- , если узел hкак отсутствие емкости для реплики
- , если у службы есть ограничения на размещение
- , если служба указана в блоке, указанном в узле
- На основе вышеуказанных правилтакже не учитывайте InstanceCount, поскольку SF может не иметь возможности разместить количество запрошенных реплик.А когда значение InstanceCount равно -1, необходимо выполнить итерацию всех реплик \ экземпляров.
- Как отмечалось выше, рассматривать только реплики в состоянии готовности.Я не принимаю во внимание случаи нахождения в другом статусе, например, «InBuild», «Удаление» и т. Д.