Orleans 粒紋目錄
粒紋具有穩定的邏輯身分識別,且可能會在應用程式生命週期內多次啟動 (具現化) 並停用,但在任何時間點最多只會有一個粒紋啟動。 每次啟動粒紋時,其可能會放在叢集中的不同定址接收器上。 在叢集中啟動粒紋時,其會在全域登錄、粒紋目錄中進行註冊。 這可確保該粒紋的後續調用將會傳遞至該粒紋啟動,且不會建立該粒紋的其他任何啟動 (執行個體)。 粒紋目錄負責保留粒紋身分識別之間的對應,以及 (定址接收器) 其目前啟動的所在位置。
根據預設,Orleans 會使用內建的分散式記憶體內目錄。 此目錄最終會一致,並以分散式雜湊表的形式,跨叢集中的所有定址接收器進行分割。
從 3.2.0 開始,Orleans 也支援可插入的粒紋目錄實作。
3.2.0 版本中包含兩個這類外掛程式:
- Azure 資料表實作:Microsoft.Orleans.GrainDirectory.AzureStorage
- Redis 存放區實作:Microsoft.Orleans.GrainDirectory.Redis
您可以設定要以每個粒紋類型為基礎使用的粒紋目錄實作,甚至可以插入實作。
您應該使用哪一個粒紋目錄?
建議您一律從預設的粒紋目錄 (內建記憶體內部分散式目錄) 開始。 即使最終為一致,且在叢集不穩定時允許偶爾重複啟動,但內建目錄本身就已足夠,不需要任何外部相依性、不需要任何設定,且已在整個生產環境中使用。
當您有一些體驗 Orleans 且具有更強單一啟用保證且/或想要將叢集中的尋址接收器關閉時所停用的粒紋數目降到最低時,請考慮使用以記憶體為基礎的粒紋目錄實作,例如 Redis 實作。 請先嘗試將其用於一或幾個粒紋類型,從長時間存留且具有大量狀態或昂貴的初始化程序開始。
組態
根據預設,您不需要執行任何動作;記憶體內部粒紋目錄將會自動使用,並分割到整個叢集。 如果您想要使用非預設的粒紋目錄組態,則必須指定所要使用的目錄外掛程式名稱。 這可透過粒紋類別上的屬性與相依性插入,以及在定址接收器設定期間使用該名稱的目錄外掛程式來完成。
粒紋設定
使用 GrainDirectoryAttribute 指定粒紋目錄外掛程式名稱:
[GrainDirectory(GrainDirectoryName = "my-grain-directory")]
public class MyGrain : Grain, IMyGrain
{
// ...
}
定址接收器設定
在這裡,我們會設定 Redis 粒紋目錄實作:
siloBuilder.AddRedisGrainDirectory(
"my-grain-directory",
options => options.ConfigurationOptions = redisConfiguration);
Azure 粒紋目錄的設定方式如下:
siloBuilder.AddAzureTableGrainDirectory(
"my-grain-directory",
options => options.ConnectionString = azureConnectionString);
您可以使用不同的名稱來設定多個目錄,以用於不同的粒紋類別:
siloBuilder
.AddRedisGrainDirectory(
"redis-directory-1",
options => options.ConfigurationOptions = redisConfiguration1)
.AddRedisGrainDirectory(
"redis-directory-2",
options => options.ConfigurationOptions = redisConfiguration2)
.AddAzureTableGrainDirectory(
"azure-directory",
options => options.ConnectionString = azureConnectionString);