三層CS分布式計算模型的設計和實現(xiàn)_第1頁
三層CS分布式計算模型的設計和實現(xiàn)_第2頁
三層CS分布式計算模型的設計和實現(xiàn)_第3頁
三層CS分布式計算模型的設計和實現(xiàn)_第4頁
三層CS分布式計算模型的設計和實現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、三層C/S分布式計算模型的設計和實現(xiàn)陳哲 文敦偉中南大學信息科學與工程學院智能研究所 湖南長沙 410083摘要:本文設計并實現(xiàn)了一個基于三層C/S(Client/Server,客戶端/服務器)模型的分布式計算通用模型來進行分布式計算。這種模型極大地提高了計算機的計算能力,為進行其它大數(shù)據(jù)量的計算提供了一種實際的解決方法。以計算某個范圍內的所有質數(shù)作為示例,模擬了進行其他的分布式計算的情況。關鍵詞:分布式系統(tǒng),三層客戶機/服務器模型,.NetDesign and implementation of a distributed computing system model based on C/

2、S modelAuthor: Chen Zhe Director: Wen DunweiAbstract: In this paper, a common distributed system model which based on Client/Server model of three layers has been designed and realized to carry on distributed computing. This model can highly increase computing ability of computers, and provides an u

3、seful solution for other computing of huge data. As a sample, we compute all the prime numbers in a certain range using this system, which simulates other conditions.Keywords: Distributed system, Client/Server model, .Net論文所屬類別:設計與實現(xiàn)第一作者簡介:陳哲,男,信息學院模式識別與智能系統(tǒng)專業(yè)2003級碩士研究生,研究方向為自然語言理解,機器學習,分布式系統(tǒng)等。1 引言隨

4、著計算機技術的發(fā)展和信息爆炸時代的來臨,人們對數(shù)據(jù)計算的需求越來越高,特別是大數(shù)據(jù)量的科學計算,是對計算機能力的一大挑戰(zhàn)。傳統(tǒng)的單機計算受到計算速度,計算容量的限制,已經(jīng)無法滿足需求。比如,在對機器學習和自然語言理解領域的研究和實現(xiàn)中,牽涉到數(shù)據(jù)的海量計算,用單機計算系統(tǒng)來實現(xiàn)是不切實際的。隨著計算機網(wǎng)絡技術的日益成熟,分布式計算(Distributed Computing)給出了新的解決辦法。面對不斷增長的應用和信息服務需求,傳統(tǒng)的軟件設計模式兩層的客戶機/服務器模式(Client/Server) 變得越來越不適應這種增長,三層應用體系結構的產生,解決了越來越龐大和復雜的客戶端使得網(wǎng)絡通信和

5、軟件的維護變得非常困難和昂貴所帶來的問題。本文將以計算某個范圍內的質數(shù)為例,基于以上兩種技術設計并實現(xiàn)了一種通用的分布式系統(tǒng)模型,使用這一模型可以構建各種分布式計算系統(tǒng)。2 分布式計算2.1 概述分布式系統(tǒng)是由兩臺或兩臺以上計算機組成的系統(tǒng), 具有物理上分布的物理資源和邏輯資源, 這些資源都是高度自治而相互合作地工作。參與這項工作的一定不只是一臺計算機,而是一個計算機網(wǎng)絡。我們的計算機具有兩種功能,一是它能夠存貯信息,即數(shù)據(jù)存儲功能;另一個功能是它能夠處理數(shù)據(jù)的能力,即計算能力。在分布式計算環(huán)境中,數(shù)據(jù)的處理不只是在一臺機器完成,而是多臺機器協(xié)作完成的。比如,為了處理一項工作P,它由兩部分工作

6、組成,PA和PB。如果我們把PA放在機器A中完成,PB處理放在機器B中完成,那么它們就形成了一個分布式的計算。2.2 負載平衡策略在分布式系統(tǒng)運行任務的時候,我們把每個計算機或計算單位稱為一個結點。有些結點運算能力強,于是很快進入任務空閑狀態(tài),而有些結點則處于任務重載狀態(tài)。這樣各個結點之間的任務調度就變得重要了,分布式系統(tǒng)實行全系統(tǒng)范圍內資源的靜態(tài)或者動態(tài)分配, 為了使系統(tǒng)得到最佳的資源分配和最好的資源共享的效果, 必須實現(xiàn)動態(tài)負載平衡。所謂的動態(tài)負載平衡是指根據(jù)系統(tǒng)當前的負載狀況, 把當前重載計算機上的任務傳送到輕載的計算機上執(zhí)行??梢允褂媒邮照唑寗硬呗詠磉M行任務的調度。其主要思想是由空閑結

