Что касается сервисов в Service Fabric, существует два типа: сервисы с сохранением состояния и сервисы без сохранения состояния.
Службы без сохранения состояния не обрабатывают состояние с использованием надежных коллекций.Если им необходимо поддерживать состояние, им приходится полагаться на внешние решения для обеспечения устойчивости, такие как базы данных и т. Д. Так как они не имеют дело с состоянием, предоставляемым надежными коллекциями, им присваивается тип раздела Singelton.
Службы с сохранением состояния могут хранитьГосударство в надежных коллекциях.Чтобы иметь возможность масштабировать эти сервисы, данные в этих коллекциях должны быть разделены на разделы.Каждому экземпляру службы назначается определенный раздел.Количество разделов указывается для каждой службы, как в следующем примере:
<Service Name="Processing">
<StatefulService ServiceTypeName="ProcessingType" TargetReplicaSetSize="3" MinReplicaSetSize="3">
<UniformInt64Partition PartitionCount="26" LowKey="0" HighKey="25" />
</StatefulService>
</Service>
Итак, учитывая приведенный выше пример, я не понимаю вашего последнего замечания о том, что стратегия разделения не связана напрямую со службой.
С учетом описанной выше ситуации будет запущено 26 экземпляров этой службы, по одному для каждого раздела, , умноженное на количество реплик.
В случае отсутствия состоянияслужб, будет только один раздел (одноэлементный раздел), поэтому число фактических экземпляров равно 1 * 3 (количество реплик) = 3. (3 реплики - это только пример. В большинстве случаев установлено количество экземпляров службы без сохранения состояния).до -1, что означает 1 экземпляр для каждого узла в кластере.)
Еще одна вещь: в вашем коде у вас есть строка комментария в фрагменте кода итерации разделов:
// Например, Singleton прост, поскольку это всего лишь одна конечная точка, в противном случае нам понадобится балансировка нагрузки , позже
Этот комментарий неправильныйзаявляя, что разбиение связано с балансировкой нагрузки.Это не так, это связано с тем, как данные распределены по экземплярам службы, и вам нужно получить адрес службы, которая имеет дело с конкретным разделом.Скажем, у меня есть служба с 26 разделами, и я хочу получить данные, которые хранятся, скажем, в 5-м разделе.Затем мне нужно получить конечную точку для экземпляра, который обслуживает этот раздел.
Вы, вероятно, уже прочитали документы .Если нет, я предлагаю также прочитать его.
Обращаясь к вашим комментариям:
Мне просто интересно, не возможно ли, чтобы несколько служб работали в одном разделе?
Надежные коллекции связаны с сервисом, использующим их, как и базовые разделы.Следовательно, в одном разделе может работать не более одной службы.
Но, сервисные экземпляры могут.Если служба имеет размер реплики, скажем, 3, будет 3 экземпляра, обслуживающих этот раздел.Но только 1 является первичным экземпляром, считывающим и записывающим данные, которые реплицируются во вторичные экземпляры.