Orleans[NET Core 3.1] 學習筆記(三)( 3 )服務端配置

来源:https://www.cnblogs.com/amber-L/archive/2019/12/16/12048972.html
-Advertisement-
Play Games

服務端配置 Silo通過 和許多補充選項類以編程方式進行配置。 Silo配置有幾個關鍵方面: + Orleans集群信息 + 集群提供程式(不知道咋翻譯) + Silo到Silo和Client到Silo通信的端點 + 應用部分 這是Silo配置的示例,該Silo配置定義群集信息,使用Azure群集並 ...


服務端配置

Silo通過SiloHostBuilder和許多補充選項類以編程方式進行配置。

Silo配置有幾個關鍵方面:

  • Orleans集群信息
  • 集群提供程式(不知道咋翻譯)
  • Silo到Silo和Client到Silo通信的端點
  • 應用部分

這是Silo配置的示例,該Silo配置定義群集信息,使用Azure群集並配置應用程式部分:

var silo = new SiloHostBuilder()
    // 集群信息
    .Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "my-first-cluster";
        options.ServiceId = "AspNetSampleApp";
    })
    // 群集提供程式
    .UseAzureStorageClustering(options => options.ConnectionString = connectionString)
    // 埠設置
    .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
    // 應用程式部分:只需引用我們使用的一個grain實現類即可
    .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(HelloGrain).Assembly).WithReferences())
    // 創建Silo!
    .Build();

註意:使用UseAzureStorageClustering需要引用Microsoft.Orleans.Clustering.AzureStorage

下麵讓我們細分該示例中使用的步驟:

Orleans集群信息

    [...]
    // 集群信息
    .Configure<ClusterOptions>(options =>
    {
        options.ClusterId = "my-first-cluster";
        options.ServiceId = "AspNetSampleApp";
    })
    [...]

這裡我們做了兩件事:

將設置ClusterId為"my-first-cluster":這是Orleans集群的唯一ID。使用此ID的所有客戶端和Silo將能夠直接相互通信。但是,您可以選擇ClusterId對不同的部署使用不同的名稱。
設置ServiceId為"AspNetSampleApp":這是您的應用程式的唯一ID,將由某些提供程式(例如持久性提供程式)使用。此ID應該保持穩定,並且在整個部署中都不應更改。

集群提供商(什麼鬼)

    [...]
    // 群集提供程式
    .UseAzureStorageClustering(options => options.ConnectionString = connectionString)
    [...]

通常,基於Orleans構建的服務會部署在專用硬體或Azure上的節點群集上。對於開發和基本測試,可以將Orleans部署在單節點配置中。當部署到節點集群中時,Orleans內部實現一組協議以發現和維護集群中Orleans孤島的成員身份,包括節點故障檢測和自動重新配置。

為了可靠地管理群集成員身份,Orleans使用Azure Table,SQL Server或Apache ZooKeeper進行節點同步。

在此示例中,我們使用Azure Table作為成員資格提供程式。(現在微軟官網的東西都在推Azure,但是用它多少還是有點麻煩,還好能用SQL Server,後面的筆記中,我更多的可能會去使用SQL Server)

var silo = new SiloHostBuilder()
    [...]
    // 埠設置
    .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
    [...]

Orleans的Silo有兩種典型的端點配置類型:

Silo到Silo的端點,用於同一集群中Silo之間的通信
客戶端到Silo(或網關),用於同一集群中的客戶端和Silo之間的通信
在示例中,我們使用幫助程式方法.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000),該方法將用於Silo到Silo通信11111的埠設置為,將網關的埠設置為30000。此方法將檢測要監聽的介面。

在大多數情況下,此方法應該足夠了,但是如果需要,我們可以進一步對其進行自定義。

下麵是一個如何通過一些埠轉發使用外部IP地址的示例:

[...]
.Configure<EndpointOptions>(options =>
{
    // 用於 Silo-to-Silo 的埠
    options.SiloPort = 11111;
    //  gateway 的埠
    options.GatewayPort = 30000;
    // 在集群中進行註冊的IP地址
    options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42");
    // 用於監控 silo-to-silo 通信的埠
    options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000);
    // The socket used by the gateway will bind to this endpoint
    options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000);

})
[...]

