Локальный кластер разработки Service Fabric с 5 узлами выполняет меньше экземпляров и меньше разделов, чем ожидалось - PullRequest
0 голосов
/ 27 ноября 2018

Я запускаю приложение Service Fabric в локальном кластере разработки с "имитацией" 5 узлов на моем ПК.

В приложении есть общедоступная служба API без сохранения состояния с числом экземпляров, установленным в -1.

Я ожидаю увидеть 5 экземпляров службы без сохранения состояния в Service Fabric Explorer, но вижу только 1.

В приложении также есть служба субъекта с числом разделов, установленным в 10 (автоматически созданная конфигурацияVisual Studio).

Когда приложение развертывается в кластере разработки на моем ПК, в Service Fabric Explorer можно увидеть только один раздел.После того, как я имитирую «большую» нагрузку, а загрузка процессора и памяти моего ПК составляет около 90%, остается только один раздел службы актера.Я создал службу с состоянием с числом разделов, установленным в 5, чтобы проверить, не является ли что-то не так с моей средой, но он работает как ожидалось.

Это нормально для служб без сохранения состояния или что-то не так с моей конфигурацией.Является ли это поведение специфичным для кластера разработки, чтобы избежать таких вещей, как конфликт портов.

Как насчет службы субъекта.Согласно документам возможно динамическое масштабирование разделов, но количество разделов для службы субъекта не увеличивается даже при высокой нагрузке.Кроме того, в документах Actor ничего не упоминается о динамическом масштабировании разделов.

Related

Заранее спасибо!

РЕДАКТИРОВАТЬ: После некоторых тестов с различными конфигурациями я получил его работать.

Исходная конфигурация в 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

1 Ответ

0 голосов
/ 27 ноября 2018

После множества разных конфигураций проблема все еще была.Я нашел его после проверки git diff моего проекта.

Моя проблема заключалась в том, что параметры ApplicationManifest переопределяются в файле ApplicatonParameters \ Local.5Node.xml (потому что я использую локальный кластер из 5 узлов) в папке приложения Service Fabric.

Сложность заключалась в том, что даже если я удаляю или комментирую переопределение SystemStatusConsumerActorService_PartitionCount, студия добавляет его каждый раз, когда я собираю приложение.Единственным решением этой проблемы было изменение имени параметра в ApplicationManifest.xml.

После изменения конфигурации в соответствии с новыми фактами служба без сохранения состояния и служба субъекта запускаются с требуемым количеством экземпляров и разделов соответственно.,

Конечно, 4 из пяти экземпляров без сохранения состояния ломаются, но это вполне логично, учитывая, что кластер «работает» на одной машине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...