午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法

文檔序號:6365616閱讀:342來源:國知局
專利名稱:軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法
技術(shù)領(lǐng)域
本發(fā)明屬于軟件技術(shù)領(lǐng)域,針對由于從原部署節(jié)點所獲計算資源不足而導(dǎo)致的軟件應(yīng)用性能低下問題提供一種程序執(zhí)行優(yōu)化方法,具體涉及一種軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法,適用于軟件維護(hù)演化。
背景技術(shù)
對計算資源(如CPU、內(nèi)存等)的按需使用是軟件應(yīng)用增強(qiáng)其性能并改善用戶體驗的一種主要手段。所謂按需(on-demand),是指當(dāng)計算資源不足時,應(yīng)用可以占有并使用額外的資源,從而保障其高效運(yùn)行;而當(dāng)資源過剩時,應(yīng)用又可以釋放掉多余的資源,從而減 少浪費(fèi)。隨著Internet的飛速發(fā)展,軟件應(yīng)用所處的環(huán)境變得越來越開放。而開放性則進(jìn)一步促使軟件應(yīng)用需要實現(xiàn)對計算資源的按需使用。例如,隨著移動互聯(lián)網(wǎng)的興起,越來越多的軟件應(yīng)用被下載運(yùn)行在不同能力的移動終端上。這些以智能手機(jī)為代表的移動終端所擁有的計算資源本身極其有限,常常導(dǎo)致應(yīng)用性能低下,帶來不佳的用戶體驗。并且由于不同型號的移動終端配置不同,在運(yùn)行同一應(yīng)用時也會產(chǎn)生不同的性能效果。因此,只有應(yīng)用做到按需使用資源才能從根本上緩解開放環(huán)境下軟硬件不匹配的矛盾,促進(jìn)用戶體驗的改

口 o對計算資源按需使用必須同時具備兩個條件一是具有額外可用的資源;二是應(yīng)用可以真正使用到這些資源。在Internet環(huán)境下,雖然網(wǎng)絡(luò)單節(jié)點的計算資源仍然有限,然而互連起來的網(wǎng)絡(luò)節(jié)點其整體所擁有的計算資源則極為豐富。當(dāng)應(yīng)用需要額外資源時,可以通過網(wǎng)絡(luò)而獲得其他節(jié)點所擁有的資源。因而,可以看到,實現(xiàn)對資源按需使用的根本還是在于應(yīng)用自身。應(yīng)用對分散資源的使用方式主要有兩種復(fù)制式使用和分割式使用。復(fù)制式的資源使用方式通過對應(yīng)用進(jìn)行復(fù)制,將副本運(yùn)行在額外的節(jié)點上,并在原應(yīng)用和其副本前端加上負(fù)載平衡器來將用戶請求轉(zhuǎn)發(fā)到多個應(yīng)用實例組成的集群上(Chuliang Weng,MingluLi, ZhigangWang, and Xinda Lu, Automatic Performance Tuning for the VirtualizedCluster System,29th IEEEInternational Conference on Distributed ComputingSystems, 2009, pp. 183 190)。這種方式可以有效地應(yīng)對由于用戶請求激增而導(dǎo)致地應(yīng)用性能急劇下降的情況。然而,該方式的使用范圍有限,主要用于web應(yīng)用,但對于那些完整安裝在智能手機(jī)等網(wǎng)絡(luò)節(jié)點且與用戶直接交互的本地應(yīng)用來說卻不適用。此外,有研究已經(jīng)指出,這種以整個應(yīng)用為粒度的復(fù)制在較大程度上會造成資源浪費(fèi)(DuncanJohnston-Watt, Get Smart The Case for Intelligent Application Mobilityin theCloud, the Cloud Computing Journal, 2010)。原因在于,通常情況下不是組成應(yīng)用的所有模塊都急需資源。那些不急需資源但占有資源的模塊會與那些真正急需資源的模塊相競爭,反而導(dǎo)致資源沒有充分被急需資源的模塊所用,造成了隱性浪費(fèi)。有介于此,分割式資源使用將組成應(yīng)用的模塊分別部署在不同的節(jié)點上,讓那些真正急需資源的模塊充分占有計算資源,以此實現(xiàn)對應(yīng)用性能的保障和對資源的有效利用。在此基礎(chǔ)上,又可將兩種使用方式相結(jié)合,在較細(xì)粒度上實現(xiàn)復(fù)制式資源使用,以進(jìn)一步高效地保障應(yīng)用性能。由此可以看見,應(yīng)用對計算資源的按需使用要以應(yīng)用模塊的按需分布式部署執(zhí)行為保障,也就是說,需要實現(xiàn)應(yīng)用中計算的按需遠(yuǎn)程執(zhí)行。當(dāng)從原有節(jié)點所獲資源不足,導(dǎo)致應(yīng)用性能下降時,可將應(yīng)用中對資源需求較大的一部分計算轉(zhuǎn)移到新獲取的網(wǎng)絡(luò)節(jié)點上執(zhí)行,從而通過占有額外的資源來保障應(yīng)用的整體性能;而當(dāng)資源過剩或網(wǎng)絡(luò)條件不佳導(dǎo)致獲取額外資源的難度增大時,又可將計算移回,從而實現(xiàn)對資源的節(jié)省并保障應(yīng)用正常運(yùn)行。目前實現(xiàn)計算邏輯的遠(yuǎn)程執(zhí)行主要有兩種方式1)編寫分布式應(yīng)用。將應(yīng)用中對資源消耗較大的計算在設(shè)計和實現(xiàn)時就安排到擁有較多資源的網(wǎng)絡(luò)節(jié)點上運(yùn)行。然而,由于分布式應(yīng)用要求開發(fā)者處理遠(yuǎn)程方法調(diào)用、序列化、同步等與程序分布相關(guān)的問題,因而編寫起來通常費(fèi)時費(fèi)力。即便是使用分布式中間件,開發(fā)者也必須編寫特定于中間件但與程序業(yè)務(wù)邏輯無關(guān)的代碼,帶來相當(dāng)?shù)木幊特?fù)擔(dān)。此外,更重要的是,開發(fā)者很難在設(shè)計實現(xiàn)時就準(zhǔn)確預(yù)料到應(yīng)用對資源的使用,因而所開出的應(yīng)用程序中的本地/遠(yuǎn)程調(diào)用方式通常固定不變,這就使得應(yīng)用對資源難以實現(xiàn)真正的按需使用。2)通過程序轉(zhuǎn)換器,自動將給定應(yīng)用中的程序代碼轉(zhuǎn)換后分為兩部分一部分繼續(xù)留在原有節(jié)點上運(yùn)行,而另一部分則被移動到其他網(wǎng)絡(luò)節(jié)點上運(yùn)行。這兩部分之間所需要的跨網(wǎng)絡(luò)的互操作代碼由該轉(zhuǎn)換器以打補(bǔ)丁的方式自動加入到原有應(yīng)用當(dāng)中,從而保證了轉(zhuǎn)換后應(yīng)用的正確運(yùn)行。這種方式不要求開發(fā)者編寫與程序分布相關(guān)的代碼,可極大降低應(yīng)用開發(fā)的難度。然而,現(xiàn)有工作中,一個被轉(zhuǎn)換后應(yīng)用中代碼間的本地/遠(yuǎn)程調(diào)用方式仍然固定不變,導(dǎo)致當(dāng)資源變化而需要調(diào)整計算的本地/遠(yuǎn)程調(diào)用關(guān)系時,必須停機(jī)、重轉(zhuǎn)換、重啟,因而難以實現(xiàn)應(yīng)用在運(yùn)行時對資源的按需使用。

