Я запускаю приложение Service Fabric в локальном кластере разработки с 5 узлами, «смоделированными» на моем ПК.
В приложении есть общедоступная служба API без отслеживания состояния с числом экземпляров, равным -1.
Я ожидаю увидеть 5 экземпляров службы без отслеживания состояния в Service Fabric Explorer, но я вижу только 1.
В приложении также есть служба акторов с числом разделов, равным 10 (автоматически сгенерированная Visual Studio конфигурация).
Когда приложение развертывается в кластере разработки на моем ПК, в Service Fabric Explorer можно увидеть только один раздел. После того, как я имитирую «большую» нагрузку и использование ЦП и памяти моего ПК составляет около 90% и превышает его, остается только один раздел службы акторов. Я создал службу с отслеживанием состояния с количеством разделов, установленным на 5, чтобы проверить, что-то не так с моей средой, но она работает должным образом.
Это нормально для служб без отслеживания состояния или что-то не так с моей конфигурацией. Это поведение специфично для кластера разработки, настроенного на избежание таких вещей, как конфликт портов.
Насчет актерской службы. Согласно docs Возможно динамическое масштабирование разделов, но количество разделов для службы актора не увеличивается даже при высокой нагрузке. Кроме того, в документации Actor ничего не упоминается о динамическом масштабировании раздела.
Заранее спасибо!
РЕДАКТИРОВАТЬ: после нескольких тестов с разными конфигурациями я заработал.
Исходная конфигурация в ApplicaitonManifest.xml:
<Parameters>
...
<Parameter Name="HttpAPI_InstanceCount" DefaultValue="-1" />
<Parameter Name="SystemStatusConsumerActorService_PartitionCount"
DefaultValue="10" />
...
</Parameters>
<DefaultServices>
<Service Name="HttpAPI">
<StatelessService ServiceTypeName="HttpAPIType"
InstanceCount="[HttpAPI_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="SystemStatusConsumerActorService"
GeneratedIdRef="faad4d24-04db-4e06-8a1d-22bc6255c7fe|Persisted">
<StatefulService ServiceTypeName="SystemStatusConsumerActorServiceType" TargetReplicaSetSize="SystemStatusConsumerActorService_TargetReplicaSetSize]" MinReplicaSetSize="[SystemStatusConsumerActorService_MinReplicaSetSize]">
<UniformInt64Partition
PartitionCount="[SystemStatusConsumerActorService_PartitionCount]"
LowKey="-9223372036854775808"
HighKey="9223372036854775807" />
</StatefulService>
</Service>
</DefaultServices>
Конфигурация, которая работает:
<Parameters>
...
<Parameter Name="HttpAPIInstanceCount" DefaultValue="-1" />
<Parameter Name="SystemStatusConsumerActorServicePartitionCount"
DefaultValue="10" />
...
</Parameters>
<DefaultServices>
<Service Name="HttpAPI">
<StatelessService ServiceTypeName="HttpAPIType"
InstanceCount="[HttpAPIInstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="SystemStatusConsumerActorService"
GeneratedIdRef="faad4d24-04db-4e06-8a1d-22bc6255c7fe|Persisted">
<StatefulService ServiceTypeName="SystemStatusConsumerActorServiceType" TargetReplicaSetSize="SystemStatusConsumerActorService_TargetReplicaSetSize]" MinReplicaSetSize="[SystemStatusConsumerActorService_MinReplicaSetSize]">
<UniformInt64Partition
PartitionCount="[SystemStatusConsumerActorServicePartitionCount]"
LowKey="-9223372036854775808"
HighKey="9223372036854775807" />
</StatefulService>
</Service>
</DefaultServices>
Обратите внимание, что единственными отличиями являются имена параметров:
HttpAPI_InstanceCount
изменился на
HttpAPIInstanceCount
SystemStatusConsumerActorService_PartitionCount
изменился на
SystemStatusConsumerActorServicePartitionCount