動手做自己的雲計算

2021-05-26 00:09:09 字數 2864 閱讀 1722

面對雲計算,有的人越來越糊塗,經常聽到有人用雲裡霧裡來形容現在的雲計算。雲計算系統確實是乙個龐大和綜合的系統,即使是國際大公司也不敢貿然進軍雲計算領域,大量的企業不是將自己的傳統技術優勢稱為雲計算,就是雷聲大雨點小的觀望。一般開發者更是不適應在機群的環境下工作,所以本章將用乙個簡單的例子來展現雲計算的基本特點和技術開發方式,我們並不保證這個系統是乙個完善的系統,但它具備了雲計算的一些基本特點如計算和儲存的整合、計算向儲存的遷移、檔案的分布式儲存、計算的並行化等,我們對這些功能採用了最簡單的實現方法以使大多數讀者能從中體會到雲計算技術的核心理念,所以我們命名這個系統為雲計算

v0.01

,執行環境為

windows

。我們進行系統總體結構設計時主要著眼於雲計算基本特徵的實現,不考慮系統中很多細節性的要求和高階要求,並採用中等水平的讀者能完成的難度設計。

設計需要實現的基本功能如下。 (

1)向開發雲應用的客戶提供可以呼叫的

api函式,利用

api函式實現對雲計算系統的訪問。 (

2)實現分布式的檔案儲存。 (

3)實現計算向儲存的遷移,使計算和儲存在同乙個節點完成,避免資料在網路中的傳送。 (

4)向使用者隔離計算的並行性和儲存的分布性,使用者無需關心系統具體的操作過程。 (

5)初步實現對資料求和及求最大值的處理,演示雲計算的基本特點。讀者可以通過增加處理函式實現更多的計算功能。

雲計算v0.01

系統是乙個完全模型化的實驗用系統,開發和執行環境為

windows

系統,通過對該系統的學習使讀者對雲計算技術的基本要點有一定的了解,雲計算

v0.01

將雲計算裝置分為

3個角色:管理節點、子節點和客戶端。管理節點和子節點構成了雲計算的伺服器端,客戶端通過對

api的呼叫實現對雲計算系統的訪問,並通過

api集成為不同的應用程式。為了簡化系統的設計難度,我們在做雲計算

v0.01

時限定所做的計算任務包括對大資料量陣列求和、求最大值等操作,讀者可通過實際的系統體會儲存的分布化與計算的並行化的關係,並理解計算向儲存遷移的作用。雲計算

v0.01

沒有實現儲存的副本策略,因此暫時不能處理節點失效的問題,這也是為了降低系統難度的需要。以下的系統架構方法僅供參考和學習,並且不代表我們贊成這一架構,不同的讀者可以設計不同的系統架構。

系統的整個架構如圖

8.1所示,這種架構方式是乙個以客戶端為核心的架構方法,系統中的所有操作指令均由客戶端發出,管理節點不和任一子節點作資料和指令的通訊,管理節點的作用主要是維護

root.dat

和node.dat

兩個系統檔案。

root.dat

檔案儲存著現在系統中已註冊的使用者名稱及該使用者所對應的檔案分塊描述檔案所在節點的

ip位址,系統利用這一檔案可實現使用者的註冊、認證及使用者登入後獲得檔案分塊描述檔案所在節點的

ip位址。

node.dat

檔案則維護著整個雲計算系統所有子節點的

ip位址、埠、最大空間、剩餘空間等資訊,客戶端通過該檔案能夠獲得整個機群的資訊,從而實現向各子節點的直接連線。客戶端從管理節點獲得了相關的系統資訊後將根據這一資訊直接向各個子節點發起連線,完成檔案儲存及計算的功能,這大大提高了資料傳輸的速率,減輕了管理節點的負荷。各使用者檔案的具體分塊和儲存方式被系統用該使用者的使用者名稱(

username

)作為檔名的檔案分塊描述檔案儲存於其中的乙個子節點,這一子節點的

ip可在

root.dat

檔案中找到。

圖8.1

雲計算v0.01

的系統結構

在雲計算

v0.01

系統中不同角色間存在兩類資料的傳送:一類是命令資料

cmd,管理節點和子節點通過命令資料判斷自己下一步所要完成的任務;一類是資訊資料,這類資料是系統要完成相關任務所需要資料,如系統描述資訊、檔案資訊等,這類資料的資料量相對較大。由於採用了計算向儲存的遷移策略,系統中出現使用者檔案資料傳輸的情況很少,這大大提高了系統的執行效率。

系統在進行檔案儲存時先通過客戶端連線管理節點,讀取

root.dat

檔案資料,檢驗是否有該使用者存在,並獲取使用者資料塊檔案所在節點的

ip位址。通過讀取

node.dat

檔案從管理節點讀取子節點的

ip位址的列表,根據以上資訊完成對資料的分割,啟動多執行緒函式同時連線各子節點將資料分別儲存在各個節點上,最後更新

username

表以備訪問時重新找到檔案的分布情況。

uesername

檔案將被儲存於某一節點上,管理節點會根據現有

username

檔案的分布情況向使用者分配乙個節點的

ip位址存放

username

檔案,檔名就是該使用者的使用者名稱,由於使用者名稱在系統中是惟一的,所以每個使用者的

username

也是惟一的,不會造成混亂,如圖

8.2所示。

圖8.2

檔案的分布式儲存流程

如圖8.3

所示,在雲計算

v0.01

系統中,我們利用獲得的使用者名稱、檔名、資料塊號以及資料分塊資訊檔案的

ip位址資訊,可以惟一地確定任一資料塊的位置和檔名,客戶端同時向各個子節點傳送啟動計算的命令,各節點就地讀取資料塊本地檔案,並對其進行計算,計算完成後發送回客戶端彙總得到最後的結果。

圖8.3

計算與儲存的整合流程

這一計算過程不用移動任何資料,對於資料的處理就在儲存資料塊的節點完成,系統根據客戶端的指令,將計算遷移到節點上分布式的完成,大大提高了計算效率,避免了資料在網路中的大量流動所造成的效率下降,對於海量資料來說,這一做法的效果是相當明顯的。對於不同的資料,我們可以定義不同的資料處理方法,從而擴充套件系統的應用領域。

自己動手做網線

幾天沒在,公司位置上的網線就不翼而飛了,鬱悶,還是要硬著頭皮再到人事處申請做一根。可問題又來了,上次還是請別人幫我做的,現在怎麼好意思再求他呢。無奈,我決定自己嘗試做一下,其實也沒有什麼難的,只是從沒做過,心裡沒底,更怕不小心做壞了 還是到人事拿材料,甚是麻煩的。鼓了下勇氣,我就開始自己動手做了。之...

自己動手做爬蟲7

深入物件與類import sys class player def init self,uid,name,status 0,level 0 self.uid uid self.name name self.status status self.level level class player2 ob...

自己動手做Arduino玩具(二)

雖然定下來要做這個玩具,但一下子是完成不了這麼多的功能的。那我們先做乙個簡單的東西,接著再迭代更新。首先,我們先做乙個簡單的靶。這個靶我選用的是乙個紅外的接收管來做,簡單來,就是用乙個紅外發射器作為槍,用紅外置收管作為靶,如果這個靶收到紅外線的訊號,那麼就當成是打中靶了。經過我一輪的比較及在 上買買...