在上一篇:微軟分布式雲計算框架Orleans(1):Hello World,我們大概了解了Orleans如何運用,當然上一篇的例子可以說是簡單且無效的,因為用了Orleans不可能只寫一個Hello World吧,Orleans是為分布式和雲計算而生的框架,那么今天我們就簡單說一說容災、集群、容災與集群在Orleans中的運用。
集群是什么?
下面摘抄自百度百科:
集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。
集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用於提高可用性和可縮放性。
簡單的概述一下就是:通過技術手段將多台計算機(服務器)組合成“一台計算器”對外提供計算服務。
容災是什么?
下面摘抄自百度百科:
容災系統是指在相隔較遠的異地,建立兩套或多套功能相同的IT系統,互相之間可以進行健康狀態監視和功能切換,當一處系統因意外(如火災、地震等)停止工作時,整個應用系統可以切換到另一處,使得該系統功能可以繼續正常工作。容災技術是系統的高可用性技術的一個組成部分,容災系統更加強調處理外界環境對系統的影響,特別是災難性事件對整個IT節點的影響,提供節點級別的系統恢復功能。
簡單的概述一下就是:當一些服務器不可用時可以切換到可用的備用服務器上,提高服務的可用性。
容災和集群的關系?
個人認為容災是一種需求,目的,目標,而集群是一種技術手段,使用集群可以提供可用性和可縮放性,那么也解決了容災的問題,當然方式不僅限於集群鏡像站點也能解決容災問題。就好比IOC和DI的關系一樣。
搭建Orleans集群
一個簡單的集群
針對上一篇的經驗,這一次將“Sample.Interfaces”和“Sample.Implements”層的Grain進行了一些變更,代碼如下:
代碼邏輯沒有變,但更貼近Grain的意圖,下面我們看看客戶端的調用。
可以看到這一次將手機號碼當做key傳給了Grain,這樣更符合Actor思想,感覺有點像RESTful。
下面來看看需要集群的服務端:
其實在上次的demo基礎上不需要改任何代碼就可以實現集群了,但為了不拷貝多份程序,我對Server端加載配置文件和設置節點名稱做了動態的輸入,代碼如下:
沒有太多的變化,只是可以指定加載哪一個配置文件和啟動哪個節點,下面我們重點看看Orleans的配置文件。
最終的配置文件效果如下,我們先運行看一下效果再回頭來看配置文件。
首先啟動Server.exe,輸入“OrleansConfiguration”
在輸入節點名稱:“node1”,等待啟動完成。
接着我們運行一個客戶端程序。
進行測試。
Server.exe會出現我處理了一個請求,代表邏輯正常。接着我們在運行一個Server.exe。
配置文件名稱為:“OrleansConfiguration”,節點名稱為:“node2”。
等待啟動完成。
繼續切換到client進行測試,將會出現如下結果:
代表請求被分發了,分發的規則由orleans控制,如果你願意可以再啟動多個Server.exe進行集群。可以是node3、node4、nodeN。
接着我們關閉node2(按回車關閉,不要直接關閉窗口)繼續切換到Client進行測試。
這樣一個簡單的集群就完成了。
這種集群是利用了orleans提供的“MembershipTable”方式,這在正式環境是不推薦使用的只推薦在開發時使用,為了簡單演示功能本次將以這個方式為主進行簡單的說明。
Demo源碼:https://github.com/majian159/Samples/tree/master/OrleansSamples/Clusters
配置文件
下面我們再回頭看看配置文件。
重點在我圈出的3行代碼。
SeedNode
silo(筒倉)地址這個地址是配置了我屬於某一個silo,某個silo可以使用我。
集群者需要連接到一個指定的silo中標識為我可以為這個silo提供計算請求。
Networking
silo終結點,供各個宿主(Server)連接到此,一個集群有且只有一個。
也就是集群者需要連接到一個地方的地址。
ProxyingGateway
代理網關,客戶端調用的通道。
客戶端發送請求的接收通道。
Override
重寫,可以根據節點名稱進行特定的配置,比如我們的node1才會對Networking和ProxyingGateway配置生效,node2,node3其它節點則不會不會。
關系
可以看出我們第一個運行的node1節點承擔了部分計算請求、silo管理的作用,node2則承擔了部分計算請求。實際的角色有3個。
1.計算者1
2.計算者2
3.silo管理者
而node1承載着1、3這兩個角色,這時候肯定會會有人提出疑問:“這樣壓力不還沒有分擔掉嗎?如果我的node1掛了就全完了?”
答案是肯定的,這也是為什么orleans不推薦在正式環境使用這種集群方式,后續章節中我們會介紹其它的集群方案,讓silo管理者的角色分配給應該負責的人。
請求結構
Next
下一篇會說下如何將soli管理者的角色分擔出去,分擔的方式orleans提供了:MySQL,SQL Server、Zookeeper、Azure Table。
當然不會一一說明,應為都差不多,可能選擇MySQL或SQL Server。
交流方式
QQ群:384413261(RabbitHub)
Email:majian159@live.com