微軟分布式雲計算框架Orleans(2):容災與集群(1)


    在上一篇:微軟分布式雲計算框架Orleans(1):Hello World,我們大概了解了Orleans如何運用,當然上一篇的例子可以說是簡單且無效的,因為用了Orleans不可能只寫一個Hello World吧,Orleans是為分布式和雲計算而生的框架,那么今天我們就簡單說一說容災、集群、容災與集群在Orleans中的運用。

集群是什么?

下面摘抄自百度百科:

    集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中的核心技術。

    集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,並以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用於提高可用性和可縮放性。

簡單的概述一下就是:通過技術手段將多台計算機(服務器)組合成“一台計算器”對外提供計算服務。

容災是什么?

下面摘抄自百度百科:

    容災系統是指在相隔較遠的異地,建立兩套或多套功能相同的IT系統,互相之間可以進行健康狀態監視和功能切換,當一處系統因意外(如火災、地震等)停止工作時,整個應用系統可以切換到另一處,使得該系統功能可以繼續正常工作。容災技術是系統的高可用性技術的一個組成部分,容災系統更加強調處理外界環境對系統的影響,特別是災難性事件對整個IT節點的影響,提供節點級別的系統恢復功能。

簡單的概述一下就是:當一些服務器不可用時可以切換到可用的備用服務器上,提高服務的可用性。

容災和集群的關系?

    個人認為容災是一種需求,目的,目標,而集群是一種技術手段,使用集群可以提供可用性和可縮放性,那么也解決了容災的問題,當然方式不僅限於集群鏡像站點也能解決容災問題。就好比IOC和DI的關系一樣。

搭建Orleans集群

一個簡單的集群

針對上一篇的經驗,這一次將“Sample.Interfaces”和“Sample.Implements”層的Grain進行了一些變更,代碼如下:

image

image

代碼邏輯沒有變,但更貼近Grain的意圖,下面我們看看客戶端的調用。

image

可以看到這一次將手機號碼當做key傳給了Grain,這樣更符合Actor思想,感覺有點像RESTful。

下面來看看需要集群的服務端:

其實在上次的demo基礎上不需要改任何代碼就可以實現集群了,但為了不拷貝多份程序,我對Server端加載配置文件和設置節點名稱做了動態的輸入,代碼如下:

image

沒有太多的變化,只是可以指定加載哪一個配置文件和啟動哪個節點,下面我們重點看看Orleans的配置文件。

image

最終的配置文件效果如下,我們先運行看一下效果再回頭來看配置文件。

首先啟動Server.exe,輸入“OrleansConfiguration”

image

在輸入節點名稱:“node1”,等待啟動完成。

image

接着我們運行一個客戶端程序。

image

進行測試。

image

Server.exe會出現我處理了一個請求,代表邏輯正常。接着我們在運行一個Server.exe

配置文件名稱為:“OrleansConfiguration”,節點名稱為:“node2”。

等待啟動完成。

image

繼續切換到client進行測試,將會出現如下結果:

image

代表請求被分發了,分發的規則由orleans控制,如果你願意可以再啟動多個Server.exe進行集群。可以是node3、node4、nodeN。

接着我們關閉node2(按回車關閉,不要直接關閉窗口)繼續切換到Client進行測試。

image發現還是可以正常請求。

這樣一個簡單的集群就完成了。

這種集群是利用了orleans提供的“MembershipTable”方式,這在正式環境是不推薦使用的只推薦在開發時使用,為了簡單演示功能本次將以這個方式為主進行簡單的說明。

Demo源碼:https://github.com/majian159/Samples/tree/master/OrleansSamples/Clusters

配置文件

下面我們再回頭看看配置文件。

image

重點在我圈出的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管理者的角色分配給應該負責的人。

請求結構

繪圖2

Next

下一篇會說下如何將soli管理者的角色分擔出去,分擔的方式orleans提供了:MySQL,SQL Server、Zookeeper、Azure Table。

當然不會一一說明,應為都差不多,可能選擇MySQL或SQL Server。

交流方式

QQ群:384413261(RabbitHub)

Email:majian159@live.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM