国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于代理的動(dòng)態(tài)軟件更新方法

2013-05-24 15:51:54黃晗
三明學(xué)院學(xué)報(bào) 2013年4期
關(guān)鍵詞:調(diào)用代理構(gòu)件

黃晗

(泉州師范學(xué)院物理與信息工程學(xué)院,福建泉州362000)

基于代理的動(dòng)態(tài)軟件更新方法

黃晗

(泉州師范學(xué)院物理與信息工程學(xué)院,福建泉州362000)

動(dòng)態(tài)軟件更新是一種新型的軟件演化機(jī)制,它允許應(yīng)用軟件系統(tǒng)在運(yùn)行過(guò)程中執(zhí)行軟件更新而不會(huì)出現(xiàn)停機(jī)狀態(tài)。一些大型重要的應(yīng)用軟件系統(tǒng)需要提供不間斷的可用性服務(wù)將受益于此機(jī)制,因此將OSGI作為軟件構(gòu)件的支撐平臺(tái),提出一種基于代理的OSGi構(gòu)件動(dòng)態(tài)更新方法。該方法繼承了OSGi良好的生命周期管理和動(dòng)態(tài)依賴(lài)管理特性,拓展了其動(dòng)態(tài)性和互換性的特點(diǎn)。實(shí)驗(yàn)表明,該方法可以準(zhǔn)確地進(jìn)行OSGi構(gòu)件的動(dòng)態(tài)更新,將對(duì)智能家居環(huán)境下的系統(tǒng)維護(hù)及其軟件演化提供一定的指導(dǎo)意義。

代理;動(dòng)態(tài)軟件;更新;OSGi;構(gòu)件;bundle

目前,不僅專(zhuān)業(yè)化的軟件系統(tǒng)需要為客戶提供不間斷服務(wù),比如航天航空科技和醫(yī)院的生命支撐平臺(tái)等都必須連續(xù)運(yùn)行,就是一些“大眾化”的軟件系統(tǒng)如銀行等金融機(jī)構(gòu)的服務(wù)器一旦停機(jī)也可能造成巨大恐慌,因此動(dòng)態(tài)軟件更新是一種機(jī)制,它允許軟件更新或打補(bǔ)丁到被應(yīng)用正在運(yùn)行系統(tǒng)的服務(wù)中去而不會(huì)出現(xiàn)停機(jī)或宕機(jī)等故障。文獻(xiàn)[1]通過(guò)分析比較,論證了動(dòng)態(tài)軟件更新是在不停機(jī)情況下最佳的選擇方法。楊芙清等[2]提出了構(gòu)件的軟件開(kāi)發(fā)是提高軟件開(kāi)發(fā)效率和質(zhì)量的保證,并已在分布式系統(tǒng)中得到了充分的驗(yàn)證。OSGi(open service gateway initiative)框架作為一種成功服務(wù)的平臺(tái)模型,其開(kāi)放源代碼的形式可以作為部署軟件服務(wù)的基礎(chǔ)平臺(tái)。R-OSGi在OSGi基礎(chǔ)上將單一的JAVA虛擬機(jī)擴(kuò)展到分布平臺(tái)上,通過(guò)引入一個(gè)R-OSGi的bundle構(gòu)件組成了遠(yuǎn)程服務(wù),形成網(wǎng)絡(luò)通道,生成代理來(lái)實(shí)現(xiàn)一個(gè)分布環(huán)境支持OSGi標(biāo)準(zhǔn)的中間件平臺(tái),該平臺(tái)被廣泛地應(yīng)用在各種應(yīng)用程序中。對(duì)動(dòng)態(tài)軟件更新有多種方法,Iulian Neamtiu[3]設(shè)計(jì)一個(gè)Ginseng系統(tǒng)完成對(duì)基于過(guò)程的程序的動(dòng)態(tài)更新,它通過(guò)打補(bǔ)丁的方法來(lái)保證不會(huì)違反類(lèi)型安全等事宜;Malabarba[4]通過(guò)修改了標(biāo)準(zhǔn)的Java虛擬機(jī)引入動(dòng)態(tài)類(lèi)的方法,違背了Java跨平臺(tái)的初衷;而Plash[5]等人提出了支持動(dòng)態(tài)組件更新的DCUP體系結(jié)構(gòu),但它對(duì)開(kāi)發(fā)人員不是透明的。本文提出了一種基于OSGi平臺(tái)的代理動(dòng)態(tài)軟件更新的方法,增加一個(gè)bundle而不修改OSGi的平臺(tái)結(jié)構(gòu)來(lái)完成動(dòng)態(tài)軟件更新,而鮑春鍵[6]等人提出更新操作必須解決4個(gè)問(wèn)題,也就是確定更新單元、獲取最佳更新時(shí)機(jī)、狀態(tài)轉(zhuǎn)移機(jī)制確立和請(qǐng)求重定向,其中狀態(tài)轉(zhuǎn)移機(jī)制是最重要的,如果能保持當(dāng)前的狀態(tài),就可以確保更新處理過(guò)程的正確執(zhí)行。因此由服務(wù)主動(dòng)保存當(dāng)前狀態(tài),然后提取狀態(tài),轉(zhuǎn)移到新的服務(wù),再替換原服務(wù)的狀態(tài)也是一種可以進(jìn)行實(shí)踐的想法。

