簡體   English   中英

多個分區的設置,服務結構無狀態服務的多個節點

[英]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 意味着“在每個節點上運行一個”。
  • 對於無狀態服務,您不使用Replicas 而使用 Instances 副本用於復制狀態。

因此,使用單例分區並將實例計數設置為 -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"背后的原因是,如果您使用服務遠程處理,它們很容易成為目標。

如果我對問題的理解正確,您需要確保每個節點都有一個單獨的主副本在其上運行。

我只能想到一個解決方案(我不是原始分區永遠不可能) - 您可以創建服務的多個實例並使用放置約束將每個服務限制為使用NodeType約束或放置策略的單個節點通過設置無效或必需的域。

在這兩種情況下,您都應該使用副本集。 在 Service Fabric 中的無狀態服務方面,副本只是服務的副本。 另外,分區無狀態服務是一種非常罕見的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM