王 華
(浙江科技學(xué)院 信息與電子工程學(xué)院,杭州 310023)
在軟件體系結(jié)構(gòu)(簡稱為體系結(jié)構(gòu)或SA)的研究中,用連接件表示構(gòu)件間復(fù)雜的語義關(guān)系。將連接件視為與構(gòu)件等同的實體有助于體系結(jié)構(gòu)的研究[1-2],因為連接件主要負(fù)責(zé)構(gòu)件間的通信,這就將構(gòu)件的計算功能獨立化。研究者可以專注于軟件生存環(huán)境對體系結(jié)構(gòu)的影響并將之建模為連接件,通過連接件修改或替換構(gòu)件,實現(xiàn)基于體系結(jié)構(gòu)的自適應(yīng)性。軟件生存環(huán)境驅(qū)動體系結(jié)構(gòu)的重配置可以借助于連接件的適應(yīng)性調(diào)整來實現(xiàn),然而體系結(jié)構(gòu)描述語言[3-5]中非顯式的構(gòu)件連接阻礙了體系結(jié)構(gòu)自適應(yīng)能力的提高。
在自適應(yīng)的連接件設(shè)計中,軟件生存環(huán)境是一個重要的驅(qū)動力。把生存環(huán)境視為方面(aspect)進(jìn)行建模是構(gòu)建連接件的有效方法[6-7]。Shin等提出了分布式環(huán)境中安全軟件體系結(jié)構(gòu)的可重用連接件的設(shè)計方法[8]。Ringert等提出了將平臺獨立的連接件模型轉(zhuǎn)換為平臺相關(guān)的連接件模型的方法,通過將構(gòu)件-連接件的結(jié)構(gòu)化擴(kuò)展組合為構(gòu)件行為來建模[9],并提供了連接件裁剪方法[10]。Khorasani等借助于xADL體系結(jié)構(gòu)描述語言和基于規(guī)則的系統(tǒng)實現(xiàn)了軟件體系結(jié)構(gòu)的重配置[11]。這些研究在連接件模型的自適應(yīng)配置上存在不足,這就迫切需要面向方面的預(yù)見式連接件(aspect-oriented proactive connector,APC,以下簡稱預(yù)見式連接件)以使自適應(yīng)系統(tǒng)具有更強(qiáng)的可預(yù)見性和更智能的行為,從而提高客戶服務(wù)質(zhì)量。針對傳統(tǒng)被動式連接件的不足,筆者借助面向方面的思想來構(gòu)造預(yù)見式連接件本體模型,以實現(xiàn)構(gòu)件連接的修改和體系結(jié)構(gòu)的動態(tài)配置,提高軟件體系結(jié)構(gòu)的自適應(yīng)性,并借助于影響因子價值去量化選擇作為調(diào)整政策的依據(jù)。通過一個實際運營的在線健康評估系統(tǒng)進(jìn)行測試,結(jié)果表明,本方法為應(yīng)用提供了預(yù)見式的自適應(yīng)配置機(jī)制,提高了應(yīng)用的服務(wù)質(zhì)量。
Medvidovik等指出了描述連接件所具備的6個特征:接口、類型、語義、約束、演化和NFR(non-functional requirement,非功能性需求)屬性[12]。預(yù)見式連接件可以方便地定制、調(diào)整交互關(guān)系,靈活修改構(gòu)件。一方面,軟件體系結(jié)構(gòu)設(shè)計師往往關(guān)注于功能性的構(gòu)件,而忽略了生存環(huán)境中描述非功能屬性的橫切關(guān)注點(crosscutting concerns),如帶寬、安全性、需求變化、分布性等。這些橫切關(guān)注點的產(chǎn)生會將構(gòu)件和連接件復(fù)雜化,使計算功能、通信功能和非功能性需求“糾纏”在一起。另一方面,體系結(jié)構(gòu)的演化主要是由于橫切關(guān)注點引起,而借助于AOP(aspect-oriented programming,面向方面編程)[13]思想正好能夠把這些橫切關(guān)注點封裝成方面并作為體系結(jié)構(gòu)的構(gòu)件,稱之為方面構(gòu)件(aspect component,AC),通過一個特殊的連接件對方面構(gòu)件和基礎(chǔ)構(gòu)件(primary component,PC)進(jìn)行通信協(xié)調(diào)。這個特殊的連接件稱為預(yù)見式連接件。由基礎(chǔ)構(gòu)件完成功能性需求,由方面構(gòu)件完成對橫切關(guān)注點的建模。通過預(yù)見式連接件可以方便地在方面構(gòu)件和普通構(gòu)件之間進(jìn)行路由,實現(xiàn)體系結(jié)構(gòu)的自適應(yīng)演化。其中,方面構(gòu)件則可以實現(xiàn)對橫切關(guān)注點的重用。
圖1 預(yù)見式連接件模型Fig.1 APC model
圖1顯示了如何通過預(yù)見式連接件實現(xiàn)基礎(chǔ)構(gòu)件和演化因素驅(qū)動的方面構(gòu)件之間的隔離,以此為基礎(chǔ)實現(xiàn)體系結(jié)構(gòu)的預(yù)見式自適應(yīng)。從圖中可以看出,預(yù)見式連接件使用不同的角色將不同的體系結(jié)構(gòu)元素聯(lián)系在一起,而體系結(jié)構(gòu)的元素就表現(xiàn)為基礎(chǔ)構(gòu)件、方面構(gòu)件、角色和編織政策(weaving policy)。編織政策可以通過擴(kuò)展的ECA(event-condition-action)規(guī)則進(jìn)行描述,筆者在之前的工作中已經(jīng)開發(fā)這個輕量級的自適應(yīng)語言[14]。仲裁者的作用是接受體系結(jié)構(gòu)描述語言中的體系結(jié)構(gòu)演化腳本。
綜上所述,預(yù)見式連接件的組成元素包含了角色和編織政策。從體系結(jié)構(gòu)的角度,筆者認(rèn)為編織政策指明了角色之間相互關(guān)聯(lián)和動態(tài)協(xié)作的體系結(jié)構(gòu)的自適應(yīng)行為,將參與體系結(jié)構(gòu)配置和連接的所有角色進(jìn)行了相關(guān)的定義和規(guī)約描述。編織政策成為指導(dǎo)體系結(jié)構(gòu)演化的“劇本”,即對體系結(jié)構(gòu)重配置的基礎(chǔ)信息。由此可以得出結(jié)論,預(yù)見式連接件中的所有角色不是直接相連的,它們只能被編織政策使用并通過編織政策中的定義進(jìn)行信息交互。角色集合反映了在構(gòu)建一個系統(tǒng)過程中作為子系統(tǒng)的約束條件,即能夠連接到預(yù)見式連接件上所有構(gòu)件的接口抽象。
控制轉(zhuǎn)移機(jī)制和數(shù)據(jù)轉(zhuǎn)移機(jī)制是預(yù)見式連接件的基本構(gòu)造塊的2個原語。通過操作這2個原語,可以在基礎(chǔ)連接件之上構(gòu)造復(fù)合連接件。通過控制轉(zhuǎn)移機(jī)制和數(shù)據(jù)轉(zhuǎn)移機(jī)制反映預(yù)見式連接件狀態(tài)的變化,具體表現(xiàn)為預(yù)見式連接件所提供的服務(wù)語義、互聯(lián)機(jī)制和通信協(xié)議等。借助于本體論[15]和框架表示法[16]得到如圖2所示的預(yù)見式連接件本體模型圖。
圖2 體系結(jié)構(gòu)的預(yù)見式連接件本體模型Fig.2 APC ontology model of software architecture
圖2中的切入點槽表示方面構(gòu)件的橫切面,表現(xiàn)為經(jīng)由基礎(chǔ)構(gòu)件中的接口傳遞而來的各種事件,以此觸發(fā)體系結(jié)構(gòu)的重配置。規(guī)約槽規(guī)定了預(yù)見式連接件的相關(guān)約束條件,如網(wǎng)絡(luò)帶寬的限制等。預(yù)見式連接件本體模型也擴(kuò)展了AOP中的通知,這包括了基本側(cè)面before、after和around以及擴(kuò)展側(cè)面beforeif、afterif和aroundif。應(yīng)用相應(yīng)的側(cè)面可以表示調(diào)用方面構(gòu)件或基礎(chǔ)構(gòu)件的觸發(fā)條件,其具體含義如下:
1)before,將請求傳遞至所要請求的基礎(chǔ)構(gòu)件之前觸發(fā)方面構(gòu)件的動作。
2)after,將請求傳遞至所要請求的基礎(chǔ)構(gòu)件,接著調(diào)用經(jīng)由編織政策構(gòu)造的方面構(gòu)件提供的操作接口。
3)around,取代基礎(chǔ)構(gòu)件的操作,而直接調(diào)用經(jīng)由編織政策構(gòu)造的方面構(gòu)件提供的操作接口。
4)beforeif(condition),僅當(dāng)condition為真時按照before的方式執(zhí)行。
5)afterif(condition),僅當(dāng)condition為真時按照after的方式執(zhí)行。
6)aroundif(condition),僅當(dāng)condition為真時按照around的方式執(zhí)行。
為了表示當(dāng)前生存環(huán)境下用戶對系統(tǒng)運行狀態(tài)的滿意程度,本研究設(shè)計了一個影響因子價值函數(shù)(impact factor value, IFV),作為預(yù)見式自適應(yīng)動作的評價標(biāo)準(zhǔn)。IFV的計算公式如下:
(1)
為了評估本方法的可行性而進(jìn)行了一個案例研究分析。目標(biāo)系統(tǒng)是一個健康管理子系統(tǒng)——健檢助手系統(tǒng)(HES,health evaluation assistant system,以下簡稱本系統(tǒng)),網(wǎng)址是http://www.joyhar.com,即通過數(shù)據(jù)挖掘給出相關(guān)的健康促進(jìn)書。從體檢結(jié)果、生活習(xí)慣、飲食、生活環(huán)境、職業(yè)行為等方面出發(fā),提供對個人最重要的個性化健康信息,對身體狀況進(jìn)行全面分析,結(jié)合疾病分析模型對慢性病進(jìn)行早期預(yù)警,并提出系統(tǒng)性的健康促進(jìn)建議。該評估系統(tǒng)已運行3年,獲得了大量的數(shù)據(jù),客戶總數(shù)為55 027個,生成的《健康促進(jìn)書》中有效的總份數(shù)為103 429份,筆者抽取了客戶體檢項目中的23 891項。本系統(tǒng)通過算法模型對健康問卷和該次體檢的結(jié)果數(shù)據(jù)進(jìn)行分析,生成個人健康促進(jìn)書,包括個人動態(tài)健康檔案、個人疾病解讀、個人異常指標(biāo)、個人生活方式指導(dǎo)、個人飲食指導(dǎo)、個人運動指導(dǎo)、個人心理指導(dǎo)、高發(fā)疾病風(fēng)險提示、個人健康趨勢及規(guī)劃和體檢報告10個模塊。
根據(jù)本系統(tǒng)的運營規(guī)則,不同客戶可以根據(jù)自己的需要訂購不同質(zhì)量的服務(wù),如金卡用戶或者銀卡用戶。隨著越來越多的客戶使用系統(tǒng)提供的服務(wù),本系統(tǒng)經(jīng)歷了一系列事件,如請求者需等待更長的時間才能得到一份健康評估報告,在體檢高峰期某些金卡客戶無法得到服務(wù)。這些事件可以作為驅(qū)動體系結(jié)構(gòu)演化的橫切面來考慮,即軟件生存環(huán)境的變化。本系統(tǒng)將它們編織為方面構(gòu)件和預(yù)見式連接件驅(qū)動體系結(jié)構(gòu)演化。
本系統(tǒng)預(yù)見式連接件構(gòu)建過程如下。
1)初始構(gòu)件模型如圖3所示。Client構(gòu)件和HealthReport構(gòu)件是簡化后構(gòu)件,分別表示客戶請求構(gòu)件和健康評估報告構(gòu)件。
圖3 HES初始構(gòu)件模型Fig.3 Initial component model of HES
2)為了提供更好的服務(wù)質(zhì)量,對網(wǎng)絡(luò)帶寬進(jìn)行前向預(yù)測,把檢查帶寬看成是本系統(tǒng)的橫切面,并構(gòu)造成為一個方面構(gòu)件PredictResource。該構(gòu)件至少提供了分別表示預(yù)測帶寬和CPU負(fù)載的接口——PredictBandwidth和PredictCPU。本系統(tǒng)還構(gòu)建了計算影響因子價值的方面構(gòu)件CalculateIFV,為計算總影響因子價值,CalculateIFV提供計算服務(wù)。
3)把PredictResource構(gòu)件織入本系統(tǒng),根據(jù)獲得的預(yù)測帶寬值預(yù)見式調(diào)整構(gòu)件的服務(wù)配置,把來自Client構(gòu)件的FetchReport接口作為PredictResource方面構(gòu)件的切入點。帶寬度量值分為3個等級:LOW、HIGH和MEDIUM,分別用小于10 Kbit/s、10~100 Kbit/s和大于100 Kbit/s來表示,可以得到圖4所示的編織政策。
圖4 HES的編織政策Fig.4 Weaving policy of HES
4)對PredictResource進(jìn)行動態(tài)編織建模,這需要構(gòu)建一個預(yù)見式連接件——ResourceApcc,用來協(xié)調(diào)CalculateIFV、Client和HealthReport三者之間的交互,根據(jù)編織政策決定是否調(diào)用CalculateIFV構(gòu)件及何時調(diào)用CalculateIFV構(gòu)件。本系統(tǒng)演化后的連接件模型如圖5所示。
通過預(yù)見式連接件的動態(tài)調(diào)整后,HES系統(tǒng)的響應(yīng)時間與未優(yōu)化時相比較的結(jié)果如圖6所示。
圖5 HES演化后的連接件模型Fig.5 Connector model of evolved HES
圖6 未優(yōu)化方法和預(yù)見式自適應(yīng)方法的性能比較Fig.6 Comparison of performance between the non-optimized method and the proactive self-adaptive method
從圖6可以看出,隨著用戶請求數(shù)的增加,用戶請求的平均響應(yīng)時間也在增加。當(dāng)系統(tǒng)有125個用戶請求時,自適應(yīng)優(yōu)化方法比未優(yōu)化方法稍好;隨著用戶請求數(shù)的不斷增加,平均響應(yīng)時間增加比較快。此時,預(yù)見式自適應(yīng)優(yōu)化方法顯示出了較好的性能。并且請求數(shù)越多,性能的改善更加明顯。
軟件生存環(huán)境的可變性和不確定性對體系結(jié)構(gòu)的自適應(yīng)性提出了新的要求,傳統(tǒng)連接件的自適應(yīng)是被動式的,即必須預(yù)先設(shè)置規(guī)則(政策),通過生存環(huán)境的條件改變觸發(fā)自適應(yīng)政策的執(zhí)行。為了克服這種局部性和被動式的調(diào)整方式,筆者提出了面向方面的預(yù)見式連接件模型,并將影響因子價值量化以調(diào)整政策,以此作為選擇政策的依據(jù)。經(jīng)過對一個在線的健康評估助手系統(tǒng)進(jìn)行改造使之具備自適應(yīng)的能力,實驗結(jié)果表明,當(dāng)使用本文的預(yù)見式連接件模型時提高了系統(tǒng)的性能,因而具有應(yīng)用可行性。
[1] OZKAYA M. What is software architecture to practitioners: a survey[C]//5th International Conference on Model-Driven Engineering and Software Development. Porto: MODELSWARD,2017:677.
[2] 梅宏, 陳鋒, 馮耀東, 等. ABC:基于體系結(jié)構(gòu)、面向構(gòu)件的軟件開發(fā)方法[J]. 軟件學(xué)報,2003,14(4):721.
[3] BLOM H, CHEN D J, KAIJSER H, et al. EAST-ADL: an architecture description language for automotive software-intensive systems in the light of recent use and research[J]. International Journal of System Dynamics Applications,2016,5(3):1.
[4] ZUNIGAPRIETO M, INSFRAN E, ABRAHAO S. Architecture description language for incremental integration of cloud services architectures[C]//IEEE Symposium on the Maintenance and Evolution of Service-Oriented Systems and Cloud-Based Environments. Toronto: IEEE,2016:16.
[5] SARI B, REUSS H C. A model-driven approach for the development of safety-critical functions using modified architecture description language (ADL)[C]//International Conference on Electrical Systems for Aircraft, Railway, Ship Propulsion and Road Vehicles and International Transportation Electrification Conference. Toulouse: IEEE,2017:1.
[6] SHESHASAAYEE A, JOSE M R. A theoretical framework for the maintainability model of aspect oriented systems[J]. Procedia Computer Science,2015,62:505.
[7] FAN G, YU H, CHEN L, et al. A formal aspect-oriented method to model and analyse secure service composition[J]. International Journal of Autonomous and Adaptive Communications Systems,2015,8(2/3):119.
[8] SHIN M, GOMAA H, PATHIRAGE D. Reusable secure connectors for secure software architecture[C]//International Conference on Software Reuse. Limassol: Springer International Publishing,2016:181.
[9] RINGERT J O, RUMPE B, WORTMANN A. Transforming platform-independent to platform-specific component and connector software architecture models[C]//Workshop on Model-Driven Engineering for Component-Based Software Systems (ModComp’15). Ottawa: AMC/IEEE,2015:30.
[10] RINGERT J O, RUMPE B, WORTMANN A. Tailoring the MontiArcAutomaton component and connector ADL for generative development[C]//Joint Morse/vao Workshop on Model-Driven Robot Software Engineering and View-Based Software-Engineering. L’Aquila: ACM,2015:41.
[11] KHORASANI F, SALAJEGHEH A, MOEINI A. A model for run-time software architecture adaptation[J]. International Journal of Software Engineering and Applications,2015,6(1):11.
[12] MEDVIDOVIC N, TAYLOR R N. A classification and comparison framework for software architecture description languages[J]. IEEE Transactions on Software Engineering,2000,26(1):70.
[13] POPOVICI A, GROSS T, ALONSO G. Dynamic weaving for aspect-oriented programming[C]//Proceedings of the 1st International Conference on Aspect-Oriented Software Development. Enschede: ACM,2002:141.
[14] WANG H, YING J. An approach for harmonizing conflicting policies in multiple self-adaptive modules[C]//International Conference on Machine Learning and Cybernetics. Hong Kong: IEEE,2007:2379.
[15] USCHOLD M, GRUNINGER M. Ontologies: principles, methods, and applications[J]. Knowledge Engineering Review,1996,11(2):93.
[16] MINSKY M. A framework for representing knowledge[Z]. Massachusetts Institute of Technology,1974.