摘 要 分布式計(jì)算以其無(wú)比快捷的處理速度使其在世界迅速流行開(kāi)來(lái),而java也因其對(duì)于分布式計(jì)算的友好性使得越來(lái)越多的人開(kāi)始注重基于java的分布式計(jì)算。可以預(yù)見(jiàn),基于java的分布式計(jì)算系統(tǒng)會(huì)越來(lái)越普遍,本文即是討論利用java研究分布式計(jì)算的相關(guān)技術(shù)。
【關(guān)鍵詞】分布式 java RMI
1 分布式計(jì)算
1.1 分布式計(jì)算系統(tǒng)
分布式計(jì)算,顧名思義,即將原本需要極其巨大計(jì)算能力的問(wèn)題分解為眾多的小問(wèn)題,并且將這些問(wèn)題分配給一些計(jì)算機(jī)進(jìn)行處理,最終將各個(gè)計(jì)算機(jī)得出的計(jì)算結(jié)果進(jìn)行統(tǒng)計(jì)即可得出原本問(wèn)題的答案。
1.2 分布式計(jì)算應(yīng)用程序的特點(diǎn)
分布式最為顯著的特點(diǎn)之一就是其可以進(jìn)行稀有資源的共享,及其可以在兩個(gè)或兩個(gè)以上的軟件中進(jìn)行信息共享,并且這些軟件不僅可以在一臺(tái)電腦上運(yùn)行,更可以在多臺(tái)電腦上運(yùn)行。因此我們可以根據(jù)計(jì)算機(jī)的計(jì)算能力平衡的分配每臺(tái)計(jì)算機(jī)的任務(wù),將程序放在最為適合運(yùn)行運(yùn)行該程序的計(jì)算機(jī)上,使得計(jì)算速度達(dá)到最快。由于這種特點(diǎn),目前世界甚至已經(jīng)存在一些處理能力可以超過(guò)巨型計(jì)算機(jī)的分布式計(jì)算系統(tǒng)。
1.3 分布式計(jì)算面臨的問(wèn)題
正所謂有得必有失,無(wú)數(shù)子電腦的幫助計(jì)算大大加速了分布式計(jì)算的運(yùn)行速度,但缺乏足夠的計(jì)算機(jī)進(jìn)行計(jì)算成為了分布式計(jì)算一個(gè)不小的問(wèn)題。
隨著科技的發(fā)展,計(jì)算機(jī)也開(kāi)始慢慢普及開(kāi)來(lái),越來(lái)越多的家庭電腦出于閑置狀態(tài),互聯(lián)網(wǎng)雖然使得網(wǎng)絡(luò)分布式計(jì)算的實(shí)現(xiàn)成為了可能。一些研究所開(kāi)發(fā)出了用于分布式計(jì)算的服務(wù)端和客戶(hù)端。服務(wù)端將可以分解的復(fù)雜問(wèn)題分解為無(wú)數(shù)小塊,通過(guò)互聯(lián)網(wǎng)將問(wèn)題發(fā)送到志愿提供計(jì)算機(jī)部分計(jì)算能力的計(jì)算機(jī)中,并統(tǒng)合得到最終答案。但隨之而來(lái)的又有了一部分問(wèn)題,志愿者需要在研究所等處下載計(jì)算用的程序,并且允許該程序運(yùn)行在本電腦上,會(huì)因此帶來(lái)一些隱私數(shù)據(jù)泄露的隱患,而且計(jì)算程序在平時(shí)雖然不會(huì)影響用戶(hù)使用電腦,但當(dāng)計(jì)算程序全負(fù)荷運(yùn)行時(shí),仍然會(huì)對(duì)一些性能不是很優(yōu)秀的電腦造成影響,甚至影響用戶(hù)的計(jì)算機(jī)壽命。此外還有防止志愿者電腦突然事故等原因,研究所還需要尋找一部分多余的電腦進(jìn)行保證計(jì)算的運(yùn)行。
2 Java技術(shù)
2.1 Java在分布式計(jì)算上的優(yōu)勢(shì)與不足
Java作為當(dāng)今最為流行的編程語(yǔ)言,其本就是應(yīng)網(wǎng)絡(luò)而生的,更因?yàn)槠涮峁┝吮姸嗟念?lèi)與方法,其對(duì)網(wǎng)絡(luò)分布式計(jì)算有著天然的友好性。其不足之處也很是明顯,由于java開(kāi)發(fā)分布式大多采用RMI,而RMI又有著其局限性,因?yàn)樗惶峁┲鴍ava虛擬機(jī)之間的相互聯(lián)系,它不能被其他語(yǔ)言所編寫(xiě)出來(lái)的對(duì)象或應(yīng)用所使用。
2.2 Java多線(xiàn)程編程
多線(xiàn)程可以允許程序在執(zhí)行中發(fā)出多個(gè)并發(fā)的指令流,并且這些指令流是亂序執(zhí)行的,而我們可以輕易的通過(guò)類(lèi)java.lang.Thread在java中實(shí)現(xiàn)多線(xiàn)程
2.3 Java類(lèi)裝載器
Java類(lèi)加載器是負(fù)責(zé)動(dòng)態(tài)加載java類(lèi)至java的虛擬機(jī)中的,正是因?yàn)閖ava類(lèi)加載器,java程序在運(yùn)行時(shí)系統(tǒng)不需要知道文件和文件系統(tǒng)。
2.4 Java RMI
前言已經(jīng)提及了java對(duì)于分布式計(jì)算有著天然的友好性,其主要原因就是因?yàn)镽MI。RMI中文意思為遠(yuǎn)程方法調(diào)用,其為我們提供了很方便的使java程序調(diào)用其他計(jì)算機(jī)上的java的方法,即只需經(jīng)過(guò)一些初始化過(guò)程,遠(yuǎn)程方法的調(diào)用就可以和本地方法的調(diào)用一樣,因此其為分布式網(wǎng)絡(luò)的應(yīng)用提供了比較完善的框架。
在RMI中,我們需要先建立一個(gè)服務(wù)器和一個(gè)或多個(gè)客戶(hù)端。其中服務(wù)器必須在被客戶(hù)端訪(fǎng)問(wèn)前初始化完畢,做好被遠(yuǎn)程訪(fǎng)問(wèn)的準(zhǔn)備,而客戶(hù)端則需要尋找到服務(wù)器并激活,然后使用服務(wù)器對(duì)RMI連接初始化。
3 用Java對(duì)網(wǎng)絡(luò)分布式計(jì)算相關(guān)技術(shù)的研究
3.1 服務(wù)器與客戶(hù)端的建立
首先我們需要先建立一個(gè)遠(yuǎn)程接口。在建立接口之前我們需要知道,只有在網(wǎng)絡(luò)通信的情況下我們才可以進(jìn)行遠(yuǎn)程方法的調(diào)用,但由于網(wǎng)絡(luò)通信的不穩(wěn)定性即網(wǎng)絡(luò)出現(xiàn)異?;蛘哂幸环綌嚅_(kāi)了連接,遠(yuǎn)程方法的調(diào)用就會(huì)失敗,因此我們需要在接口中的所有的的方法中調(diào)用java.rmi.remoteexception異常,這樣在遠(yuǎn)程方法調(diào)用時(shí)當(dāng)網(wǎng)絡(luò)出現(xiàn)異常,RMI會(huì)指出remoteexception異常,當(dāng)客戶(hù)端獲得到這樣的異常時(shí)就會(huì)做出相應(yīng)的處理。此外,遠(yuǎn)程對(duì)象必須在遠(yuǎn)程的接口中申明了被用戶(hù)程序遠(yuǎn)程訪(fǎng)問(wèn)。
其次我們要實(shí)現(xiàn)遠(yuǎn)程接口。想要實(shí)現(xiàn)遠(yuǎn)程接口,我們需要使用java.rmi.sever.UnicastRemoteObject類(lèi),因?yàn)樵谠擃?lèi)中我們可以實(shí)現(xiàn)RMI中的關(guān)于服務(wù)器和客戶(hù)端的遠(yuǎn)程對(duì)象、方法以及相關(guān)參數(shù)序列化的協(xié)議交流功能。
然后我們需要?jiǎng)?chuàng)建服務(wù)器。先建立一個(gè)遠(yuǎn)程對(duì)象實(shí)例,然后在rmiregistry注冊(cè)表中注冊(cè)這一個(gè)遠(yuǎn)程對(duì)象實(shí)例將其與一個(gè)名字綁定,注冊(cè)表的相關(guān)功能則由jdk的安裝目錄下的rmiregistry.exe程序完成,該程序主要是為其提供命名服務(wù)。
最終我們需要在建立一個(gè)客戶(hù)端。在客戶(hù)端的程序中我們需要先獲得遠(yuǎn)程對(duì)象的存根對(duì)象,這些存根是由rmic生成的,我們可以通過(guò)這些存根來(lái)調(diào)用方法。
3.2 負(fù)載平衡的研究
負(fù)載平衡的意思是對(duì)系統(tǒng)的負(fù)載情況進(jìn)行動(dòng)態(tài)的調(diào)整,以此來(lái)盡力的減少系統(tǒng)中各個(gè)站點(diǎn)的負(fù)載不平衡的現(xiàn)象,從而提高系統(tǒng)的工作速度。因此負(fù)載平衡問(wèn)題是分布式計(jì)算系統(tǒng)的核心問(wèn)題之一,優(yōu)秀的負(fù)載平衡方法可以使人們充分的利用分布式計(jì)算的能力。
負(fù)載平衡主要有兩種算法,服務(wù)器算法:當(dāng)一個(gè)站點(diǎn)超載時(shí)期會(huì)嘗試將任務(wù)發(fā)給其他的輕站點(diǎn),并且主要選擇新任務(wù)作為將要發(fā)送的任務(wù)??蛻?hù)端算法:當(dāng)該站點(diǎn)的任務(wù)隊(duì)列的長(zhǎng)度小于閥值的時(shí)候,該站點(diǎn)就會(huì)嘗試從中載站點(diǎn)接受一個(gè)任務(wù),這時(shí)所有站點(diǎn)上的任務(wù)都有可能會(huì)作為其接受的對(duì)象。
參考文獻(xiàn)
[1]謝進(jìn)軍.Java多線(xiàn)程技術(shù)在考試系統(tǒng)中的應(yīng)用[J].電子制作,2013(15):76-76.
[2]謝聰鈺.Java多線(xiàn)程編程技術(shù)的研究[J].城市建設(shè)理論研究(電子版),2013(23).
作者簡(jiǎn)介
李艷花(1981-),云南省昆明市人。大學(xué)本科學(xué)歷?,F(xiàn)為云南工程職業(yè)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專(zhuān)業(yè)講師。研究方向?yàn)橛?jì)算機(jī)軟件應(yīng)用、計(jì)算機(jī)教學(xué)研究。
作者單位
云南工程職業(yè)學(xué)院 云南省安寧市 650300