共用方式為


Grain 協調屬性

開發人員可以指定叢集應如何協調其有關特定 Grain 類別的 Grain 目錄和時機。 GlobalSingleInstanceAttribute 表示我們希望行為與在單一全域叢集中執行 Orleans 時相同:也就是,將所有呼叫路由傳送至單一啟動的 Grain。 相反地,[OneInstancePerCluster] 屬性表示每個叢集都可以有其獨立的啟動。 如果叢集之間不需要通訊,這是適當的做法。

這些屬性會在實作 Grain 時發生。 例如:

using Orleans.MultiCluster;

[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
   // ...
}

[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
   // ...
}

如果 Grain 類別未指定其中一個屬性,則預設為 OneInstancePerClusterAttribute,或如果將設定參數 GlobalConfiguration.UseGlobalSingleInstanceByDefault 設定為 true,則預設為 GlobalSingleInstanceAttribute

適用於全域單一執行個體 Grain 的通訊協定

存取全域單一執行個體 (GSI) Grain 且已知沒有啟動存在時,會先執行特殊的 GSI 啟動通訊協定,再啟動新的執行個體。 具體來說,要求會傳送至目前多叢集設定中的所有其他叢集,檢查這些叢集是否有此 Grain 的啟動。 如果所有回應皆否,則在此叢集中建立新的啟動。 否則,會使用遠端的啟動 (並在本機目錄中快取該啟動的參考)。

適用於一個叢集一個執行個體 Grain 的通訊協定

一個叢集一個執行個體的 Grain 之間不會進行叢集內通訊。 這些 Grain 只會在每個叢集內部獨立使用標準的 Orleans 機制。 在 Orleans 架構本身內部,以 OneInstancePerClusterAttribute 標示的 Grain 類別如下:

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

不確定的啟動

如果 GSI 通訊協定在 3 次重試 (或設定參數 GlobalSingleInstanceNumberRetries 指定的任何數字) 後仍未收到來自所有叢集的最終回應,通訊協定會樂觀地在本機建立新的「不確定」啟動,優先達到可用性而非一致性。

不確定的啟動可能會有重複 (因為在 GSI 通訊協定啟動期間未回應的某些遠端叢集仍可能有此 Grain 的啟動)。 因此,系統定期每隔 30 秒會針對不確定的啟動 (或設定參數 GlobalSingleInstanceRetryInterval 指定的任何間隔) 再次執行 GSI 通訊協定。 這可以確保一旦還原叢集之間的通訊,就可以偵測到並移除重複的啟動。