7、點逐個向其它結點請求任務, 如果請求到任務, 那么就中止請求, 否則就繼續(xù)詢問下一個結點。若所有結點都沒有滿足請求, 那么請求結點就等待, 過一段時間后再發(fā)出任務請求。接收者驅動主要有下列幾個優(yōu)點: 不需要相互交換負載信息; 對于大規(guī)模并行計算問題, 當每個結點均處于重載狀態(tài)時, 幾乎不需要額外調度開銷; 負載平衡的許多工作由空閑結點來完成, 沒有給忙結點增加許多額外負擔。任務數(shù)據(jù)的保存也是這一問題的一個關鍵內容??梢詫?shù)據(jù)保存在各個結點上,但是由于任務遷移的時候要將整個任務在多個結點中傳輸,所以這樣通信的開銷非常大。可以用一臺服務器專門存放任務信息,稱為信息中心結點。系統(tǒng)中僅信息中心結點需要

8、記錄處于相同局域網(wǎng)內的其他非信息中心結點的負載信息,而各非信息中心結點僅需知道信息中心結點的位置。當某一非信息中心結點負載發(fā)生變化時,將負載信息向信息中心匯報即可。若負載變化后該非信息中心結點空閑,則按信息中心記載的信息從重載結點接收任務。這樣,每次的負載變化不需打擾相鄰結點,也不被相鄰結點打擾,提高了整個系統(tǒng)的效率。系統(tǒng)的物理結構如圖1所示。圖1 系統(tǒng)網(wǎng)絡物理結構3 三層客戶機/服務器模型如圖2所示,在三層應用體系結構中,整個系統(tǒng)是由三個部分組成: 表示層(即用戶界面)、事務層和數(shù)據(jù)層。表示層負責處理與用戶的交互和與應用服務器的交互。事務層負責處理應用邏輯,具體地說就是接受客戶機方應用程序的

9、請求,然后根據(jù)應用邏輯將這個請求轉化為數(shù)據(jù)請求后與數(shù)據(jù)層交互,并將與數(shù)據(jù)層交互的結果傳送給客戶機方的應用程序。數(shù)據(jù)層根據(jù)事務層發(fā)送的請求進行數(shù)據(jù)操作,并將操作的結果傳送給事務層。由于上述三層在邏輯上是相互獨立的,因此,在某一層內所進行的變更,對于其他的兩層而言是透明的,所以這種結構可以很好地適應復雜而又頻繁變化的系統(tǒng)。圖2 三層客戶機/服務器模型示意圖4 設計目標和實現(xiàn)環(huán)境本文提出了一個基于三層C/S(Client/Server,客戶端/服務器)模式的分布式系統(tǒng)的通用模型,來進行分布式計算。以計算某個范圍內的所有質數(shù)作為示例,模擬了進行其他的分布式計算的情況。系統(tǒng)采用三層客戶機/服務器模型,負

10、載均衡采用信息中心負載均衡策略。由一臺服務器作為信息中心,用來調度所有的任務分配。若干客戶端連接服務器,啟動策略采用接收者啟動算法。當客戶端空閑的時候從服務器上得到任務并執(zhí)行計算,完成之后把結果傳回給服務器。信息中心根據(jù)各節(jié)點的負載情況調度任務分配。本文的實驗基于.Net平臺構建,使用C#語言編寫代碼。5 詳細設計5.1 模型的選擇(1) 三層客戶機/服務器計算模型由于三層客戶機/服務器模型在系統(tǒng)開發(fā)中的巨大優(yōu)越性,比如性能好、易模塊化、易擴充等優(yōu)點,成為了本系統(tǒng)的選擇。本系統(tǒng)分為以下三層:a) 表示層:即本系統(tǒng)的人機界面,由于本實驗的重點在于算法部分,因此該層采用控制臺界面。b) 事務層:負

