Параметры для нескольких разделов, нескольких узлов для службы без сохранения состояния структуры служб

В текущей ситуации с использованием служб без сохранения состояния для предотвращения потери соединения требуемый дизайн использует первичный экземпляр, работающий на каждом узле (в настоящее время установлено использование 5 узлов), и мы надеемся, что каждый первичный экземпляр, работающий на каждом узле, помогает конечной точке не ошибиться из-за потери соединения. (В данном случае SignalR)

Таким образом, дизайн будет следующим: один основной и 4 реплики в каждом разделе, всего 5 разделов, работающих на 5 узлах.

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

Пока что я выяснил следующее:

Установка DefaultValue="-1" для счетчика экземпляров службы обеспечивает запуск службы на каждом узле, но вам все равно нужно, чтобы она сочеталась с одним из следующих:

SingletonPartition или UniformInt64Partition или NamedPartition

SingletonPartition используется по умолчанию в службе без сохранения состояния, а сочетание DefaultValue "-1" с SingletonPartition заставляет службу работать только на одном узле, что превосходит цель использования нескольких узлов.

Итак, я попробовал что-то вроде: StatelessService InstanceCount="5" (должно быть 25, включая реплики?)

В какой-то ссылке говорится, что lowkey и highkey должны совпадать с количеством разделов, а другая ссылка, по-видимому, включает все экземпляры, включая реплики.

Мне все еще не удается получить 5 разделов, 5 узлов и каждый раздел с основной службой.


person swcraft    schedule 27.12.2018    source источник


Ответы (4)


  • Для служб без отслеживания состояния с одноэлементными разделами, для которых количество экземпляров установлено на -1 означает "выполнять по одному на каждом узле".
  • Для служб без сохранения состояния вы не используете реплики. но Экземпляры. Реплики предназначены для репликации состояния.

Итак, используйте одноэлементный раздел и установите количество экземпляров равным -1.

person LoekD    schedule 11.01.2019

Я верю в ваши параметры ApplicationManifest, которые вы хотите:

<Parameter Name="YourService_PartitionCount" DefaultValue="5" />
<Parameter Name="YourService_MinReplicaSetSize" DefaultValue="4" />
<Parameter Name="YourService_TargetReplicaSetSize" DefaultValue="4" />

а затем в разделе DefaultServices вы хотите

<Service Name="YourService" ServicePackageActivationMode="ExclusiveProcess">
    <StatefulService ServiceTypeName="YourService" TargetReplicaSetSize="[YourService_TargetReplicaSetSize]" MinReplicaSetSize="[YourService_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[YourService_PartitionCount]" LowKey="0" HighKey="4" />
    </StatefulService>
</Service>

Убедитесь, что в папке параметров приложения нет значений, которые могут переопределять эти значения.

Причина использования LowKey="0" HighKey="4" состоит в том, чтобы упростить их нацеливание, если вы используете удаленное взаимодействие службы.

person nkorai    schedule 31.12.2018

Если я правильно понял проблему, вам нужно убедиться, что на каждом узле работает отдельная первичная реплика.

Есть только одно решение, которое я могу придумать (я не думаю, что это когда-либо возможно с необработанным разделением) — вы можете создать несколько экземпляров службы и использовать ограничения размещения для ограничения каждой службы на один узел с использованием ограничения NodeType или политики размещения, установив недопустимые или обязательные домены.

person Oleg Karasik    schedule 08.01.2019

В обоих случаях следует использовать набор реплик. С точки зрения службы без отслеживания состояния в Service Fabric реплика — это просто копия службы. Кроме того, разделение службы без сохранения состояния — очень редкий сценарий.

person Oleh Tarasenko    schedule 17.02.2020
comment
Хм... это прямо противоположное мнение @LoekD.. интересно.. какой подход был бы более желательным? кто-нибудь? - person swcraft; 18.02.2020
comment
@swcraft нет, не совсем так, просто делюсь идеями. В этом случае InstanceCount -1 выглядит как лучший вариант доступности для лиц без гражданства. Каждый экземпляр будет рассматриваться одинаково. Нет разделов. - person Oleh Tarasenko; 21.02.2020