服務(wù)端配置Silo通過 Silo配置有幾個關(guān)鍵方面:
這是Silo配置的示例,該Silo配置定義群集信息,使用Azure群集并配置應(yīng)用程序部分: var silo = new SiloHostBuilder()
// 集群信息
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "AspNetSampleApp";
})
// 群集提供程序
.UseAzureStorageClustering(options => options.ConnectionString = connectionString)
// 端口設(shè)置
.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
// 應(yīng)用程序部分:只需引用我們使用的一個grain實現(xiàn)類即可
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
// 創(chuàng)建Silo!
.Build();注意:使用 下面讓我們細(xì)分該示例中使用的步驟: Orleans集群信息 [...]
// 集群信息
.Configure<ClusterOptions>(options =>
{
options.ClusterId = "my-first-cluster";
options.ServiceId = "AspNetSampleApp";
})
[...]這里我們做了兩件事: 將設(shè)置ClusterId為"my-first-cluster":這是Orleans集群的唯一ID。使用此ID的所有客戶端和Silo將能夠直接相互通信。但是,您可以選擇ClusterId對不同的部署使用不同的名稱。 集群提供商(什么鬼)[...] // 群集提供程序 .UseAzureStorageClustering(options => options.ConnectionString = connectionString) [...] 通常,基于Orleans構(gòu)建的服務(wù)會部署在專用硬件或Azure上的節(jié)點群集上。對于開發(fā)和基本測試,可以將Orleans部署在單節(jié)點配置中。當(dāng)部署到節(jié)點集群中時,Orleans內(nèi)部實現(xiàn)一組協(xié)議以發(fā)現(xiàn)和維護(hù)集群中Orleans孤島的成員身份,包括節(jié)點故障檢測和自動重新配置。 為了可靠地管理群集成員身份,Orleans使用Azure Table,SQL Server或Apache ZooKeeper進(jìn)行節(jié)點同步。 在此示例中,我們使用Azure Table作為成員資格提供程序。(現(xiàn)在微軟官網(wǎng)的東西都在推Azure,但是用它多少還是有點麻煩,還好能用SQL Server,后面的筆記中,我更多的可能會去使用SQL Server) 端口var silo = new SiloHostBuilder() [...] // 端口設(shè)置 .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000) [...] Orleans的Silo有兩種典型的端點配置類型: Silo到Silo的端點,用于同一集群中Silo之間的通信 在大多數(shù)情況下,此方法應(yīng)該足夠了,但是如果需要,我們可以進(jìn)一步對其進(jìn)行自定義。 下面是一個如何通過一些端口轉(zhuǎn)發(fā)使用外部IP地址的示例: [...]
.Configure<EndpointOptions>(options =>
{
// 用于 Silo-to-Silo 的端口
options.SiloPort = 11111;
// gateway 的端口
options.GatewayPort = 30000;
// 在集群中進(jìn)行注冊的IP地址
options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42");
// 監(jiān)聽的silo 遠(yuǎn)程連接點
options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000);
// 監(jiān)聽的silo 遠(yuǎn)程端口連接點
options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000);
})
//監(jiān)聽的主silo 遠(yuǎn)程連接點 為空則創(chuàng)建一個主silo連接點
.UseDevelopmentClustering(new IPEndPoint(IPAddress.Parse("192.168.8.1"),11111))
[...]在內(nèi)部,Silo將偵聽 應(yīng)用部分[...] // Application parts: just reference one of the grain implementations that we use .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences()) [...]; 盡管從技術(shù)上來說這不是必需的步驟(如果未配置,Orleans將掃描當(dāng)前文件夾中的所有程序集),但鼓勵開發(fā)人員進(jìn)行配置。此步驟將幫助Orleans加載用戶程序集和類型。這些組件稱為應(yīng)用程序零件。所有粒度,粒度接口和序列化程序都是使用“應(yīng)用程序部件”發(fā)現(xiàn)的。 應(yīng)用部件使用配置 以下擴(kuò)展方法
通過上述方法添加的程序集可以在其返回類型上使用以下擴(kuò)展方法進(jìn)行補(bǔ)充
類型發(fā)現(xiàn)要求提供的應(yīng)用程序部分包括特定屬性。建議將構(gòu)建時代碼生成程序包( |
|
|