發(fā)明內(nèi)容
本發(fā)明的目的是提供一種軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法,其核心是支持軟件應(yīng)用中的計算邏輯實現(xiàn)按需遠(yuǎn)程執(zhí)行的設(shè)計模式,其主要手段是通過對軟件應(yīng)用代碼進(jìn)行重構(gòu),自動將原始應(yīng)用轉(zhuǎn)換為符合所提出的設(shè)計模式的計算邏輯可按需遠(yuǎn)程執(zhí)行的應(yīng)用。本發(fā)明的軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法,其步驟包括I)將軟件應(yīng)用的應(yīng)用類分為執(zhí)行位置固定類(Anchored)和執(zhí)行位置可變類(Movable);2)將所述應(yīng)用類的程序代碼從源結(jié)構(gòu)轉(zhuǎn)換為目標(biāo)結(jié)構(gòu);所述目標(biāo)結(jié)構(gòu)包含代理(Proxy)和端點(Endpoint):所述代理與調(diào)用類運(yùn)行于同一地址空間,負(fù)責(zé)將方法調(diào)用經(jīng)由所述端點轉(zhuǎn)發(fā)至在本地或遠(yuǎn)程運(yùn)行的被調(diào)用類;所述端點負(fù)責(zé)識別所述被調(diào)用類的當(dāng)前位置;3)將轉(zhuǎn)換為所述目標(biāo)結(jié)構(gòu)的應(yīng)用類封裝為原始應(yīng)用格式的應(yīng)用和可遠(yuǎn)程執(zhí)行的 軟件制品,分別部署在原網(wǎng)絡(luò)節(jié)點上和遠(yuǎn)程網(wǎng)絡(luò)節(jié)點上;4)預(yù)測當(dāng)一應(yīng)用類遠(yuǎn)程執(zhí)行時該應(yīng)用類所屬的軟件應(yīng)用的性能,如果該性能提高,則在遠(yuǎn)程執(zhí)行該應(yīng)用類,否則在本地執(zhí)行該應(yīng)用類。進(jìn)一步地所述源結(jié)構(gòu)包括直接內(nèi)存調(diào)用結(jié)構(gòu)和RCS(Remote CommunicationService,遠(yuǎn)程通訊服務(wù))遠(yuǎn)程調(diào)用結(jié)構(gòu);當(dāng)被調(diào)用類在遠(yuǎn)程運(yùn)行時,所述端點利用RCS獲得對被調(diào)用類的遠(yuǎn)程引用,調(diào)用類通過該引用而遠(yuǎn)程調(diào)用被調(diào)用類;當(dāng)被調(diào)用類和調(diào)用類運(yùn)行于同一地址空間時,所述端點直接獲得對被調(diào)用類的內(nèi)存引用,調(diào)用類通過該引用而直接調(diào)用被調(diào)用類。進(jìn)一步地,所述軟件制品包含執(zhí)行位置可變類、代理類、端點以及相關(guān)資源文件。所述相關(guān)資源文件可以是圖像文件、XML配置文件等。所述軟件制品可以有多個副本分別運(yùn)行在不同的網(wǎng)絡(luò)節(jié)點上。進(jìn)一步地,所述軟件應(yīng)用的性能可以采用多種衡量方式,比如可以采用時間開銷、吞吐量開銷、能耗開銷中的一種或多種來衡量。進(jìn)一步地,本發(fā)明可對轉(zhuǎn)換為目標(biāo)結(jié)構(gòu)的應(yīng)用類進(jìn)行聚類,將相互間調(diào)用頻繁的類在必要時作為一個整體放到遠(yuǎn)端執(zhí)行??梢圆捎渺o態(tài)程序分 析方法或動態(tài)程序分析方法進(jìn)行所述聚類。本發(fā)明的方法可作為一款單獨的工具或是一款插件而集成到各種軟件開發(fā)平臺(如Eclipse,參見www. eclipse, org)或軟件下載平臺中(如豌豆夾手機(jī)精靈,參見www.wandoujia. com)。通過自動對軟件應(yīng)用的代碼進(jìn)行重構(gòu),將其轉(zhuǎn)換為可按需遠(yuǎn)程執(zhí)行的程序結(jié)構(gòu),從而幫助軟件應(yīng)用實現(xiàn)對計算資源的按需占有,以提高性能并改善用戶體驗。