本文采用在client和server之間加入一層Myproxy(代理),通過(guò)降低bundle間的耦合程度加大server可控性,因?yàn)閷?duì)于動(dòng)態(tài)軟件更新永遠(yuǎn)只能在server上進(jìn)行,步驟是MyProxy發(fā)現(xiàn)服務(wù)并注冊(cè)服務(wù),client通過(guò)MyProxy獲取服務(wù),MyProxy幫助client調(diào)用服務(wù)。

1 代理更新

代理模式是常用的Java設(shè)計(jì)模式[7],動(dòng)態(tài)代理中的代理類(lèi)通過(guò)java.lang.reflect.proxy類(lèi)在運(yùn)行時(shí)根據(jù)接口定義,采用Java反射功能動(dòng)態(tài)生成的,它的特征是代理類(lèi)與委托類(lèi)有同樣的接口,并通過(guò)java.lang.reflect.InvocationHandler實(shí)現(xiàn)handler對(duì)象。本文所用到的代理更新框架如圖1所示,該結(jié)構(gòu)由3 個(gè)bundle分別是更新模塊,代理顯示模塊以及測(cè)試模塊組成。

更新模塊:包括保存狀態(tài)子模塊,R-OSGi服務(wù)尋找子模塊和動(dòng)態(tài)更新實(shí)現(xiàn)子模塊組成。R-OSGi服務(wù)尋找子模塊獲取bundle上的client要更新的信息,記錄bundle的標(biāo)記并將信息狀態(tài)傳遞保存塊,同時(shí)代理子模塊要完成調(diào)用更新過(guò)程。

代理顯示模塊:該模塊在管理端顯示要更新的bundle模塊,可以以圖形的形式和XML文件的形式輸出。

試驗(yàn)測(cè)試模塊:為了測(cè)試而專(zhuān)門(mén)引進(jìn)的一個(gè)模塊,以圖形的形式直觀顯示。

為了不修改底層OSGi以及R-OSGi的結(jié)構(gòu),只使用它們的服務(wù),也不修改bundle的業(yè)務(wù)邏輯,使用代理傳遞所需更新的bundle的實(shí)現(xiàn),無(wú)需對(duì)相應(yīng)bundle作任何更改,只產(chǎn)生一個(gè)相應(yīng)的代理來(lái)管理bundle的服務(wù)請(qǐng)求。

圖1 代理的動(dòng)態(tài)更新框架結(jié)構(gòu)圖

1.1 基于代理的服務(wù)更新