在內部,Silo將偵聽0.0.0.0:400000.0.0.0:50000,但是在成員資格提供程式中發佈的值將是172.16.0.42:11111172.16.0.42:30000

應用部分

    [...]
    // Application parts: just reference one of the grain implementations that we use
    .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences())
    [...];

儘管從技術上來說這不是必需的步驟(如果未配置,Orleans將掃描當前文件夾中的所有程式集),但鼓勵開發人員進行配置。此步驟將幫助Orleans載入用戶程式集和類型。這些組件稱為應用程式零件。所有粒度,粒度介面和序列化程式都是使用“應用程式部件”發現的。

應用部件使用配置IApplicationPartsManager,這可以使用IClientBuilderISiloHostBuilder下的ConfigureApplicationParts擴展方法。該ConfigureApplicationParts方法接受委托Action<IApplicationPartManager>

以下擴展方法IApplicationPartManager支持常用功能:

  • AddApplicationPart(assembly)可以使用此擴展方法添加單個裝配件。
  • AddFromAppDomain()添加當前載入到中的所有程式集AppDomain。
  • AddFromApplicationBaseDirectory()在當前基本路徑中載入並添加所有程式集(請參閱參考資料AppDomain.BaseDirectory)。

通過上述方法添加的程式集可以在其返回類型上使用以下擴展方法進行補充IApplicationPartManagerWithAssemblies

  • WithReferences()從添加的零件中添加所有引用的裝配。這將立即載入所有傳遞引用的程式集。程式集載入錯誤將被忽略。
  • WithCodeGeneration()為添加的零件生成支持代碼,並將其添加到零件管理器中。請註意,這要求Microsoft.Orleans.OrleansCodeGenerator安裝該軟體包,通常稱為運行時代碼生成。

類型發現要求提供的應用程式部分包括特定屬性。建議將構建時代碼生成程式包(Microsoft.Orleans.CodeGenerator.MSBuildMicrosoft.Orleans.OrleansCodeGenerator.Build)添加到每個包含Grains,Grain介面或序列化程式的項目中,以確保存在這些屬性。生成時代碼生成僅支持C#。對於F#,Visual Basic和其他.NET語言,可以通過上述WithCodeGeneration()方法在配置期間生成代碼。有關代碼生成的更多信息,請參見相應的部分

便捷路由

目錄Orleans[NET Core 3.1] 學習筆記(一).NET環境下的分散式應用程式

上一節Orleans[NET Core 3.1] 學習筆記(三)( 2 )客戶端配置

下一節Orleans[NET Core 3.1] 學習筆記(四)( 1 )創建項目


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 時間如流水,只能流去不流回! 點贊再看,養成習慣,這是您給我創作的動力! 本文 Dotnet9 https://dotnet9.com 已收錄,站長樂於分享dotnet相關技術,比如Winform、WPF、ASP.NET Core等,亦有C++桌面相關的Qt Quick和Qt Widgets等,只分 ...
  • 一、非同步方法返回類型 只能返回3種類型(void、Task和Task<T>)。 1.1、void返回類型:調用方法執行非同步方法,但又不需要做進一步的交互。 class Program { static void Main(string[] args) { #region async & await入 ...
  • 現在,當談論起 RESTful Web API 的時候,人們總會想到 JSON。但是實際上,JSON 和 RESTful API 沒有半毛錢關係,只不過 JSON 恰好是RESTful API 結果的表述格式。也就是說 RESTful API 還可以使用其它的表述格式,例如 xml 或私有的格式。這 ...
  • 1、安裝 安裝ftp:yum install -y vsftpd 將ftp設置開機啟動:systemctl enable vsftpd.service 2、配置 安裝好後在ftp配置文件里進行配置 : vim /etc/vsftpd/vsftpd.conf 在viw中使用命令 :set number ...
  • 在實際業務系統中,當單個資料庫不能承載負載壓力的時候,一般我們採用資料庫讀寫分離的方式來分擔資料庫負載。主庫承擔寫以及事務操作,從庫承擔讀操作。 為了支持多種資料庫我們先定義一個數據類型字典。key為連接字元串,value為資料庫類型: /// <summary> /// 資料庫方言集合 /// < ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...