1. 程式人生 > 實用技巧 >微軟分散式雲端計算框架Orleans(2):容災與叢集(1)

微軟分散式雲端計算框架Orleans(2):容災與叢集(1)

閱讀目錄

在上一篇:微軟分散式雲端計算框架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:[email protected]



如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!歡迎各位轉載,轉載文章之後須在文章頁面明顯位置給出作者和原文連線,謝謝。
歡迎大家關注微訊號。掃下面的二維碼或者收藏下面的二維碼關注吧(長按下面的二維碼圖片、並選擇識別圖中的二維碼)

出處:https://www.cnblogs.com/ants/p/5126723.html