Orleans的集群构建
聽聞一周前,微軟公布了.net core2.0,以及各種各樣的其他core2.0.大家都很興奮.微媽的誠意真是滿滿的.這次開源勢頭讓我感覺到了微媽的技術實力之雄厚.我在這里祝福C#越來越好.細心的人似乎發現Orleans在github中是和net core分在一起的.Orleans的2.0何時發布呀…
現在我們面對的Orleans1.5(github上是1.6)已經是一個成熟的框架了.涉及到分布式的方方面面,我突然覺得我原來暫定的8篇文章都介紹不完全.我盡量介紹完整,至少讓大家能入門,后邊的修行就看大家自己的努力了.如果讀者中有人能夠和我分享,與我共同討論我也是非常歡迎的.我的聯系方式在第一篇文章中這里就不再復述了.
我現在利用<Orleans簡單配置>文章中介紹的內容,配置一個可以分布式的silo,觀察它們的行為.這里只介紹2種,其余的配置方式往讀者自己研究.
我先說利用sql server數據庫作為"服務自我發現"的服務
還是跟以前一樣,我一步一步來.
基于SQL server的集群步驟
回顧之前的文章中在集群中客戶端配置應該是這個模樣:
?
這里解釋一下,還記得持久化中配置文件的主體是什么嗎?對了是<StorageProviders>節.這個節的內容定義了Orleans在持久化時,要利用的存儲中間件的各種參數.
而我們這里要利用的是<SystemStore>,它定義了與"系統"相關的變量應該存儲在哪里.我只要定義好<SystemStore>后Orleans就會自動使用服務發現.
由于Orleans使用MembershipTable 來控制silo與silo的關系變化(誰加入了集群,誰離開了集群等等)如果配置好了<SystemStore>,這個MembershipTable就會存儲在數據庫中.所有的silo都要以數據庫中的成員關系表為標準.這個表長成這個樣子
其中有一個字段就是silo的地址.因此silo可以發現其他的silo,它們可以構成一個集群,而client可以發現集群內所有的silo.從而與集群互動.
按照以上討論,我修改了一下配置文件.如下.
此處client也需要配置,因為client也需要讀取成員關系表,以便知道所有silo的地址和狀態.為了使client可以利用<SystemStore>必須在client里引用OrleansSQLUtils以及System.Data.SqlClient的包,
運行一下,就會有如下截圖
再運行一個.找到host.exe,我們雙擊后再運行一個,會看到錯誤,這是因為silo配置文件中指明了一些端口,這些端口已經被第一個silo占用了,所以我修改一些host的配置文件,再次運行,會得到如下截圖
我們看到先啟動的silo發現了新加入的silo.讀者可以再次實驗silo離開后的情況.
此時我讓client運行,就會得到如下截圖
可以看到client發送的消息均衡負載地再兩個silo內執行.
?
至此一個基于sql server的簡單silo集群就搭建完畢…這個集群雖然簡單,但是滿足所有高級的特性,擴展性和穩定性雙優.是居家旅行的良好解決方案.只要有一個silo存活,這個集群就不會倒..
?
基于consul的集群
下文將介紹一下,另一個輕量級的集群實現.這個實現的步驟來自于官方教程.我再剛開始學習Orleans的時候,曾經使用這個步驟構建過集群.因為這個步驟是官方教程里一個最為詳細的步驟,所以我就照做了.
1.????創建一個文件夾用來放置consul 比如 c:\consul.
2.????創建一個子文件夾放置數據 比如 c:\consul\data(consul不會自己創建.)
3.????下載并解壓consul到c:\consul
4.????打開cmd,轉至 c:\consul
5.????運行 Consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client=0.0.0.0
agent 指示consul新運行承載服務的代理進程,如果缺少這個參數 consul進程就嘗試使用RPC來配置一個正在運行的代理進程
-server 指明這個代理進程是服務而不是client(一個consul client承載著所有的服務和數據,但是它沒有權利投票,也沒有可能成為consul集群領導)
-bootstrap consul集群中的第一個節點必須是有這個參數,它同時也是consul集群的領導.(單實例consule,,無所謂了)
-data-dir [path] 指明數據存儲地址
-client=0.0.0.0 指明consule的服務地址
還有很多其他的consule參數.它們可以用json文件來配置,閱讀consul文章來詳細了解
確保consul已經運行了,請在瀏覽器里輸入以下網址http://localhost:8500/v1/catalog/services 看看
6. 配置服務器
<OrleansConfiguration xmlns="urn:orleans"><Globals><SystemStore SystemStoreType="None" DataConnectionString="http://localhost:8500" DeploymentId="MyOrleansDeployment" /></Globals><Defaults><Networking Address="localhost" Port="22222" /><ProxyingGateway Address="localhost" Port="30000" /></Defaults></OrleansConfiguration>
并在host項目中的program.cs中,手動增加以下內容
silohost.Config.Globals.LivenessType = GlobalConfiguration.LivenessProviderType.Custom;silohost.Config.Globals.MembershipTableAssembly = "OrleansConsulUtils";silohost.Config.Globals.ReminderServiceType = GlobalConfiguration.ReminderServiceProviderType.Disabled;silohost.InitializeOrleansSilo();?
官方解釋說:????Consul的xml配置文件,Orleans在解析的時候有點小bug所以要在代碼中控制一下.我在搭配的時候就采用了這個,但是我并沒有驗證此bug是否依然存在(官方教程是1.2的,我寫的時候已經是1.5了).
好了這樣一個基于consul的集群就構建好了.
經過以上的文章介紹,Orleans主要方面都或多或少的涉及到了,我寫這系列文章的目的也快要達到了.除去一個方面,那就是eventSourcing.由于EventSourcinig是個復雜的事情,我需要組織語言,而且最近家里私事很多.也許下一篇文章放出的時候會很晚.因為接下來我沒有太多時間.
相關文章:?
.NET的Actor模型:Orleans
微軟分布式云計算框架Orleans(1):Hello World
微軟分布式云計算框架Orleans(2):容災與集群(1)
Aaron Stannard談Akka.NET 1.1
使用Akka.net開發第一個分布式應用
Orleans入門例子
Orleans例子再進一步
Orleans稍微復雜的例子—互動
Orleans簡單配置
Orleans配置---持久化
Orleans—一些概念
原文地址:http://www.cnblogs.com/gaopang/p/7419732.html
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的Orleans的集群构建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core+Selenium+G
- 下一篇: .NET Core 在程序集中集成Raz