11、責處理數(shù)據(jù),把對數(shù)據(jù)層的訪問結果送回給表示層。服務器端的事務層主要包括任務調度;客戶機的事務層主要包括計算處理。c) 數(shù)據(jù)層:負責數(shù)據(jù)的存取處理。服務器端的數(shù)據(jù)層主要是任務狀態(tài)的記錄和計算結果的保存;客戶機的數(shù)據(jù)層主要是任務和結果的保存。同時,服務器端和客戶端的數(shù)據(jù)通信也是由該層負責的。(2) 動態(tài)負載均衡本系統(tǒng)不限制客戶機的個數(shù),這就意味著客戶機的處理能力等狀態(tài)都是預先不可知的,服務器必須根據(jù)實時的狀態(tài)來分配任務,所以采用了動態(tài)負載均衡。(3) 接收者啟動算法為了減少系統(tǒng)的通信開銷,采用該算法。由接收者激發(fā)負載的分配,這樣在重載的情況下不會引起系統(tǒng)的不穩(wěn)定。(4) 信息中心負載均衡策略用一臺

12、服務器作為信息中心,除了這個信息中心之外,其他節(jié)點都不需保留節(jié)點負載信息。各節(jié)點負載狀態(tài)發(fā)生變化的時候只需要向信息中心匯報各自的負載狀態(tài)信息。5.2 系統(tǒng)流程和信號定義(1)客戶機和服務器之間處理流程本系統(tǒng)的網(wǎng)絡物理體系結構如圖1所示。在該圖中,用一臺服務器作為信息中心,其他若干客戶端連接到服務器。當客戶端輕載的時候,向服務器提出任務請求,服務器將任務發(fā)送到客戶端,客戶端計算之后將結果返回給服務器存儲。對于任務P,被分為N個塊P1、P2、Pn,分別在N個客戶端(C1、C2、Cn)上運行,即P = P1+P2+Pn (2)信號定義服務器和客戶端之間信號的傳送需要互相了解對方信號的意義,這樣就有必

13、要定義一個信號的數(shù)據(jù)字典。在本系統(tǒng)中用到的信號定義如下:表1 客戶端信號定義(都以$作為結尾標記)編號信號內容意義對方反映方式C1N$空閑服務器按s1格式發(fā)出任務C2A<數(shù)字>$比如:A13$該<數(shù)字>是質數(shù)服務器把該數(shù)字存儲到答案文件C3R<數(shù)字>$收到s1命令,開始計算<數(shù)字>服務器不做任何回答,只是把該數(shù)字從任務列表中除去C4S3$收到s3命令服務器不做任何回答表2 服務器端發(fā)送的信號定義編號信號內容意義對方反映方式S1A<數(shù)字>如A101求<數(shù)字>是不是質數(shù)。客戶端按c3回答S2R<數(shù)字>如R13收到答

14、案<數(shù)字>,如:R13表示收到答案13客戶端將該答案從答案列表中除去,服務器把該答案記錄在答案列表中S3E任務全部完成客戶端按c4回答S40無意義信號發(fā)送過程如下:(a)當客戶端沒有任務的時候,采用如下方式獲得任務:發(fā)送C1->服務器發(fā)回S1->發(fā)送C3->服務器除去該任務。如果服務器任務已經(jīng)分配完,則過程如下:發(fā)送C1->服務器發(fā)回S3->發(fā)送C4、客戶端退出->服務器除去該客戶端記錄。(b)當客戶端算出一個答案的時候,采用如下方式發(fā)回答案:發(fā)送C2->服務器發(fā)回S2,并將該答案記錄。5.3 關鍵算法設計用一個UML序列圖來表示服務器端和

15、客戶端的處理流程,見圖3。圖中包括了本系統(tǒng)中的全部5個類,其中ClientMain類和SocketClient在客戶端,TaskStore類、ServerCompute類和AsynchronousSocketListener類在服務器端。其中,ClientMain類是客戶端的主處理程序,ServerCompute是服務器端的主控制程序,TaskStore類用于存儲任務信息,SocketClient和AsynchronousSocketListener類實現(xiàn)了客戶端和服務器端的通信??蛻舳撕头掌鞫酥g的通信采用了Socket套接字異步通信,這樣當服務器接收到一個連接時會自動開辟一個線程來處理這

