馮汝康
(內(nèi)蒙古自治區(qū)煙草公司,內(nèi)蒙古呼和浩特 010010)
隨著軟件工業(yè)的發(fā)展,軟件產(chǎn)品的實現(xiàn)過程和技術(shù)愈發(fā)復(fù)雜化。為實現(xiàn)軟件的高度重用性,基于組件的軟件開發(fā)(Component Based Software Development,CBSD)方法被提出[1],同時Web 服務(wù)的廣泛使用和面向服務(wù)架構(gòu)(Ser?vice-oriented Architecture,SOA)的快速發(fā)展導(dǎo)致大量不同類型的功能組件出現(xiàn)。如何在數(shù)量眾多的功能組件中發(fā)現(xiàn)滿足應(yīng)用系統(tǒng)需求的功能組件并實現(xiàn)動態(tài)綁定是亟待解決的問題。
目前,已有大量文獻(xiàn)對功能組件進(jìn)行了研究。例如,文獻(xiàn)[1-4]研究了基于組件的軟件開發(fā)技術(shù)、平臺框架設(shè)計以及發(fā)展現(xiàn)狀;文獻(xiàn)[5-9]重點研究了語義網(wǎng)絡(luò)的含義、表示方法、邏輯推理等基本概念以及相關(guān)工具,同時還研究了依據(jù)組件功能進(jìn)行語義描述與推理的方法;文獻(xiàn)[10-14]重點研究了基于UDDI 和jUDDI 實現(xiàn)功能組件管理框架的算法;文獻(xiàn)[15-20]重點研究了基于OQS 的Web 服務(wù)發(fā)現(xiàn)、功能組件選擇與動態(tài)綁定算法,并闡述了如何優(yōu)化算法性能。本文在以上研究成果的基礎(chǔ)上研究Web 服務(wù)的多種調(diào)用方法,基于Web 服務(wù)調(diào)用框架(Web Service In?vocation Framework,WSIF)的功能組件統(tǒng)一調(diào)用語義網(wǎng)絡(luò)及OWL-S,提出基于語義推理的功能組件動態(tài)綁定框架。
萬維網(wǎng)協(xié)會(Worldwide Web Consortium,W3C)給出了Web 服務(wù)的定義,即可以跨平臺操作,將因特網(wǎng)、外聯(lián)網(wǎng)以及內(nèi)聯(lián)網(wǎng)連接的分布式服務(wù)器上的應(yīng)用集成到一起的服務(wù)[2-3]。Web 服務(wù)是單一、組件化的程序功能模塊,能夠在網(wǎng)絡(luò),特別是萬維網(wǎng)上進(jìn)行描述、發(fā)布、定位及調(diào)用。Web服務(wù)的體系結(jié)構(gòu)包含3 個角色,分別為Web 服務(wù)提供者(Provider)、Web 服務(wù)請求者(Requester)和Web 服務(wù)管理者(Registry),以及3 個操作,分別為發(fā)布、查找、綁定。3個操作分別使用3 種完全不同的技術(shù),其中發(fā)布服務(wù)采用UDDI 統(tǒng)一描述、發(fā)現(xiàn)和集成,查找服務(wù)采用UDDI 和WS?DL 的組合,綁定服務(wù)采用WSDL 和SOAP。無縫的互操作得以實現(xiàn)正是由于Web 服務(wù)提供者和請求者均支持和使用SOAP 規(guī)范。
Web 服務(wù)是基于WSDL、SOAP 等統(tǒng)一網(wǎng)絡(luò)標(biāo)準(zhǔn)開發(fā)的應(yīng)用程序,其通常在底層通過綁定Http 等成熟的網(wǎng)絡(luò)通信協(xié)議進(jìn)行交互,因此調(diào)用Web 服務(wù)可以通過編寫Http 請求消息實現(xiàn),通常使用HttpClient、Xfire、axis2 生成stub 以及Apache的Web服務(wù)項目中開源的子項目WSIF[4]實現(xiàn)。
WSIF 對外提供簡單的接口,用戶使用WSIF 調(diào)用Web服務(wù),無需知道該Web 服務(wù)的實現(xiàn)細(xì)節(jié)[21]。WSIF 還提供了一組基于WSDL 文件的調(diào)用接口,即只要是使用WSDL文件描述的服務(wù)都可以使用WSIF 調(diào)用,如Web 服務(wù)、本地Java類、EJBs、JMS services 等類型的組件。
語義網(wǎng)絡(luò)是人工智能領(lǐng)域廣泛應(yīng)用的一種知識表達(dá)形式,互聯(lián)網(wǎng)中的語義網(wǎng)絡(luò)即Semantic Web,其通過將自由文本內(nèi)容結(jié)構(gòu)化,以便計算機(jī)程序自動處理Web 內(nèi)容[22]。語義推理則是計算機(jī)基于語義網(wǎng)絡(luò)對不同概念進(jìn)行推理,發(fā)現(xiàn)其內(nèi)在關(guān)系,以實現(xiàn)智能化處理。
語義網(wǎng)絡(luò)通過給萬維網(wǎng)上的文檔(如HTML)添加通用的語義(Meta data)信息,使計算機(jī)能夠理解文檔所包含的語義而自動處理。例如文獻(xiàn)[5]中將語義網(wǎng)絡(luò)看成Web 向結(jié)構(gòu)化數(shù)據(jù)的演進(jìn),給出的結(jié)構(gòu)如圖1所示。
Fig.1 Semantic Web architecture圖1 語義Web體系結(jié)構(gòu)
OWL 是一種語義Web 本體描述語言,包括3 個子語言,分別為OWL Full、OWL DL 和OWL Lite。文獻(xiàn)[6]在DAML-S 的基礎(chǔ)上提出一個用于描述Web 服務(wù)屬性和功能的OWL 本體規(guī)范OWL-S,而采用OWL-S 描述的Web 服務(wù)是計算機(jī)可以理解的。OWL-S 主要從3 個方面對Web服務(wù)進(jìn)行刻畫,分別為ServiceProfile、ServiceModel、Service?Grounding,其中ServiceProfile 描述服務(wù)做什么,Service?Model描述服務(wù)如何工作以及具體的邏輯執(zhí)行順序等,Ser?viceGrounding 描述如何訪問服務(wù)以及與服務(wù)具體實例相關(guān)的屬性[23]。
功能組件語義描述十分重要,有了相關(guān)語義信息的描述,在發(fā)現(xiàn)功能組件時便可以進(jìn)行語義匹配,提高匹配質(zhì)量。
使用OWL-S 描述Web 服務(wù)的語義信息,其他類型的功能組件可以封裝為Web 服務(wù),然后通過使用OWL-S 描述封裝后Web 服務(wù)的語義信息間接描述相應(yīng)功能組件的語義信息。封裝對于Web 服務(wù)組件本身的功能、參數(shù)類型都沒有影響,只是改變了對外發(fā)布信息的形式和調(diào)用方式,因此可以直接將描述Web 服務(wù)功能的OWL-S 文件用于描述具有相同功能的其他類型功能組件。在描述其他語義信息,如接口、參數(shù)、組件模型等,只需填入相應(yīng)的信息,便可以借助Jena 等開源軟件包提供的推理功能實現(xiàn)基于語義的推理。
Jena 是一個開源的基于Java 開發(fā)的Web 工具包,其提供了基于語義推理的API,用于解析RDF、RDFS 及OWL 本體,同時還包括一個基于規(guī)則的推理引擎,用戶可以定制推理規(guī)則。Jena 的接口說明及詳細(xì)使用方法參見文獻(xiàn)[7]。
功能組件數(shù)量眾多,具有同一種功能的組件也有很多,調(diào)用時需要進(jìn)行功能組件動態(tài)綁定,主要包括兩個步驟:一個是基于語義推理的功能組件發(fā)現(xiàn),即發(fā)現(xiàn)滿足應(yīng)用系統(tǒng)需求的所有功能組件;另一個是動態(tài)綁定最優(yōu)功能組件,即依據(jù)功能組件此時的負(fù)載程度與服務(wù)質(zhì)量,選擇一個負(fù)載最低、服務(wù)質(zhì)量最高的功能組件進(jìn)行綁定[8]。在Web 服務(wù)上的兩個操作已有很多研究成果,例如文獻(xiàn)[9]提出一種基于Web 服務(wù)質(zhì)量評價模型和負(fù)載平攤策略的Web 服務(wù)動態(tài)綁定算法?;谝陨涎芯砍晒?,本文提出基于語義推理的功能組件動態(tài)綁定框架,結(jié)構(gòu)如圖2所示。
Fig.2 Framework structure of dynamic binding of functional compo?nents圖2 功能組件動態(tài)綁定的框架結(jié)構(gòu)
UDDI 是一種目錄服務(wù),企業(yè)可以使用它對Web ser?vices 進(jìn)行注冊和搜索,用戶能夠通過它快速、便捷、動態(tài)獲取Internet 上的服務(wù)[24]。Apache jUDDI 是采用Java 開發(fā)的一個開源UDDI 項目,其提供了基本的服務(wù)管理功能,包括服務(wù)信息存儲、服務(wù)注冊以及基于關(guān)鍵字匹配的服務(wù)發(fā)現(xiàn),然而jUDDI 缺少對語義的描述,目前已有很多擴(kuò)展UD?DI可使其支持語義描述的方法[10-12]。
本文通過修改jUDDI 的數(shù)據(jù)結(jié)構(gòu),在tModel 中添加一項指向語義描述文件存放位置(對于網(wǎng)絡(luò)上的資源可以是URI 地址)。將各種功能組件注冊到本地jUDDI 上,從其上發(fā)現(xiàn)功能組件并進(jìn)行動態(tài)綁定[13]。具體修改內(nèi)容為:①添加語義文件鏈接項,在tModel 數(shù)據(jù)表中添加一個SEMAN?TIC_URI 項;②修改源代碼,將源代碼中出現(xiàn)OverviewDoc和OverviewURL 的地方都添加上SemanticDoc 和Semanti?cURI 的對應(yīng)代碼;③在org.apache.juddi.datatype 中編寫Se?manticDoc 類和SemanticURI 類;④在org.apache.juddi.han?dler 中編寫SemanticDocHandler 類和SemanticURIHandler類;⑤修改相應(yīng)的類,添加與OverviewDoc 和OverviewURL相似的代碼。
此外,為了可以在jUDDI 上存儲和統(tǒng)一管理其他類型的功能組件,本文在Web 服務(wù)信息模版的基礎(chǔ)上添加相應(yīng)功能組件信息。表1 中列出了幾項本地Java 類與Web 服務(wù)在注冊時所需信息的對應(yīng)關(guān)系。
功能組件發(fā)現(xiàn)是指從注冊在組件代理系統(tǒng)上的功能組件中發(fā)現(xiàn)滿足應(yīng)用系統(tǒng)需求的功能組件。本文在對jUDDI進(jìn)行擴(kuò)展的基礎(chǔ)上,對功能組件進(jìn)行統(tǒng)一語義匹配。
Table 1 Information correspondence relationship表1 信息對應(yīng)關(guān)系
首先基于公共領(lǐng)域本體庫和Jena 的推理機(jī)制,推理出應(yīng)用系統(tǒng)請求文件中三代以內(nèi)的相關(guān)關(guān)鍵字,形成請求關(guān)鍵字集;然后使用jUDDI 對這些關(guān)鍵字進(jìn)行功能組件發(fā)現(xiàn),得到功能組件候選集合,最后進(jìn)行語義匹配。具體步驟為:①解析應(yīng)用系統(tǒng)請求XML 文件,獲得與功能相關(guān)的關(guān)鍵字;②在領(lǐng)域本體中推理查詢?nèi)詢?nèi)的關(guān)鍵字,形成請求關(guān)鍵字集合;③基于關(guān)鍵字匹配進(jìn)行功能組件發(fā)現(xiàn),對于請求關(guān)鍵字集合中的每個關(guān)鍵字,在jUDDI 中進(jìn)行匹配,獲得進(jìn)行語義服務(wù)匹配的候選功能組件集合;④采用OWL 文件解析器解析出輸入/輸出、前提/效果元素,再分別送入IOPE 匹配器中進(jìn)行IO 和PE 匹配,具體匹配方法參見文獻(xiàn)[14];⑤IOPE 匹配器根據(jù)功能組件輸入、輸出、前提、效果的匹配度排序形成一個候選功能組件集合;⑥如果沒有找到滿足應(yīng)用系統(tǒng)需求的功能組件,則將該應(yīng)用系統(tǒng)請求文件發(fā)布到ESB 和網(wǎng)絡(luò)上,進(jìn)行更大范圍的服務(wù)發(fā)現(xiàn)。
功能組件動態(tài)綁定是指在通過功能組件發(fā)現(xiàn)得到的滿足應(yīng)用系統(tǒng)功能需求的功能組件候選集合中選擇一個功能組件進(jìn)行實際調(diào)用以響應(yīng)用戶請求。其選擇依據(jù)多種多樣,可以是功能組件的負(fù)載程度、質(zhì)量高低(響應(yīng)時間、可靠性、可信度等質(zhì)量屬性)。動態(tài)綁定流程如圖3所示。
Fig.3 Flow of dynamic binding圖3 動態(tài)綁定流程
具體步驟為:①對候選功能組件集合中的每個功能組件進(jìn)行預(yù)調(diào)用處理,記錄功能組件通用QoS 屬性(如功能組件當(dāng)時的負(fù)載程度、響應(yīng)時間等)的取值,并將這些取值存儲到QoS 屬性庫中;②如果有當(dāng)時可用的本地功能組件則選擇該功能組件,否則計算功能組件的QoS 質(zhì)量總值[15-20],并依據(jù)服務(wù)質(zhì)量高低進(jìn)行等級排序,從集合中刪除服務(wù)質(zhì)量等級相對較低的功能組件;③根據(jù)功能組件評價結(jié)果確定最優(yōu)綁定功能組件;④進(jìn)行實際綁定,調(diào)用相應(yīng)的功能組件。
本地功能組件在服務(wù)質(zhì)量方面與網(wǎng)絡(luò)上的功能組件相比有很大優(yōu)勢,如果候選功能組件集合中有該功能組件,則優(yōu)先綁定本地實現(xiàn)的功能組件;當(dāng)有不同類型的本地功能組件時,則綁定與應(yīng)用系統(tǒng)同屬統(tǒng)一平臺的功能組件。
以向卷煙零售戶推送卷煙訂單服務(wù)為例,該服務(wù)需要綁定獲取零售戶銷售周期、零售戶單品卷煙銷售情況、零售戶單品卷煙庫存情況、零售戶資金情況,然后形成并推送訂單服務(wù)。采用傳統(tǒng)方法與本文方法構(gòu)建應(yīng)用的時間分別見表2、表3。傳統(tǒng)方法共需要37.5min,基于語義推理的功能組件動態(tài)綁定框架共需要7min,可見該框架框建應(yīng)用系統(tǒng)的效率比傳統(tǒng)方法提高了4倍。
Table 2 Time consumption of traditional method表2 傳統(tǒng)方法耗時
Table 3 Time consumption of dynamic binding framework of func?tional components for semantic reasoning表3 基于語義推理的功能組件動態(tài)綁定框架耗時
本文研究了Web 服務(wù)的多種調(diào)用方法,并在WSIF 功能組件統(tǒng)一調(diào)用、語義網(wǎng)絡(luò)及OWL-S 的基礎(chǔ)上,提出了基于語義推理的功能組件動態(tài)綁定框架。該框架能動態(tài)發(fā)現(xiàn)并綁定滿足需求的功能組件,根據(jù)需求快速構(gòu)建應(yīng)用系統(tǒng),免去了人工比對服務(wù)描述、重新綁定功能組件的步驟,提高了應(yīng)用系統(tǒng)構(gòu)建效率。目前該框架還有很多需要優(yōu)化和解決的問題,下一步將重點研究語義推理與功能組件匹配算法,進(jìn)一步提高匹配效率。