彭 濤,胡 飛
(重慶第二師范學(xué)院 網(wǎng)絡(luò)中心,重慶 400065)
Web服務(wù)是基于XML和HTTP的一種服務(wù),其通信協(xié)議主要基于SOAP,服務(wù)的描述通過(guò)WSDL,通過(guò)UDDI來(lái)發(fā)現(xiàn)和獲得服務(wù)的元數(shù)據(jù),它解決了異構(gòu)服務(wù)器平臺(tái)之間數(shù)據(jù)和應(yīng)用共享,以及應(yīng)用負(fù)荷分擔(dān)的問(wèn)題[1]。這種技術(shù)在小范圍內(nèi)應(yīng)用不會(huì)有多大問(wèn)題,但是隨著調(diào)用的客戶端增多,高并發(fā)的時(shí)候,被調(diào)用的服務(wù)器將不堪重負(fù),并且服務(wù)器接入線路也無(wú)法處理如此大劑量的流量。而云計(jì)算的引入正好可以解決這個(gè)問(wèn)題。云計(jì)算是基于互聯(lián)網(wǎng)的相關(guān)服務(wù)的增加、使用和交付模式,通常涉及通過(guò)互聯(lián)網(wǎng)來(lái)提供動(dòng)態(tài)易擴(kuò)展且經(jīng)常是虛擬化的資源。云計(jì)算是一種基于因特網(wǎng)的超級(jí)計(jì)算模式,在遠(yuǎn)程的數(shù)據(jù)中心,幾萬(wàn)甚至幾千萬(wàn)臺(tái)電腦和服務(wù)器連接成一片,因此,云計(jì)算甚至可以讓你體驗(yàn)每秒超過(guò)10萬(wàn)億次的運(yùn)算能力,如此強(qiáng)大的運(yùn)算能力幾乎無(wú)所不能。用戶通過(guò)電腦、筆記本、手機(jī)等方式接入數(shù)據(jù)中心,按各自的需求進(jìn)行存儲(chǔ)和運(yùn)算。通過(guò)云計(jì)算把被調(diào)用服務(wù)器上的數(shù)據(jù)和應(yīng)用分擔(dān)到各個(gè)調(diào)用它的客戶端服務(wù)器上,從而解決服務(wù)器不堪負(fù)荷以及服務(wù)器接入線路不堪大劑量流量的問(wèn)題。
圖1是Web服務(wù)調(diào)用傳統(tǒng)應(yīng)用和基于云計(jì)算應(yīng)用對(duì)比圖。在傳統(tǒng)應(yīng)用中,所有數(shù)據(jù)都從被調(diào)用服務(wù)器直接傳遞給客戶端服務(wù)器,被調(diào)用服務(wù)器完成數(shù)據(jù)運(yùn)算工作并承擔(dān)所有的數(shù)據(jù)流量,當(dāng)客戶端服務(wù)器數(shù)量大量增加以后,被調(diào)用服務(wù)器的數(shù)據(jù)處理能力和互聯(lián)網(wǎng)帶寬將無(wú)法承受[2]。目前改進(jìn)的做法是增加被調(diào)用服務(wù)器的數(shù)量,由多臺(tái)被調(diào)用服務(wù)器構(gòu)成一個(gè)分布式服務(wù)提供者[3],或者通過(guò)QoS實(shí)現(xiàn)Web服務(wù)動(dòng)態(tài)編排解決方案[4]以及P2P技術(shù)的引入[5],還有就是通過(guò)MTOM分次傳輸大量數(shù)據(jù)[6]或者通過(guò)WCF的ConcurrencyMode屬性來(lái)實(shí)行并發(fā)連接[7]。這些方法雖然可以起到一定緩解作用,但是以犧牲時(shí)間和建設(shè)維護(hù)成本為代價(jià)的,而且隨著客戶端調(diào)用者數(shù)量的進(jìn)一步增大,這些方法不能從根本上解決問(wèn)題。
圖1 Web服務(wù)調(diào)用技術(shù)傳統(tǒng)應(yīng)用&基于云計(jì)算的應(yīng)用
如何提升Web服務(wù)調(diào)用性能?在不增加設(shè)備投入成本的基礎(chǔ)上減少調(diào)用時(shí)間。云計(jì)算技術(shù)的引入為這問(wèn)題帶來(lái)了廉價(jià)高效的解決方案。如圖1的右圖所示,被調(diào)用服務(wù)器此時(shí)不再僅僅作為被調(diào)用數(shù)據(jù)的提供者,而是一個(gè)調(diào)度者,互聯(lián)網(wǎng)上所有客戶端服務(wù)器和這個(gè)被調(diào)用服務(wù)器一起構(gòu)成一個(gè)分布式服務(wù)和數(shù)據(jù)提供者,這樣許多臺(tái)服務(wù)器和電腦連成一片,其中每一臺(tái)服務(wù)器或電腦既是服務(wù)獲取者,又是服務(wù)提供者,運(yùn)算和傳輸負(fù)荷分?jǐn)偟剿蟹?wù)器和電腦上,不僅是被調(diào)用服務(wù)器,而且是讓所有客戶端服務(wù)器來(lái)一起提供Web服務(wù)。本算法基于靜態(tài)數(shù)據(jù)調(diào)用實(shí)現(xiàn),其描述如下:
算法——基于云計(jì)算的Web服務(wù)調(diào)用算法
輸入:提供數(shù)據(jù)下載的服務(wù)器用戶庫(kù) CSL
輸出:隨機(jī)抽取用戶庫(kù)中的服務(wù)器,下載數(shù)據(jù)Rdata
1. CSL = DisOrderServer(CSL); //把CSL順序打亂重新排序
2. foreach (servers cs in CSL)
3. {
4.if (checkServer(cs.serverIP)) //檢查客戶端服務(wù)器是否可用
5.{
6.css.Add(cs); //隨機(jī)抽取10個(gè)可用的客戶端服務(wù)器
7.if (css.Count >= 10)
8.break;
9.}
10. }
11. threadDownload(css); //多線程從10個(gè)服務(wù)器中分段下載數(shù)據(jù)
12. Rdata = mergeData(); //返回合并的數(shù)據(jù)
13. return Rdata;
算法的基本思想是首先被調(diào)用服務(wù)器內(nèi)維護(hù)有一個(gè)提供數(shù)據(jù)下載的服務(wù)器用戶庫(kù)CSL,當(dāng)一個(gè)客戶端服務(wù)器向被調(diào)用服務(wù)器請(qǐng)求數(shù)據(jù)的時(shí)候就自動(dòng)注冊(cè)進(jìn)這個(gè)用戶庫(kù),注冊(cè)信息包括客戶端服務(wù)器ip地址和要調(diào)用數(shù)據(jù)的入口地址等信息;然后被調(diào)用服務(wù)器向客戶端服務(wù)器發(fā)送這個(gè)用戶庫(kù);最后客戶端服務(wù)器再?gòu)倪@個(gè)用戶庫(kù)里面隨機(jī)選取服務(wù)器下載數(shù)據(jù),同時(shí)在客戶端服務(wù)器上保留一份數(shù)據(jù)備份以供其它客戶端服務(wù)器下載。這是一種高效的運(yùn)作模式,其參與的客戶端服務(wù)器越多,效率越高,而作為服務(wù)提供者只需要一臺(tái)被調(diào)用服務(wù)器即可。
本文在相同的硬件和網(wǎng)絡(luò)環(huán)境下就傳統(tǒng)Web服務(wù)應(yīng)用和基于云計(jì)算的Web服務(wù)應(yīng)用作對(duì)比分析。實(shí)驗(yàn)環(huán)境為一個(gè)51臺(tái)計(jì)算機(jī)的機(jī)房,全部安裝Windows Server 2003和IIS,Web服務(wù)采用Microsoft .Net 環(huán)境下的WCF,修改web.config設(shè)置WCF的最大并發(fā)數(shù)、處理數(shù)和會(huì)話數(shù)為10000并調(diào)高超時(shí)時(shí)間,調(diào)用數(shù)據(jù)為一段10KB的文本數(shù)據(jù)。其中一臺(tái)電腦作為被調(diào)用服務(wù)器,名字Server1,其它50臺(tái)電腦作為客戶端服務(wù)器,名字Client1到Client50,所以客戶端服務(wù)器上運(yùn)行一個(gè)計(jì)時(shí)操作小軟件,該軟件能在設(shè)定時(shí)間觸發(fā)調(diào)用Web服務(wù)。兩種技術(shù)分別在此環(huán)境下進(jìn)行實(shí)驗(yàn)。當(dāng)所有客戶端服務(wù)器同時(shí)單進(jìn)程調(diào)用Server1的時(shí)候,在Server1上監(jiān)控得到平均CPU使用率和網(wǎng)絡(luò)利用率都不高,客戶端服務(wù)器上監(jiān)控得到的調(diào)用完成耗時(shí)也保持在100ms左右。當(dāng)每臺(tái)客戶端服務(wù)器都開(kāi)放10個(gè)進(jìn)程同時(shí)調(diào)用Server1的時(shí)候,相當(dāng)于總共500臺(tái)客戶端服務(wù)器調(diào)用Server1,情況發(fā)生了變化,實(shí)驗(yàn)結(jié)果如表1所示。因?yàn)樵诨谠朴?jì)算的Web服務(wù)的實(shí)驗(yàn)中,客戶端服務(wù)器首次下載的時(shí)候會(huì)在本地生成數(shù)據(jù)副本,所以首次實(shí)驗(yàn)結(jié)果不記錄,表1中的記錄是反復(fù)多次實(shí)驗(yàn)中某一次的實(shí)驗(yàn)記錄,其它次實(shí)驗(yàn)記錄的數(shù)據(jù)和表1數(shù)據(jù)相差不大,只有個(gè)別實(shí)驗(yàn)記錄數(shù)據(jù)有較大出入。
表1 傳統(tǒng)Web服務(wù)與基于云計(jì)算的Web服務(wù)實(shí)驗(yàn)對(duì)比
由表1中實(shí)驗(yàn)數(shù)據(jù)可知,因?yàn)榇罅康臄?shù)據(jù)流量都分擔(dān)到各個(gè)客戶端服務(wù)器之間,所以Server1的負(fù)荷大量下降,Web服務(wù)調(diào)用性能大幅提升。其中有幾個(gè)客戶端服務(wù)器調(diào)用還超時(shí),這是由于Server1來(lái)不及響應(yīng)造成的。
本文提出了基于云計(jì)算的Web服務(wù)調(diào)用算法,著重解決了傳統(tǒng)Web服務(wù)調(diào)用中被調(diào)用服務(wù)器性能無(wú)法滿足大用戶量、大數(shù)據(jù)流量調(diào)用的問(wèn)題,實(shí)驗(yàn)表明該算法在高并發(fā)調(diào)用基于靜態(tài)數(shù)據(jù)的Web服務(wù)方面有極大優(yōu)勢(shì)。
參考文獻(xiàn):
[1]岳昆,王曉玲,周傲英.Web服務(wù)核心支撐技術(shù):研究綜述[J].軟件學(xué)報(bào),2004,(03).
[2]曾潔,胡永培,盧顯良.Web服務(wù)器群集負(fù)載平衡技術(shù)與實(shí)現(xiàn)[J].計(jì)算機(jī)科學(xué),2002,(04).
[3]Tseng C.-W., Yang C.-S. System support for web hosting services on server clusters[J]. Computers and Electrical Engineering , May 2007,33(3):208-220.
[4]王世元,肖斌,汪敏,秦光源.基于QoS的Web服務(wù)動(dòng)態(tài)調(diào)用策略[J].計(jì)算機(jī)與信息技術(shù),2009,(12).
[5]Doulkeridis C, Zafeiris V, Norvag K, Vazirgiannis M, Giakoumakis. Context-based caching and routing for P2P Web service discovery. Distrib Parallel Database 21(1):59-84.
[6]運(yùn)用MTOM分次傳輸大量的資料[EB/OL].http://www.dotblogs.com.tw/jeff-yeh/archive/2009/09/27/10798. aspx
[7]蔣金楠.WCF技術(shù)剖析(卷1)[M].北京:電子工業(yè)出版社,2009.