該方法使用代理來(lái)進(jìn)行更新,如圖2所示。在org. osgi.framework.Service.Discovery.Listener接口中定義了對(duì)bundle遠(yuǎn)程的注冊(cè)服務(wù),MyProxy代理類(lèi)實(shí)現(xiàn)了接口這一功能,當(dāng)發(fā)現(xiàn)出現(xiàn)一個(gè)新的遠(yuǎn)程服務(wù)時(shí),調(diào)用_announceService這個(gè)函數(shù),把遠(yuǎn)程服務(wù)注冊(cè)的接口及URI加入到注冊(cè)表中;而當(dāng)遠(yuǎn)程服務(wù)沒(méi)有調(diào)用時(shí),則使用_discardService函數(shù),把注冊(cè)表中這項(xiàng)服務(wù)記錄刪除。

1.1.1 兩張注冊(cè)表

圖2 代理類(lèi)圖

(1)u&i_map:用來(lái)記錄MyProxy Class所發(fā)現(xiàn)的當(dāng)前每一個(gè)可用的服務(wù),把服務(wù)實(shí)現(xiàn)的接口,服務(wù)的地址記錄到注冊(cè)表中。存在一種可能是如果存在兩個(gè)服務(wù),在接口相同但其地址不同,這表明有兩個(gè)client在不同地址上同時(shí)申請(qǐng)?jiān)擁?xiàng)服務(wù),本方法當(dāng)作兩個(gè)服務(wù)對(duì)象。

(2)registry_map:用來(lái)記錄當(dāng)前正在被client所使用的服務(wù),本地代理bundle以及client使用的服務(wù)實(shí)例handler對(duì)象。

1.1.2 調(diào)用服務(wù)

該方法通過(guò)增加的MyProxy bundle(代理)的3個(gè)函數(shù)getService(),setService(),action()完成調(diào)用功能。下面談?wù)剆etService(),首先它調(diào)用getService生成一個(gè)實(shí)例,并為IProxy服務(wù)的using_service所捕獲,完成一個(gè)實(shí)例。

其調(diào)用分成兩個(gè)階段進(jìn)行:

第一階段:

1)client要求服務(wù)被MyProxy捕獲,獲得getService;

2)IProxy的setService函數(shù)被調(diào)用;

3)IProxy的using_service方法。

第二階段:

1)client調(diào)用IProxy的action函數(shù);

2)IProxy使用using_service方法中的action函數(shù);

3)調(diào)用handler中的invoke函數(shù),完成實(shí)現(xiàn)類(lèi)調(diào)用。

1.1.3 更新服務(wù)

該方法通過(guò)增加的MyProxy bundle(代理)中的3個(gè)函數(shù)replace(),update(),addingService()完成更新功能如圖3所示,其算法如下:

1)client更新命令被MyProxy捕獲;

2)IProxy調(diào)用replace進(jìn)行bundle定位;

3)handler中的update與invoke進(jìn)行時(shí)機(jī)判斷;

4)如果invoke則實(shí)現(xiàn)類(lèi)調(diào)用,否則update獲得控制獲取最佳更新時(shí)機(jī);

4-1)提取原服務(wù)狀態(tài);

4-2)停止服務(wù);

4-3)重定向到新服務(wù)的handle中去;

5)新服務(wù)resume;

6)更新結(jié)束,去除標(biāo)記,斷開(kāi)舊服務(wù)。

圖3 遠(yuǎn)程服務(wù)更新

1.2 服務(wù)狀態(tài)存儲(chǔ)

OSGi上各個(gè)bundle中發(fā)布著不同的服務(wù),我們以一個(gè)服務(wù)作為更新的粒度,服務(wù)擁有良好的接口和封閉性,因此在更新階段需要解決狀態(tài)的轉(zhuǎn)移問(wèn)題,本文使用一個(gè)接口IUpdate來(lái)主動(dòng)保存原來(lái)的狀態(tài),通過(guò)3個(gè)函數(shù)object(),resume(),action()完成狀態(tài)的轉(zhuǎn)移,如圖3所示。