圖I為直接內(nèi)存調(diào)用結(jié)構(gòu)示意圖。圖2為遠(yuǎn)程調(diào)用結(jié)構(gòu)示意圖。圖3為計算邏輯可按需遠(yuǎn)程執(zhí)行的目標(biāo)程序結(jié)構(gòu)示意圖。圖4為實現(xiàn)軟件應(yīng)用中計算邏輯按需遠(yuǎn)程執(zhí)行的代碼重構(gòu)步驟的示意圖。圖5為實現(xiàn)計算邏輯按需遠(yuǎn)程執(zhí)行的軟件應(yīng)用的運(yùn)行時系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式為使本發(fā)明的目的、特征和優(yōu)點能更明顯易懂,下文通過具體實施例并配合附圖,作詳細(xì)的說明。本發(fā)明的技術(shù)方案包含兩部分支持軟件應(yīng)用中計算邏輯實現(xiàn)按需遠(yuǎn)程執(zhí)行的設(shè)計模式;將軟件應(yīng)用的代碼轉(zhuǎn)換成可按需遠(yuǎn)程執(zhí)行模式的自動重構(gòu)方法。對其分別說明如下I.支持軟件應(yīng)用中計算邏輯實現(xiàn)按需遠(yuǎn)程執(zhí)行的設(shè)計模式一個給定的軟件應(yīng)用中的程序代碼無外乎具有兩種結(jié)構(gòu)一種是直接內(nèi)存調(diào)用結(jié)構(gòu)(Iocalinvocation),如圖I所示;另一種是遠(yuǎn)程調(diào)用結(jié)構(gòu)(remote invocation),如圖2所示。圖I中應(yīng)用類X調(diào)用應(yīng)用類N的過程是首先獲得對N的內(nèi)存引用,然后通過該引用去調(diào)用所需要的方法。顯然,這種直接內(nèi)存調(diào)用結(jié)構(gòu)并不允許N中的計算被按需轉(zhuǎn)移到遠(yuǎn)程執(zhí)行。這是因為,倘若N轉(zhuǎn)移到遠(yuǎn)程網(wǎng)絡(luò)節(jié)點后,X不能從它所在的內(nèi)存地址空間獲得對在遠(yuǎn)端的N的引用。在一個給定的軟件應(yīng)用中,還可能存在如圖2所示的遠(yuǎn)程調(diào)用結(jié)構(gòu)。X通過Remote Communication Service (RCS,遠(yuǎn)程通訊服務(wù))而獲得運(yùn)行在遠(yuǎn)端的N的一個引用,然后使用該引用去遠(yuǎn)程調(diào)用N中的方法。在該結(jié)構(gòu)中,由RCS負(fù)責(zé)將N的引用與N相關(guān)聯(lián)。盡管該結(jié)構(gòu)允許N遠(yuǎn)程執(zhí)行,然而卻仍然不能支持N實現(xiàn)按需遠(yuǎn)程執(zhí)行。原因在于,當(dāng)N和X在同一個地址空間中執(zhí)行時,X對N的方法調(diào)用仍需要RCS發(fā)消息給網(wǎng)絡(luò)棧才能傳遞到N,而網(wǎng)絡(luò)棧中的消息傳遞相比直接內(nèi)存引用來說極為耗時且耗資源,從而導(dǎo)致應(yīng)用性能下降。這與通過計算邏輯的按需轉(zhuǎn)移來保障應(yīng)用性能的初衷相違背。為了實現(xiàn)計算邏輯的按需遠(yuǎn)程執(zhí)行,目標(biāo)程序結(jié)構(gòu)必須要允許X能夠有效調(diào)用N中的方法而不管當(dāng)前X與N運(yùn)行在同一個地址空間還是在不同的網(wǎng)絡(luò)節(jié)點上。本發(fā)明給出了一種支持軟件應(yīng)用中計算邏輯按需遠(yuǎn)程執(zhí)行的目標(biāo)程序結(jié)構(gòu),主要包含如下兩個核心元素Proxy (代理)和Endpoint (端點)。此外,N類自身的內(nèi)部實現(xiàn)也要做相應(yīng)的修改。比如,實現(xiàn)一些特殊的接口及對應(yīng)的一些特殊方法。新添加這些接口及方法的目標(biāo)是為了使N能夠被代理和端點所使用,但修改后的N和修改前的N的功能和外部表現(xiàn)沒有本質(zhì)區(qū)別。如圖3所示,本發(fā)明將X和N之間的直接內(nèi)存調(diào)用以及通過RCS的遠(yuǎn)程調(diào)用都轉(zhuǎn)換成了經(jīng) 全一致,只是它本身不執(zhí)行任何實際的計算操作,只負(fù)責(zé)將方法調(diào)用轉(zhuǎn)發(fā)到N執(zhí)行。如果N的位置改變,比如從X所在的內(nèi)存地址空間轉(zhuǎn)移到了遠(yuǎn)程網(wǎng)絡(luò)節(jié)點,或是從某一遠(yuǎn)程網(wǎng)絡(luò)節(jié)點轉(zhuǎn)移到了另一節(jié)點,X并不會知道N位置的變化。其原因在于NProxy保持不變且始終與X運(yùn)行在同一地址空間中。Endpoint負(fù)責(zé)識別N當(dāng)前的位置并且負(fù)責(zé)X和N之間根據(jù)具體需要而進(jìn)行的跨網(wǎng)絡(luò)互操作或直接內(nèi)存調(diào)用。倘若N運(yùn)行在遠(yuǎn)程節(jié)點,則Endpoint會利用給定的RCS獲得對N的遠(yuǎn)程引用,并把該引用以NProxy的形式供X使用,使得X能夠通過該引用而遠(yuǎn)程調(diào)用N。當(dāng)X和N都運(yùn)行在同一地址空間時,Endpoint會直接獲得對N的內(nèi)存引用,并同樣以NProxy的形式供X所用,使得X調(diào)用N時不必經(jīng)過耗時的網(wǎng)絡(luò)棧。2.將軟件應(yīng)用的代碼轉(zhuǎn)換成可按需遠(yuǎn)程執(zhí)行模式的自動重構(gòu)方法在確定了軟件應(yīng)用的源結(jié)構(gòu)(圖I和圖2)以及目標(biāo)結(jié)構(gòu)(圖3)后,本發(fā)明逐步實施如圖4所示的程序轉(zhuǎn)換步驟來實現(xiàn)給定軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行并保障遠(yuǎn)程執(zhí)行后應(yīng)用整體性能的提升。首先,應(yīng)用類分類。對于一個給定的軟件應(yīng)用,本發(fā)明自動將其應(yīng)用類分成如下兩類執(zhí)行位置固定類(Anchored)和執(zhí)行位置可變類(Movable)兩種。Anchored類型的應(yīng)用類必須留在原網(wǎng)絡(luò)節(jié)點上執(zhí)行。原因在于,這些類使用到了一些只能在原節(jié)點才能獲取的特殊資源(比如圖形用戶界面顯示器以及特殊的文件等)。倘若這些類被轉(zhuǎn)移到遠(yuǎn)端網(wǎng)絡(luò)節(jié)點上執(zhí)行,它們會因找不到所需要的資源而造成執(zhí)行錯誤。這些類之外的其他應(yīng)用類都被自動歸為Movable類型的類。例如,一個用于數(shù)學(xué)處理的Math類就通常是一個Movable類型的類。在必要時,這些類可以遠(yuǎn)程執(zhí)行,從而通過對遠(yuǎn)程計算資源的占有來提高整個應(yīng)用的性能。其次,應(yīng)用類轉(zhuǎn)換。在這一步中,會將給定軟件應(yīng)用類代碼從源結(jié)構(gòu)轉(zhuǎn)換為目標(biāo)結(jié)構(gòu),使之可遠(yuǎn)程執(zhí)行。當(dāng)一個應(yīng)用類放到遠(yuǎn)端執(zhí)行時,與之交互的應(yīng)用類都需要被轉(zhuǎn)換成可按需遠(yuǎn)程調(diào)用的結(jié)構(gòu),即,生成被調(diào)用者的代理類Proxy,重寫調(diào)用類來使用Proxy。需要注意的是,如果一個Anchored類被在遠(yuǎn)端執(zhí)行的Movable類所調(diào)用,后者同樣需要前者的代理類。由于只有根據(jù)運(yùn)行時信息才能最終決定Movable類的本地/遠(yuǎn)程執(zhí)行以提高應(yīng)用整體性能,因此,必須對所有的被調(diào)用類生成相應(yīng)的代理,并重寫調(diào)用類來使用這些代理,除非調(diào)用類和被調(diào)用類都是Anchored的情況。在本發(fā)明所提出的方法中,一個Proxy與其被代理的應(yīng)用類在外部表現(xiàn)及功能上完全一致。也就是說,這兩個類繼承了同樣的父類,實現(xiàn)了同樣的業(yè)務(wù)接口,具有同樣的方法簽名。這樣,才能使那些原本使用被代理類的應(yīng)用類在使用Proxy時不能感覺到差別。接著,應(yīng)用類聚類。通過聚類可以使計算邏輯的遠(yuǎn)程執(zhí)行能夠進(jìn)一步提高應(yīng)用的性能,避免頻繁的網(wǎng)絡(luò)調(diào)用帶來負(fù)面影響。因為網(wǎng)絡(luò)調(diào)用通常極為耗時,若調(diào)用過于頻繁則 反而會影響應(yīng)用性能的提高。因此需要把相互間調(diào)用頻繁的類作為一個整體在必要時放到遠(yuǎn)端執(zhí)行。倘若在應(yīng)用運(yùn)行才去發(fā)現(xiàn)應(yīng)用類的調(diào)用關(guān)系,通常會帶來巨大的開銷。因此,本步驟的目的就是要簡化對應(yīng)用中哪些計算邏輯需要被真正遠(yuǎn)程執(zhí)行的運(yùn)行時決策。本發(fā)明基于應(yīng)用類聚類的方法來實現(xiàn)這種簡化。例如,通過聚類發(fā)現(xiàn)類X和N調(diào)用頻繁。在運(yùn)行時,Endpoint可以只監(jiān)控X的執(zhí)行軌跡來決定是否需要將X和N —起放到遠(yuǎn)端執(zhí)行。這樣做不但可以避免X和N被分到網(wǎng)絡(luò)兩端時所需要進(jìn)行地頻繁的跨網(wǎng)絡(luò)互操作,并且可以簡化運(yùn)行時X和N之間關(guān)系的分析以及對N的監(jiān)控,從而降低開銷。上述聚類可以采用多種方法,比如使用靜態(tài)程序分析方法,基于調(diào)用應(yīng)用類之間的關(guān)系圖(call-graph)進(jìn)行聚類,也可以采用動態(tài)程序分析方法。最后,應(yīng)用類封裝。本發(fā)明所提出的方法的輸入是一個給定的軟件應(yīng)用的組成代碼以及相應(yīng)的資源文件(原始應(yīng)用所擁有的全部資源文件),如圖像、XML配置文件等。在經(jīng)歷了以上步驟之后,輸出包含兩類制品一個是轉(zhuǎn)換后封裝為原始應(yīng)用格式的應(yīng)用,該應(yīng)用留在原網(wǎng)絡(luò)節(jié)點運(yùn)行;另一類是原始應(yīng)用中那些Movable類型的應(yīng)用類、代理、端點以及相關(guān)資源文件所組成的一個可在遠(yuǎn)程網(wǎng)絡(luò)節(jié)點部署執(zhí)行的軟件制品。圖5展示了一個可實現(xiàn)計算邏輯按需遠(yuǎn)程執(zhí)行的軟件應(yīng)用的運(yùn)行時系統(tǒng)結(jié)構(gòu)。該應(yīng)用包含了 6個類,名字分別從a到i。通過步驟I,發(fā)現(xiàn)類b和g都是Anchored類,必須留在原網(wǎng)絡(luò)節(jié)點上執(zhí)行。其他類都是Movable類,它們既可在原網(wǎng)絡(luò)節(jié)點上執(zhí)行,也可在新增的遠(yuǎn)程網(wǎng)絡(luò)節(jié)點上執(zhí)行。通過步驟2,每一個應(yīng)用類都生成了對應(yīng)的Proxy類,并且應(yīng)用類間的調(diào)用都通過Proxy和Endpoint來完成。經(jīng)過步驟3發(fā)現(xiàn)a, c, d, e和f是關(guān)系緊密的類,因此它們被聚類在了一起已備在必要時作為一個整體運(yùn)行在遠(yuǎn)端。步驟4將所有的Movable類型的應(yīng)用類、代理、端點以及相關(guān)資源文件封裝為可在遠(yuǎn)端節(jié)點部署執(zhí)行的軟件制品,該制品允許有多個副本分別運(yùn)行在不同的網(wǎng)絡(luò)節(jié)點上(每個副本運(yùn)行在一個網(wǎng)絡(luò)節(jié)點),以支持本發(fā)明所提出的通過計算邏輯的遠(yuǎn)程執(zhí)行來實現(xiàn)的對資源的占有。同樣,會將全部應(yīng)用類、它們的代理以及Endpoint都按照原有應(yīng)用格式進(jìn)行封裝為轉(zhuǎn)換后的應(yīng)用,將其部署在原網(wǎng)絡(luò)節(jié)點上進(jìn)行。不同之處在于,轉(zhuǎn)換后應(yīng)用中Movable類的計算可以根據(jù)需要而調(diào)用在遠(yuǎn)端的對應(yīng)Movable類執(zhí)行或是直接本地執(zhí)行。在運(yùn)行時,通過Endpoint預(yù)測當(dāng)一應(yīng)用類遠(yuǎn)程執(zhí)行時該應(yīng)用類所屬的軟件應(yīng)用的性能,如果發(fā)現(xiàn)遠(yuǎn)程執(zhí)行能夠提高性能,則遠(yuǎn)程執(zhí)行(即調(diào)用部署在遠(yuǎn)程節(jié)點的執(zhí)行位置可變類),否則就本地執(zhí)行(即調(diào)用部署在本地節(jié)點的執(zhí)行位置可變類)。具體來說,Endpoint預(yù)測到若應(yīng)用類d遠(yuǎn)程執(zhí)行時可以提高應(yīng)用性能,則通過RCS獲得對d的遠(yuǎn)程引用,調(diào)用類通過該引用而遠(yuǎn)程調(diào)用d。具體過程是首先激活在遠(yuǎn)端的d,并且把本地d的狀態(tài)通過Endpoint注入到遠(yuǎn)端的d,實現(xiàn)狀態(tài)同步,接著將本地的d停用。此后,d的Proxy將會通過Endpoint把對原節(jié)點d的調(diào)用請求轉(zhuǎn)發(fā)到遠(yuǎn)端的d上執(zhí)行。由于d、C、e和f在第3步時已經(jīng)被聚類為了一個邏輯整體。因此,當(dāng)d被轉(zhuǎn)移到遠(yuǎn)端執(zhí)行時,該聚類中的其他類也跟著被移到遠(yuǎn)端執(zhí)行,以減少頻繁的跨網(wǎng)絡(luò)調(diào)用。該過程也一樣要經(jīng)歷激活、狀態(tài)同步、停用等階段。因此可以從圖中看到,在原節(jié)點,a、C、d、e和f的Proxy在起作用,而這些類中計算邏輯的真正執(zhí)行是在遠(yuǎn)端的網(wǎng)絡(luò)節(jié)點上。當(dāng)網(wǎng)絡(luò)條件不佳時或是發(fā)現(xiàn)僅原節(jié)點的資源就足以保障應(yīng)用性能時,可以通過停用在遠(yuǎn)端的a、c、d、e和f,并重新激活在原節(jié)點的對應(yīng)類實例來將遠(yuǎn)程執(zhí)行的計算移回,以節(jié)約資源并保障應(yīng)用正常運(yùn)行。所有對這些類的調(diào)用都將通過Proxy和Endpoint而轉(zhuǎn)發(fā)回原節(jié)點,從而以一種按需的方式實現(xiàn)了應(yīng)用中計算邏輯的遠(yuǎn)程執(zhí)行。
上述過程中,應(yīng)用系統(tǒng)的性能可以采用多種衡量方式,比如可以采用時間開銷、吞吐量開銷、能耗開銷其中的一種或多種來衡量。吞吐量開銷可由應(yīng)用所能處理的用戶請求量來衡量。能耗開銷可由節(jié)點(如手機(jī))端的電池續(xù)航時間來衡量。時間開銷可包含發(fā)送調(diào)用某一方法的請求給該應(yīng)用類所用的時間、該應(yīng)用類執(zhí)行該方法所用的時間以及返回執(zhí)行結(jié)果所用的時間。具體來說,應(yīng)用類d遠(yuǎn)程執(zhí)行的時間開銷由如下三部分構(gòu)成I. Tsend,發(fā)送需要執(zhí)行方法m的請求給遠(yuǎn)程的d所花的時間;2. Texecute,遠(yuǎn)程的d執(zhí)行方法m所花的時間;3. Tback,返回執(zhí)行結(jié)果所花的時間。而當(dāng)d本地執(zhí)行時m方法耗時為T’ execute。如果d所在的遠(yuǎn)程節(jié)點的計算資源比d原來所在的本地節(jié)點的計算資源豐富,比如d所在的遠(yuǎn)程節(jié)點為PC,而d所在的本地節(jié)點為手機(jī)(其CPU處理能力遠(yuǎn)不如PC的CPU處理能力)。這導(dǎo)致 Texecute << (表不遠(yuǎn)小于)T’execute,以至于 Tsend+Texecute+Tback<< T’ execute。如果網(wǎng)絡(luò)不佳,或是遠(yuǎn)程資源不豐富,使得Tsend+Texecute+Tback >T’execute,則本地執(zhí)行就沒有必要了。此時endpoint就直接獲得對被調(diào)用類的內(nèi)存引用,調(diào)用類通過該引用而直接調(diào)用被調(diào)用類。因此,endpoint可以預(yù)測出d是否應(yīng)該本地執(zhí)行或遠(yuǎn)程執(zhí)行以通過占有計算資源來提高應(yīng)用性能。須說明的是,本發(fā)明并非必須通過端點進(jìn)行性能的預(yù)測。端點還可以通過收集應(yīng)用運(yùn)行數(shù)據(jù),將這些數(shù)據(jù)發(fā)送給第三方的預(yù)測器來預(yù)測性能。該預(yù)測器通過分析數(shù)據(jù)并進(jìn)行預(yù)測后返回結(jié)果給端點,然后端點根據(jù)結(jié)果來決定哪些應(yīng)用類實例(比如上述的應(yīng)用類d)需要遠(yuǎn)程執(zhí)行或是本地執(zhí)行。下面通過一個具體應(yīng)用的實施例說明本發(fā)明的方法。該實施例是將一個真實的JavaAndroid應(yīng)用即“GoGame (圍棋對戰(zhàn))”中的計算邏輯按需移動到服務(wù)器端執(zhí)行。GoGame 是由 INSA (法國國立應(yīng)用科學(xué)學(xué)院 Institut National des SciencesAppliquees)研究人員開發(fā)出的一款A(yù)ndroid圍棋對戰(zhàn)游戲。它的游戲模式中有人人對戰(zhàn)/人機(jī)對戰(zhàn)兩種。人機(jī)對戰(zhàn)中還可以選擇機(jī)器棋手所采取的智能算法,如基于模式的Pattern算法以及基于統(tǒng)計模擬的MonteCarlo算法。通常情況下,機(jī)器棋手需要進(jìn)行大量耗能耗時的計算才能決定落子的位置,而由于手機(jī)所擁有的處理器配置通常不高,因此導(dǎo)致該應(yīng)用的性能較低,對用戶的輸入不能快速做出響應(yīng),且耗電量很大,帶來不佳的用戶體驗。本實施例使用三星Samsung S5660型號的Android手機(jī)(CPU 800MHz,內(nèi)存160M,Android22手機(jī)操作系統(tǒng)平臺,鋰電EB494358VU,1350mAh)作為實驗手機(jī)。使用聯(lián)想SL400筆記本作為服務(wù)器(CPU Intel Core Duo,T6570,2. 1GHz,內(nèi)存1G)。手機(jī)和筆記本通過wifi關(guān)聯(lián)。相互間的RTT (往返行程時間)為50ms。
本實施例按照圖3所示的設(shè)計模式以及圖4的重構(gòu)方法,自動將原始的GoGame應(yīng)
用轉(zhuǎn)換為計算邏輯可按需遠(yuǎn)程執(zhí)行的GoGame應(yīng)用。首先,識別出原始GoGame中哪些類是Anchored以及Movable,如表I所示。表I. GoGame轉(zhuǎn)換后得到的類簇
類簇編號可移動性類簇中包含的Android應(yīng)用類
1Anchored insa. android, andgoid. AndGOid
insa. android, andgoid. AndGOidS Iinsa.android.andgoid.Board insa. android, andgoid. Constants insa. android, andgoid. GameManager insa. android, andgoid. GameManagerS I insa. android, andgoid. GobanView insa. android. andgoid. Group insa. android, andgoid. GroupBoard insa.android.andgoid.Player insa.android.andgoid.HumanPlayer insa.android.andgoid.ComputerPlayer insa.android.andgoid.R insa.android.andgoid.RS array insa.android.andgoid.R$attr insa.android.andgoid.R$drawable insa. android. andgoid.R$layout ___insa.android.andgoid.R$string_
2Movable insa.android.andgoid.strategy.MoneCarloAI
insa. android, andgoid. strategy.UCTNode
3Movable insa. android, andgoid. strategy. PattemAI
insa.android.andgoid.strategy.pattem.PattemBoardSide
insa.android.andgoid.strategy.pattem.PattemCutl
insa.android.andgoid.strategy.pattem.Pattem_Cut2
insa.android.andgoid.strategy.pattem.PattemHane
insa.android.andgoid.strategy.pattem.Pattem
insa. android, andgoid. strategy.pattem. PattemConfiguration
insa.android.andgoid.strategy.pattem.PattemStoneAny
insa.android.andgoid.strategy.pattem.PattemStoneColored
insa.android.andgoid.strategy.pattem.PattemStoneEmpty
insa.android.andgoid.strategy.pattem.PattemStoneMove
insa.android.andgoid.strategy.pattem.PattemStoneOutOfBoard
insa.android.andgoid.strategy.pattem.PattemStoneRestricted
insa.android.andgoid.strategy.pattem.PattemStone接著自動地對這些類進(jìn)行轉(zhuǎn)換,并生成對應(yīng)的Proxy以及Endpoint。隨后,通過聚
類發(fā)現(xiàn)GoGame中的應(yīng)用類可以聚為如表I所示的類簇,并將聚類信息存儲在轉(zhuǎn)換后應(yīng)用的
Endpoint中。最后通過封裝,自動生成轉(zhuǎn)換后的Android GoGame應(yīng)用以及由Movable應(yīng)用
類、Proxy等所組成的可執(zhí)行的Apk文件。轉(zhuǎn)換后的GoGame應(yīng)用被部署在手機(jī)上,Movable
類對應(yīng)的Jar文件被部署在服務(wù)器上。實驗選擇將類簇2移動到服務(wù)器端端執(zhí)行,并使用MonteCarloAI人機(jī)對戰(zhàn)的方式
進(jìn)行測試,游戲進(jìn)行5分鐘(即300秒)。測試方案如下I. GoGame的計算全部在手機(jī)上執(zhí)行(300秒)。2. GoGame中的類簇2 (即表I中包含MonteCarloAI的類簇)移動到服務(wù)器端執(zhí)行(時間300秒)。3.使手機(jī)逐漸遠(yuǎn)離wifi路由器,在300秒時間內(nèi)使RTT逐漸增大到600ms (用以模擬用戶離開服務(wù)器端的場景),在240秒到300秒這一個時間段內(nèi)將類簇2移動回手機(jī)端執(zhí)行。實驗得到的機(jī)器棋手下棋的響應(yīng)性能比較和電能消耗如表2所示。表2.性能和能耗 比較(測試時長為300秒)
權(quán)利要求
1.一種軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法,其步驟包括 1)將軟件應(yīng)用的應(yīng)用類分為執(zhí)行位置固定類和執(zhí)行位置可變類; 2)將所述應(yīng)用類的程序代碼從源結(jié)構(gòu)轉(zhuǎn)換為目標(biāo)結(jié)構(gòu);所述目標(biāo)結(jié)構(gòu)包含代理和端點所述代理與調(diào)用類運(yùn)行于同一地址空間,負(fù)責(zé)將方法調(diào)用經(jīng)由所述端點轉(zhuǎn)發(fā)至在本地或遠(yuǎn)程運(yùn)行的被調(diào)用類,所述端點負(fù)責(zé)識別所述被調(diào)用類的當(dāng)前位置; 3)將轉(zhuǎn)換為所述目標(biāo)結(jié)構(gòu)的應(yīng)用類封裝為原始應(yīng)用格式的應(yīng)用和可遠(yuǎn)程執(zhí)行的軟件制品,分別部署于原網(wǎng)絡(luò)節(jié)點和遠(yuǎn)程網(wǎng)絡(luò)節(jié)點; 4)預(yù)測當(dāng)一應(yīng)用類遠(yuǎn)程執(zhí)行時該應(yīng)用類所屬的軟件應(yīng)用的性能,如果該性能提高,則在遠(yuǎn)程執(zhí)行該應(yīng)用類,否則在本地執(zhí)行該應(yīng)用類。
2.如權(quán)利要求I所述的方法,其特征在于,對轉(zhuǎn)換為目標(biāo)結(jié)構(gòu)的應(yīng)用類進(jìn)行聚類,將相互間調(diào)用頻繁的類作為一個整體放到遠(yuǎn)端執(zhí)行。
3.如權(quán)利要求2所述的方法,其特征在于,采用靜態(tài)程序分析方法或動態(tài)程序分析方法進(jìn)行所述聚類。
4.如權(quán)利要求I所述的方法,其特征在于,所述源結(jié)構(gòu)包括直接內(nèi)存調(diào)用結(jié)構(gòu)和RCS遠(yuǎn)程調(diào)用結(jié)構(gòu)。
5.如權(quán)利要求4所述的方法,其特征在于當(dāng)被調(diào)用類在遠(yuǎn)程運(yùn)行時,所述端點利用RCS獲得對被調(diào)用類的遠(yuǎn)程引用,調(diào)用類通過該引用而遠(yuǎn)程調(diào)用被調(diào)用類;當(dāng)被調(diào)用類和調(diào)用類運(yùn)行于同一地址空間時,所述端點直接獲得對被調(diào)用類的內(nèi)存引用,調(diào)用類通過該引用而直接調(diào)用被調(diào)用類。
6.如權(quán)利要求I所述的方法,其特征在于,所述軟件制品包含執(zhí)行位置可變類、代理、端點以及相關(guān)資源文件,所述相關(guān)資源文件包括圖像和XML配置文件。
7.如權(quán)利要求6所述的方法,其特征在于,所述軟件制品的多個副本分別運(yùn)行在不同的網(wǎng)絡(luò)節(jié)點上。
8.如權(quán)利要求I所述的方法,其特征在于,所述軟件應(yīng)用的性能通過時間開銷、吞吐量開銷以及能耗開銷中的一種或多種來衡量。
9.如權(quán)利要求8所述的方法,其特征在于,當(dāng)一應(yīng)用類遠(yuǎn)程執(zhí)行時,所述時間開銷包含發(fā)送調(diào)用某一方法的請求給該應(yīng)用類所用的時間、該應(yīng)用類執(zhí)行該方法所用的時間以及返回執(zhí)行結(jié)果所用的時間。
10.如權(quán)利要求1-9任意一項所述的方法,其特征在于,在遠(yuǎn)程執(zhí)行一應(yīng)用類的步驟包括激活、狀態(tài)同步、停用。
全文摘要
本發(fā)明提供一種軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行方法。首先將軟件應(yīng)用的應(yīng)用類分為執(zhí)行位置固定類和執(zhí)行位置可變類,再將應(yīng)用類的程序代碼從源結(jié)構(gòu)轉(zhuǎn)換為目標(biāo)結(jié)構(gòu)。通過所述目標(biāo)結(jié)構(gòu)將應(yīng)用類之間的直接內(nèi)存調(diào)用和遠(yuǎn)程調(diào)用轉(zhuǎn)換成經(jīng)由代理和端點進(jìn)行的間接遠(yuǎn)程調(diào)用。并通過預(yù)測當(dāng)一應(yīng)用類遠(yuǎn)程執(zhí)行時是否能改善該應(yīng)用類所屬的軟件應(yīng)用的性能,實現(xiàn)軟件應(yīng)用中計算邏輯的按需遠(yuǎn)程執(zhí)行。本發(fā)明方法通過自動對軟件應(yīng)用的代碼進(jìn)行重構(gòu),將其轉(zhuǎn)換為可按需遠(yuǎn)程執(zhí)行的程序結(jié)構(gòu),實現(xiàn)對計算資源的按需占有,以提高性能并改善用戶體驗。
文檔編號G06F9/48GK102629198SQ20121005071
公開日2012年8月8日 申請日期2012年2月29日 優(yōu)先權(quán)日2012年2月29日
發(fā)明者劉譞哲, 張穎, 梅宏, 黃罡 申請人:北京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1