![](/img/trans.png)
[英]Multiple kestrel stateless service instances running on different ports in service fabric
[英]Settings for multiple partitions, multiple node for service fabric stateless service
在當前使用無狀態服務的情況下,為了防止連接丟失,所需的設計是使用在每個節點中運行的主實例(當前設置為使用 5 個節點),並希望在每個節點中運行的每個主實例都有助於端點不會因連接丟失而出錯。 (在這種情況下,SignalR)
因此設計將是:每個分區中的單個主節點和 4 個副本總共 5 個分區在 5 個節點中運行。
這應該是一個簡單的配置設置,但由於缺乏帶有示例代碼的詳盡手冊,因此很難完成。
到目前為止,我發現的是:
為服務實例計數設置 DefaultValue="-1" 可實現服務在每個節點中運行,但您仍然需要將其與以下之一結合使用:
SingletonPartition 或 UniformInt64Partition 或 NamedPartition
SingletonPartition 是無狀態服務中的默認值,DefaultValue“-1”與 SingletonPartition 的組合強制服務僅在一個節點上運行,這超出了使用多個節點的目的。
所以我嘗試了類似的方法:StatelessService InstanceCount="5"(這應該是 25,包括副本嗎?)UniformInt64Partition PartitionCount="5" lowKey="0" highkey="5"(如果 highkey 是 24 以包含所有副本?)
一些鏈接說 lowkey 和 highkey 應該匹配分區數和另一個鏈接似乎包括所有實例,包括副本。
我仍然沒有成功實現 5 個分區、5 個節點和每個分區運行主要服務。
因此,使用單例分區並將實例計數設置為 -1。
我相信你想要的 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"
背后的原因是,如果您使用服務遠程處理,它們很容易成為目標。
在這兩種情況下,您都應該使用副本集。 在 Service Fabric 中的無狀態服務方面,副本只是服務的副本。 另外,分區無狀態服務是一種非常罕見的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.