1.3 請(qǐng)求服務(wù)bundle標(biāo)記

請(qǐng)求服務(wù)標(biāo)記模塊為每一個(gè)bundle打上標(biāo)記,該方法利用Java TI[8]技術(shù)來(lái)對(duì)client進(jìn)行標(biāo)記,當(dāng)一個(gè)線程獲得更新服務(wù)命令時(shí),會(huì)在相應(yīng)記錄的bundle上留有標(biāo)記并在更新完畢時(shí)去除。

1.4 代理顯示模塊

代理顯示模塊主要是使用Java的AWT圖形界面交互的接口,利用其能提供操作系統(tǒng)的圖形庫(kù),在本地注冊(cè)一個(gè)R-OSGi的遠(yuǎn)程服務(wù),如properties.put (RemoteOSGiService,"info.UI");管理員可以通過(guò)R-OSGi系統(tǒng)提供的UI服務(wù)來(lái)獲取這個(gè)圖形界面,UI類(lèi)將收集當(dāng)前在MyProxy所在的OSGi平臺(tái)上所有代理所注冊(cè)服務(wù)信息,并將直接在屏幕是顯示當(dāng)前MyProxy上注冊(cè)的服務(wù),如圖4所示。

圖4 代理信息顯示

2 試驗(yàn)與分析

為了很好地觀測(cè)更新過(guò)程,該方法再增加一個(gè)bundle,負(fù)責(zé)處理與數(shù)據(jù)更新相關(guān)的一些內(nèi)容,如獲取M yProxy的數(shù)據(jù)、寫(xiě)入文件、返回到圖像信息,如圖5所示。

通過(guò)task函數(shù)get_used_time()返回從MyProxy中獲得數(shù)據(jù)始到現(xiàn)在止的時(shí)間;get_state()返回當(dāng)前的數(shù)據(jù)量,是個(gè)bool函數(shù);run()函數(shù)將獲取數(shù)據(jù)寫(xiě)入文件,在Myframe接口中通過(guò)t.scheduleAtFixedRate(new MyTask(),50,100),將在100ms抽樣一次以獲取相關(guān)數(shù)據(jù)量,通過(guò)幅度與時(shí)間的比值或可獲得數(shù)據(jù)速率,并顯示在屏幕上,我們的測(cè)試環(huán)境是將兩臺(tái)intel P4 2.1GHz,1G內(nèi)存的電腦連接在一個(gè)相對(duì)獨(dú)立的實(shí)驗(yàn)室局域網(wǎng)內(nèi),運(yùn)行環(huán)境是windows7和R-OSGi框架,并建立兩個(gè)快慢數(shù)據(jù)傳輸軟件,如圖6所示,圖中是數(shù)據(jù)高速軟件在傳輸過(guò)程的某個(gè)時(shí)間內(nèi)被低速軟件迅速代替。

圖5 測(cè)驗(yàn)類(lèi)圖

圖6 動(dòng)態(tài)更新實(shí)驗(yàn)

適用性分析:更新框架采用獨(dú)立的bundle代理機(jī)制,避免對(duì)OSGi平臺(tái)的侵入,直接運(yùn)行在Java虛擬機(jī)平臺(tái)上,再加上OSGi本身是智能家居的控制模塊,因此特別適合于嵌入式設(shè)備。

透明性分析:管理人員簡(jiǎn)單操作動(dòng)態(tài)更新過(guò)程,使用服務(wù)注冊(cè)、發(fā)布、綁定,實(shí)現(xiàn)了對(duì)用戶的透明,但在更新期間或多或少會(huì)受到更新內(nèi)容的影響,如動(dòng)態(tài)實(shí)驗(yàn)中傳輸速度變慢可能會(huì)被客戶認(rèn)為服務(wù)不可用,因此在更新過(guò)程中還要進(jìn)行回滾等方法給予協(xié)助。

