Я создаю решение, в котором у нас будет служба без сохранения состояния (service-fabric), развернутая на K экземплярах. На эту службу возложена некоторая рабочая нагрузка (например, запросы), и я хочу разделить рабочую нагрузку между ними как можно более равномерно, и я хочу сделать это динамическим решением, что означает, если я решу завтра перейти от K экземпляров к N экземплярам , я хочу, чтобы разделение рабочей нагрузки происходило таким образом, чтобы теперь нагрузка автоматически распределялась между N экземплярами. У меня нет разделов, указанных для этой службы.
В качестве примера -
Допустим, я хочу запросить базу данных для получения определенного фрагмента записей. У меня 5 узлов. Я хочу, чтобы эти 5 узлов извлекали разные 1/5 набора записей. Этого можно добиться с помощью некоторой логики запроса, например (row_id % N == K), где N — общее количество экземпляров, а K — уникальный instance_number
.
Я надеялся использовать FabricRuntime.GetNodeContext().NodeId
, но это возвращает руководство, которое не слишком полезно.
Я ищу способ, где я могу детерминистически сказать, что это номер экземпляра M из N (мне нужно иметь возможность называть экземпляры через 1..N) - поэтому я могу установить свою логику запроса в соответствии с этим. Одним из требований является то, что если этот экземпляр выходит из строя / дает сбой и т. д., когда SF автоматически перезапускает его, он все равно должен идентифицироваться как один и тот же идентификатор экземпляра, чтобы 2 или более узлов не запрашивали один и тот же набор результатов.
Что лучше всего решает эту проблему? Есть ли решение, предполагающее чистую настройку через ApplicationManifest.xml
или ServiceManifest.xml
?