一種分布式j(luò)ava程序運(yùn)行方法、裝置和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種分布式j(luò)ava程序運(yùn)行方法,包括:獲取啟動指令;根據(jù)所述啟動指令啟動相應(yīng)的java程序;通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。本發(fā)明還提供了對應(yīng)的裝置和系統(tǒng)。由于程序代碼和靜態(tài)資源集中由一個代碼服務(wù)器管理,其它結(jié)點(diǎn)不保存程序代碼和靜態(tài)資源,既是其它結(jié)點(diǎn)被侵入也不會造成程序代碼和靜態(tài)資源的泄密,提高了安全性;同時由于運(yùn)行java程序的結(jié)點(diǎn)只需在代碼服務(wù)器中獲取所需的程序代碼和靜態(tài)資源,減少了數(shù)據(jù)加載量。
【專利說明】一種分布式j(luò)ava程序運(yùn)行方法、裝置和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請涉及java【技術(shù)領(lǐng)域】,特別是涉及一種分布式j(luò)ava程序運(yùn)行方法、裝置和系統(tǒng)。
【背景技術(shù)】
[0002]單臺計(jì)算機(jī)的計(jì)算和存儲能力有限,當(dāng)前已不能滿足人們對系統(tǒng)在可用性和擴(kuò)展性等方面的需求。分布式系統(tǒng)在網(wǎng)絡(luò)環(huán)境中的多臺計(jì)算機(jī)上運(yùn)行程序,各程序之間相互協(xié)作,共同完成指定的計(jì)算或存儲任務(wù)。通過將系統(tǒng)負(fù)載分布到多臺計(jì)算機(jī)上,分布式系統(tǒng)較單機(jī)系統(tǒng)可以提供更好的可用性;通過向網(wǎng)絡(luò)添加新的計(jì)算機(jī),使分布式系統(tǒng)可以在更多計(jì)算機(jī)上運(yùn)行程序,從而具備水平擴(kuò)展性?;谝陨显?,已經(jīng)有越來越多的程序被設(shè)計(jì)成以分布式方式運(yùn)行。然而,分布式程序的部署和運(yùn)行成為新的問題。在單機(jī)系統(tǒng)中,程序只需部署到本地,然后在本地進(jìn)程調(diào)度器的調(diào)度下運(yùn)行。與單機(jī)系統(tǒng)不同,分布式系統(tǒng)運(yùn)行所在的結(jié)點(diǎn)是網(wǎng)絡(luò)中相互獨(dú)立的計(jì)算機(jī),各臺計(jì)算機(jī)運(yùn)行獨(dú)立的操作系統(tǒng),使用私有的存儲系統(tǒng)和進(jìn)程調(diào)度器。
[0003]目前,分布式程序主要有兩種部署方案。第一種也是最常采用的部署方案是在分布式系統(tǒng)運(yùn)行所在的各個結(jié)點(diǎn)的本地存儲系統(tǒng)中存放一份程序代碼和靜態(tài)資源的副本,如附圖1所示。第二種部署方案是首先將程序代碼和靜態(tài)資源存放到共享存儲系統(tǒng),然后在分布式系統(tǒng)運(yùn)行所在的各個結(jié)點(diǎn)的本地存儲系統(tǒng)中建立指向共享存儲系統(tǒng)中的程序代碼和靜態(tài)資源的符號鏈接,典型的是利用操作系統(tǒng)提供的網(wǎng)絡(luò)文件系統(tǒng)組件,如附圖2所示。以上兩種部署方案都保證在程序運(yùn)行之前程序代碼和靜態(tài)資源都可以從程序運(yùn)行所在結(jié)點(diǎn)的本地存儲系統(tǒng)訪問。之后,就可以登錄到分布式系統(tǒng)運(yùn)行所在的各個結(jié)點(diǎn)像運(yùn)行單機(jī)程序一樣運(yùn)行各個分布式程序。
[0004]在實(shí)施過程中,本發(fā)明的發(fā)明人發(fā)現(xiàn),兩種方案都可以從分布式系統(tǒng)運(yùn)行所在的任意一個結(jié)點(diǎn)的本地存儲系統(tǒng)訪問分布式程序的全部程序代碼和靜態(tài)資源,相比只能從單個結(jié)點(diǎn)訪問的情況,這增加了程序代碼和靜態(tài)資源被有意或無意篡改、破壞或非法獲取的風(fēng)險(xiǎn)。
【發(fā)明內(nèi)容】
[0005]本申請所要解決的技術(shù)問題是提供一種分布式j(luò)ava程序運(yùn)行方法、裝置和系統(tǒng),使得某個結(jié)點(diǎn)需要運(yùn)行java程序時只需獲取對應(yīng)資源而無需獲取所有程序代碼和靜態(tài)資源,增加了安全性。
[0006]為了解決上述問題,本申請公開了一種分布式j(luò)ava程序運(yùn)行方法,包括:
獲取啟動指令;
根據(jù)所述啟動指令啟動相應(yīng)的java程序;
通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。
[0007]進(jìn)一步,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源后還包括:
根據(jù)所述java類和靜態(tài)資源運(yùn)行java程序。
[0008]進(jìn)一步,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源還包括:
根據(jù)所述java程序所需資源在本端查找java類和靜態(tài)資源;當(dāng)本端java類和靜態(tài)資源不滿足java程序運(yùn)行需求時,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上其它結(jié)點(diǎn)上存儲的java類和靜態(tài)資源。
[0009]進(jìn)一步,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源還包括:
通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
[0010]進(jìn)一步,所述獲取啟動指令包括:
獲取操作員輸入的啟動指令。
[0011]本申請還提供了一種分布式j(luò)ava程序運(yùn)行裝置,包括:
獲取模塊,用于獲取啟動指令;
啟動模塊,用于根據(jù)所述啟動指令啟動相應(yīng)的java程序;
資源獲取模塊,用于通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。
[0012]進(jìn)一步,所述裝置還包括:
運(yùn)行模塊,用于根據(jù)所述資源運(yùn)行java程序。
[0013]進(jìn)一步,所述資源獲取模塊還用于:
根據(jù)所述java程序所需資源在本端查找java類和靜態(tài)資源;當(dāng)本端java類和靜態(tài)資源不滿足java程序運(yùn)行需求時,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上其它結(jié)點(diǎn)上存儲的java類和靜態(tài)資源。
[0014]進(jìn)一步,所述資源獲取模塊還用于:
通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
[0015]進(jìn)一步,所述獲取模塊還用于:
獲取操作員輸入的啟動指令。
[0016]本申請還提供了一種分布式j(luò)ava程序運(yùn)行系統(tǒng),包括至少兩個運(yùn)行裝置;所述運(yùn)行裝置用于,獲取啟動指令;根據(jù)所述啟動指令啟動相應(yīng)的java程序;通過預(yù)設(shè)類加載器獲取其它運(yùn)行裝置上存儲的所述java程序所需java類和靜態(tài)資源。
[0017]與現(xiàn)有技術(shù)相比,本申請包括以下優(yōu)點(diǎn):本申請技術(shù)方案由于程序代碼和靜態(tài)資源集中由一個代碼服務(wù)器管理,其它結(jié)點(diǎn)不保存程序代碼和靜態(tài)資源,既是其它結(jié)點(diǎn)被侵入也不會造成程序代碼和靜態(tài)資源的泄密,提高了安全性;同時由于運(yùn)行java程序的結(jié)點(diǎn)只需在代碼服務(wù)器中獲取所需的程序代碼和靜態(tài)資源,減少了數(shù)據(jù)加載量。
[0018]【專利附圖】
【附圖說明】
圖1是現(xiàn)有技術(shù)中所有結(jié)點(diǎn)存儲程序代碼和靜態(tài)資源技術(shù)方案的架構(gòu)圖;
圖2是現(xiàn)有技術(shù)中所有結(jié)點(diǎn)只存儲地址鏈接的技術(shù)方案的架構(gòu)圖; 圖3是本發(fā)明一種分布式j(luò)ava程序運(yùn)行方法一實(shí)施例的流程圖;
圖4是本發(fā)明一種分布式j(luò)ava程序運(yùn)行裝置一實(shí)施例的結(jié)構(gòu)示意圖;
圖5是本發(fā)明一種分布式j(luò)ava程序運(yùn)行系統(tǒng)一實(shí)施例的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0019]為使本申請的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和【具體實(shí)施方式】對本申請作進(jìn)一步詳細(xì)的說明。
[0020]參照圖3,示出了本申請一種分布式j(luò)ava程序運(yùn)行方法一實(shí)施例的流程圖; 本發(fā)明實(shí)施例提供的分布式j(luò)ava程序運(yùn)行方法包括:
步驟S101、獲取啟動指令;
所述啟動指令可以是操作員遠(yuǎn)程或者本端直接輸入的啟動指令。
[0021]本發(fā)明主要依據(jù)Java程序能夠從包括本地存儲系統(tǒng)在內(nèi)的任何來源獲取程序代碼和靜態(tài)資源的事實(shí)??紤]到前文所述從分布式系統(tǒng)運(yùn)行所在的各個結(jié)點(diǎn)的本地存儲系統(tǒng)獲取程序代碼和靜態(tài)資源的諸多弊端,尋找從本地存儲系統(tǒng)獲取程序代碼和靜態(tài)資源的替代方案。在本發(fā)明實(shí)施例中,采用在固定一個結(jié)點(diǎn)上配置程序代碼和靜態(tài)資源,其它結(jié)點(diǎn)在運(yùn)行java程序時,通過特定的類加載器在該結(jié)點(diǎn)上獲取所需的程序代碼和靜態(tài)資源進(jìn)行加載。
[0022]Java程序需要從網(wǎng)絡(luò)加載Java類和靜態(tài)資源,本發(fā)明實(shí)施例使用一個固定結(jié)點(diǎn)(稱作代碼服務(wù)器)集中管理所有程序代碼和靜態(tài)資源,并遵循特定的協(xié)議(如HTTP)提供程序代碼和靜態(tài)資源的下載服務(wù)。所有在控制臺程序中注冊的Java程序的代碼源URL均需指向代碼服務(wù)器中的程序代碼或靜態(tài)資源。啟動代碼服務(wù)器是一個預(yù)先完成的過程,只需進(jìn)行一次。如果沒有特殊考慮,可以在單個程序中運(yùn)行代碼服務(wù)器和控制臺程序,省去單獨(dú)部署代碼服務(wù)器的工作。
[0023]步驟S102、根據(jù)所述啟動指令啟動相應(yīng)的java程序;
步驟S103、通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。
[0024]進(jìn)一步,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需資源后還包括:
根據(jù)所述資源運(yùn)行java程序。
[0025]進(jìn)一步,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源還包括:
根據(jù)所述java程序所需資源在本端查找java類和靜態(tài)資源;當(dāng)本端java類和靜態(tài)資源不滿足java程序運(yùn)行需求時,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上其它結(jié)點(diǎn)上存儲的java類和靜態(tài)資源。
[0026]進(jìn)一步,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源還包括:
通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
[0027]注冊程序時需要指定程序運(yùn)行所在的結(jié)點(diǎn),這一步控制臺程序遠(yuǎn)程登錄到指定的結(jié)點(diǎn)準(zhǔn)備啟動Java程序。在結(jié)點(diǎn)運(yùn)行的Java程序需要使用前面設(shè)計(jì)的類加載器從網(wǎng)絡(luò)加載Java類和靜態(tài)資源,但此時結(jié)點(diǎn)的本地存儲系統(tǒng)中可能還沒有這個類加載器的字節(jié)碼文件。若是這樣,控制臺程序?qū)⑦@個類加載器的字節(jié)碼和其他一些用到的數(shù)據(jù)打成Jar包——這里稱其為Bootstrap——將其上傳到結(jié)點(diǎn)的本地存儲系統(tǒng)的臨時目錄中。之所以選擇上傳到臨時目錄,是為了盡可能減少對結(jié)點(diǎn)的本地存儲系統(tǒng)的污染,大多數(shù)操作系統(tǒng)在重啟后會將臨時目錄清空。
[0028]使用指定的虛擬機(jī)選項(xiàng)創(chuàng)建JVM,從Bootstrap啟動Java程序,并傳入主類、參數(shù)。此時控制臺程序已經(jīng)登錄到了遠(yuǎn)程結(jié)點(diǎn),并且已經(jīng)準(zhǔn)備好了 Bootstrap,現(xiàn)在可以在遠(yuǎn)程結(jié)點(diǎn)啟動Java程序了。假定使用的虛擬機(jī)選項(xiàng)是“-XmxlG”,Java程序的main方法所在的類(主類)是XX.Main ,參數(shù)列表是“I 2 3”,使用前面設(shè)計(jì)的NetClassLoader作為系統(tǒng)類加載器,通過系統(tǒng)屬性code, urls向NetClassLoader傳遞代碼源URL,代碼源URL為http://192.168.1.10/App, Bootstrap 的路徑為 /tmp/Bootstrap.jar,則可以在遠(yuǎn)程結(jié)點(diǎn)上執(zhí)行下面的命令啟動Java程序。
[0029]java -Djava.system, class.1oader=NetClassLoader -Dcode.urls =http://192.168.L10/App -XmxlG -classpath /tmp/Bootstrap.jar xx.Main 12 3
Bootstrap中的類加載器按需從代碼服務(wù)器加載Java類、獲取靜態(tài)資源。此時Java虛擬機(jī)已創(chuàng)建,類加載器開始從代碼服務(wù)器按需加載Java類和靜態(tài)資源,Java程序開始運(yùn)行。
[0030]采用本發(fā)明實(shí)施例提供的方案后,由于程序代碼和靜態(tài)資源集中由一個代碼服務(wù)器管理,其它結(jié)點(diǎn)不保存程序代碼和靜態(tài)資源,既是其它結(jié)點(diǎn)被侵入也不會造成程序代碼和靜態(tài)資源的泄密,提高了安全性;同時由于運(yùn)行java程序的結(jié)點(diǎn)只需在代碼服務(wù)器中獲取所需的程序代碼和靜態(tài)資源,減少了數(shù)據(jù)加載量。
[0031]請參照圖4為本發(fā)明一種分布式j(luò)ava程序運(yùn)行裝置一實(shí)施例的結(jié)構(gòu)示意圖; 本發(fā)明實(shí)施例提供的裝置,包括:
獲取模塊41,用于獲取啟動指令;
啟動模塊42,用于根據(jù)所述啟動指令啟動相應(yīng)的java程序;
資源獲取模塊43,用于通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。
[0032]進(jìn)一步,所述裝置還包括:
運(yùn)行模塊44,用于根據(jù)所述資源運(yùn)行java程序。
[0033]進(jìn)一步,所述資源獲取模塊43還用于:
根據(jù)所述java程序所需資源在本端查找java類和靜態(tài)資源;當(dāng)本端java類和靜態(tài)資源不滿足java程序運(yùn)行需求時,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上其它結(jié)點(diǎn)上存儲的java類和靜態(tài)資源。
[0034]進(jìn)一步,所述資源獲取模塊43還用于:
通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
[0035]進(jìn)一步,所述獲取模塊41還用于:
獲取操作員輸入的啟動指令。[0036]資源獲取模塊43通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
[0037]注冊程序時需要指定程序運(yùn)行所在的結(jié)點(diǎn),用戶可以通過控制臺程序遠(yuǎn)程登錄到指定本發(fā)明提供的裝置準(zhǔn)備啟動Java程序,此時獲取模塊41獲取到用戶的啟動指令。在結(jié)點(diǎn)運(yùn)行的Java程序需要使用資源獲取模塊43 (所述資源獲取模塊43可以為類加載器)從網(wǎng)絡(luò)加載Java類和靜態(tài)資源。
[0038]參照圖5為本發(fā)明一種分布式j(luò)ava程序運(yùn)行系統(tǒng)一實(shí)施例的結(jié)構(gòu)不意圖; 本發(fā)明實(shí)施例提供的分布式j(luò)ava程序運(yùn)行系統(tǒng)包括:
至少兩個運(yùn)行裝置51 ;所述運(yùn)行裝置51用于,獲取啟動指令;根據(jù)所述啟動指令啟動相應(yīng)的java程序;通過預(yù)設(shè)類加載器獲取其它運(yùn)行裝置上存儲的所述java程序所需java類和靜態(tài)資源。
[0039]本發(fā)明實(shí)施例采用的運(yùn)行裝置可以是圖4對應(yīng)實(shí)施例提供的裝置。
[0040]對于裝置和系統(tǒng)實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
[0041]本說明書中的各個實(shí)施例均采用遞進(jìn)的方式描述,每個實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個實(shí)施例之間相同相似的部分互相參見即可。
[0042]以上對本申請所提供的一種分布式j(luò)ava程序運(yùn)行方法、裝置系統(tǒng),進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個例對本申請的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本申請的限制。
【權(quán)利要求】
1.一種分布式j(luò)ava程序運(yùn)行方法,其特征在于,包括: 獲取啟動指令; 根據(jù)所述啟動指令啟動相應(yīng)的java程序; 通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源后還包括: 根據(jù)所述java類和靜態(tài)資源運(yùn)行java程序。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源還包括: 根據(jù)所述java程序所需資源在本端查找java類和靜態(tài)資源;當(dāng)本端java類和靜態(tài)資源不滿足java程序運(yùn)行需求時,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上其它結(jié)點(diǎn)上存儲的java類和靜態(tài)資源。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源還包括: 通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述獲取啟動指令包括: 獲取操作員輸入的啟動指令。
6.一種分布式j(luò)ava程序運(yùn)行裝置,其特征在于,包括: 獲取模塊,用于獲取啟動指令; 啟動模塊,用于根據(jù)所述啟動指令啟動相應(yīng)的java程序; 資源獲取模塊,用于通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上存儲的所述java程序所需java類和靜態(tài)資源。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括: 運(yùn)行模塊,用于根據(jù)所述資源運(yùn)行java程序。
8.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述資源獲取模塊還用于: 根據(jù)所述java程序所需資源在本端查找java類和靜態(tài)資源;當(dāng)本端java類和靜態(tài)資源不滿足java程序運(yùn)行需求時,通過預(yù)設(shè)類加載器獲取其它結(jié)點(diǎn)上其它結(jié)點(diǎn)上存儲的java類和靜態(tài)資源。
9.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述資源獲取模塊還用于: 通過預(yù)設(shè)類加載器中固定地址鏈接,在預(yù)置所有java類和靜態(tài)資源的其它固定結(jié)點(diǎn)獲取所述java程序所需java類和靜態(tài)資源。
10.根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述獲取模塊還用于: 獲取操作員輸入的啟動指令。
11.一種分布式j(luò)ava程序運(yùn)行系統(tǒng),其特征在于,包括至少兩個運(yùn)行裝置;所述運(yùn)行裝置用于,獲取啟動指令;根據(jù)所述啟動指令啟動相應(yīng)的java程序;通過預(yù)設(shè)類加載器獲取其它運(yùn)行裝置上存儲的所述java程序所需java類和靜態(tài)資源。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其特征在于,所述運(yùn)行裝置為權(quán)利要求6-10任一所述的裝置。
【文檔編號】G06F9/445GK103473089SQ201310390116
【公開日】2013年12月25日 申請日期:2013年9月2日 優(yōu)先權(quán)日:2013年9月2日
【發(fā)明者】王永春, 賈西貝 申請人:深圳市華傲數(shù)據(jù)技術(shù)有限公司