正確性分析:除了上述方法回滾外,在運(yùn)行過(guò)程中選擇原來(lái)狀態(tài)變量的保存,更新時(shí)機(jī)選擇在最佳安全時(shí)期(例如選擇在軟件使用量最少時(shí)機(jī)),狀態(tài)保存和轉(zhuǎn)移遵從嚴(yán)格的約定,保持狀態(tài)中所有變量前后一致性。

3 討論

由于OSGi中各個(gè)bundle存在著不同的生命周期,不可避免地需要進(jìn)行各種維護(hù),軟件也需要進(jìn)行升級(jí)。Sameer[9]實(shí)現(xiàn)了用于支持C/S結(jié)構(gòu)動(dòng)態(tài)更新的基礎(chǔ)框架,但對(duì)于新舊版本出現(xiàn)不兼容的情況卻無(wú)法解決,Baumann[10]等人就面向?qū)ο蟛僮飨到y(tǒng)的動(dòng)態(tài)更新建立一套實(shí)用的機(jī)制但沒(méi)有考慮接口問(wèn)題,Tewksbury[11]等人則描述CORBA使用中間版本的進(jìn)行更新的更新機(jī)制,Kramer[12]和Magee[13]等人主要集中在構(gòu)件動(dòng)態(tài)更新上,王曉鵬[14]等人主要處理構(gòu)件化軟件的動(dòng)態(tài)更新問(wèn)題,而上海交大的RAD實(shí)驗(yàn)室則組織了對(duì)基于服務(wù)的分布式軟件動(dòng)態(tài)更新關(guān)鍵技術(shù)研究和分布式系統(tǒng)中軟件動(dòng)態(tài)更新的形式化研究等國(guó)家級(jí)重點(diǎn)課題的攻關(guān)并取得多項(xiàng)國(guó)家發(fā)明專(zhuān)利,但嵌入式系統(tǒng)動(dòng)態(tài)更新技術(shù)發(fā)展進(jìn)步有限[15],這一問(wèn)題值得我們進(jìn)一步探索。本文提出了一種基于代理的軟件動(dòng)態(tài)更新方法,該方法以O(shè)SGi為支撐平臺(tái),沒(méi)有更改的平臺(tái)框架結(jié)構(gòu)和邏輯功能,實(shí)驗(yàn)表明該方法符合設(shè)計(jì)要求,但在實(shí)驗(yàn)過(guò)程中發(fā)現(xiàn)服務(wù)類(lèi)型受到一定限制,因此在后續(xù)研究中重點(diǎn)是如何解決這個(gè)限制,只要注冊(cè)在更新框架上就可以完成動(dòng)態(tài)更新動(dòng)作并爭(zhēng)取將它擴(kuò)展到嵌入式應(yīng)用中。

致謝:感謝在上海交大訪學(xué)期間得到sjturad實(shí)驗(yàn)室陳俊清博士大力支持與幫助。

[1]張仕.黃林鵬.基于OSGi的服務(wù)動(dòng)態(tài)演化[J].軟件學(xué)報(bào),2008,19(5):1201-1211.

[2]楊芙清.梅宏.軟件復(fù)用與軟件構(gòu)件技術(shù)[J].電子學(xué)報(bào),1999,27(2):68-75.

[3]NEAMTIU I,HICKS M,STOYLE G,et al.Practical dynamic software updating for C[M].ACM,2006.

[4]MALABARBA S,PANDEY R,GRAGG J,et al.Runtime support for type-safe dynamic Java classes[M].Berlin:Springer Heidelberg,2000.

[5]PLASIL F,B?LEK D,JANECEK R.SOFA/DCUP:Architecture for component trading and dynamic updating[C]// Configurable Distributed Systems,1998.Proceedings.Fourth International Conference on.IEEE,1998:43-51.