16、個連接,這對于多臺客戶端的情況是非常有效的,保障了系統(tǒng)的相互通信的正常。圖3 系統(tǒng)UML序列圖下面對系統(tǒng)中的核心分布式算法作設計。5.3.1服務器端首先是任務和計算結果存儲方式。用TaskStore類來提供任務和計算結果的存儲。public class TaskStoreprivate int TaskStart; /任務的開始數(shù)字private int TaskEnd; /任務的結束數(shù)字private int Pointer; /當前分配到的任務點,前面的數(shù)字是已經(jīng)分配了的,后面的是待分配的。private Hashtable ResultHash; /存儲計算結果的哈希表private i

17、nt ResultCount; /結果數(shù)量統(tǒng)計private DateTime StartTime; /任務開始的時間private DateTime EndTime; /任務結束的時間然后在此基礎上用GetResponse()方法根據(jù)客戶端傳過來的消息進行計算,以確定返回怎樣的消息。確定了之后將由Socket連接發(fā)送該消息。private static TaskStore ts = new TaskStore(); /用來存儲所有的任務和計算結果。public static string GetResponse(string Req)switch(Convert.ToChar(Req0) /

18、根據(jù)客戶端發(fā)送過來消息的第一個字判斷消息類別。 case 'N': /客戶端空閑,服務器向該客戶端發(fā)送任務。if(ts.IsTaskOver()=true) /如果任務已經(jīng)全部分配完成,則返回消息S3。ShowResult();ts.EndTimer();return "E" /通知客戶端任務已經(jīng)全部完成else return "A"+ts.NextTask().ToString();/否則把任務返回給客戶端,信號是S1case 'A': /接收到來自客戶端的答案,服務器存儲該答案,并向該客戶端發(fā)送信號S2,表示已經(jīng)收到。

19、Req = Req.Remove(0,1);Req = Req.TrimEnd('$');Console.WriteLine("Answer Received : "+Req.ToString()+" is zishu");ts.StoreResult(Convert.ToInt32(Req);return "R"+Req.ToString();case 'R': /客戶端已經(jīng)接受到任務,服務器把該任務從任務列表中刪去,發(fā)回信號S4。Req = Req.Remove(0,1);Req = Req.Tri

20、mEnd('$');ts.RemoveTask(Convert.ToInt32(Req);return "0"default: return "0" /end switch /end GetResponse()5.3.2 客戶端客戶端ClientMain中使用一個循環(huán)來不斷的向服務器發(fā)送、接收信息,并解析信號意義和執(zhí)行服務器分配的任務。為了模擬其他長時間的計算過程,在程序中使用了進程休眠100毫秒的方法。具體的消息循環(huán)如下所示:Flag=false;while(flag!=true) /接受一個服務器命令string result = S

21、ocketClient.socketSendReceive(host,port,msg); switch(result0)case 'A': /接收到服務器發(fā)出求解問題的信號S1,比如A13表示求解13是不是質數(shù)。int i = Convert.ToInt32(result.Remove(0,1);if( true=ClientMain.IsPrimeNumber(i) ) /如果該數(shù)字是質數(shù)。此處可以換成其他的科學處理方法。msg = "A"+i.ToString()+"$" /通知服務器這是一個合法結果。break;case '

22、;E':/服務器發(fā)出所有任務都已經(jīng)完成的信號,客戶端退出程序。flag=true;break;case 'R':/服務器已經(jīng)收到答案,客戶端繼續(xù)請求新任務。msg = "N$"break;default:msg = "N$"break;Thread.Sleep(100); /模擬其他長時間的計算過程。6 實驗結果、分析和結論以計算10000-10300之間的質數(shù)為例,結果列表比較如下:表3 實驗結果列表求解范圍單機模式一臺客戶機兩臺客戶機三臺客戶機質數(shù)個數(shù)10000-1030032.8125 秒36.969 秒18.750 秒12.656 秒33個1000-120021.8750 秒25.343 秒13.32

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論