[6]鮑春健.吳俊敏.許胤龍,等.基于組件的動(dòng)態(tài)軟件更新[J].計(jì)算機(jī)應(yīng)用,2006,26(8):1909-1911.

[7]李青虹.基于Java的Web服務(wù)的構(gòu)建和開(kāi)發(fā)[J].三明學(xué)院學(xué)報(bào),2005,22(2):205-208.

[8]林洪武,尤朝,周明輝,等.以代理為中心的OSGi構(gòu)件資源監(jiān)控方法[J].計(jì)算機(jī)科學(xué)與探索,2011,5(1):23-31

[9]JMANI S.Automatic software upgrades for distributed systems[D].Cambridge:Massachusetts Instituteof Technology,2005.

[10]BAUMANN A,HEISER G,APPAVOO J,et al.Providing dynamic update in an operating system[C]//Proceedings of the 2005 USENIX Technical Conference,2005:279-291.

[11]TEWKSBURY L A,MOSER L E,MELLIAR-SMITH P M.Live upgrades of CORBA applications using object replication[C]//Software Maintenance,2001.Proceedings.IEEE International Conference on.IEEE,2001:488-497.

[12]KRAMER J,MAGEE J.The evolving philosophers problem:Dynamic change management[J].Software Engineering, IEEE Transactions on,1990,16(11):1293-1306.

[13]MAGEE J,KRAMER J.Dynamic structure in software architectures[C]//ACM SIGSOFT Software Engineering Notes. ACM,1996,21(6):3-14.

[14]王曉鵬.王千祥.梅宏.一種面向構(gòu)件化軟件的在線演化方法[J].計(jì)算機(jī)學(xué)報(bào),2005,28(11):1890-1897.

[15]王德俊.黃林鵬.徐曉輝,等.分布式動(dòng)態(tài)更新支持系統(tǒng):研究綜述[J].計(jì)算機(jī)科學(xué),2007,34(11):19-25.

Proxy-Based Dynamic Software Updating Method

HUANG Han
(School of Physics and Information Engineering,Quanzhou Normal University,Quanzhou 362000,China)

Dynamic software updating is a new type of software evolution mechanism,which allows applications perform software updating in the system while it is running without downtime.Some important applications of large software systems need to provide available services which will benefit from this mechanism.This approach will make OSGi as a platform for software components,and present a new proxy-based method to achieve the dynamic software updating for OSGi component.The method inherits from the OSGI dynamic management of component's lifecycle and dependency,and has features such as dynamic availability and substitutability.The experiment shows that the method can accurately do dynamic updating,and provide reference to system maintenance and software evolution of smart home environment.

proxy;dynamic software;updates;OSGi;component;bundle

TP311.53

A

1673-4343(2013)04-0063-05

2013-03-20

高等學(xué)校博士學(xué)科點(diǎn)專(zhuān)項(xiàng)科研基金課題(20090073110026)

黃晗,男,福建莆田人,副教授。研究方向:容錯(cuò)服務(wù),服務(wù)計(jì)算。

猜你喜歡
調(diào)用代理構(gòu)件
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
代理圣誕老人
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
代理手金寶 生意特別好
建筑構(gòu)件
建筑構(gòu)件
基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
建筑構(gòu)件
建筑構(gòu)件
復(fù)仇代理烏龜君
吕梁市| 治多县| 南皮县| 苏尼特右旗| 天津市| 永平县| 鄂托克前旗| 贵德县| 牙克石市| 噶尔县| 鸡东县| 泰安市| 奎屯市| 交城县| 临江市| 洮南市| 苏尼特左旗| 顺昌县| 温州市| 体育| 台江县| 黔南| 景洪市| 遂溪县| 兰西县| 延川县| 临颍县| 青海省| 乐平市| 双江| 呼伦贝尔市| 桑日县| 安徽省| 弥渡县| 津南区| 霞浦县| 云安县| 眉山市| 大冶市| 获嘉县| 文成县|