李曉科,季凱帆,鄧 輝,王 鋒,2,耿艷波
(1.昆明理工大學云南省計算機技術(shù)應(yīng)用重點實驗室,云南 昆明 650051;2.中國科學院云南天文臺,云南 昆明 650011)
近年來,隨著天文數(shù)據(jù)雪崩式的膨脹,在天文研究中利用自動化工具提高科研效率勢在必行,使用分布式計算技術(shù)發(fā)布天文數(shù)據(jù),可以在一定程度上克服上述不足。Web Service使用了開放的HTTP、XML協(xié)議為異地異構(gòu)用戶提供服務(wù),符合SOA(面向服務(wù)架構(gòu))的理念——將業(yè)務(wù)服務(wù)化,與面向?qū)ο蟮捏w系相比,它可在不改變現(xiàn)有軟件系統(tǒng)的情況下添加或更新服務(wù)以解決新的需求。因此,跨平臺、開放、松耦合的Web Service很好地符合了天文數(shù)據(jù)發(fā)布的需求,將各種天文工具及資源發(fā)布成Web Service,更有利于實現(xiàn)數(shù)據(jù)密集型在線天文研究環(huán)境[1]。
目前主流的天文數(shù)據(jù)發(fā)布主要使用基于Web頁面和基于REST風格的Web服務(wù)兩種發(fā)布技術(shù),如SDSS、NED等。使用Web頁面用戶可以在瀏覽器界面中查詢和獲取數(shù)據(jù),但返回數(shù)據(jù)結(jié)果通常包含在固定的頁面格式中,難以根據(jù)用戶的需要組合調(diào)用多個服務(wù)以實現(xiàn)訂制化的功能;而基于REST風格的Web服務(wù)由于缺少足夠的語義且沒有服務(wù)自身的描述,所以也不利于在自動化工具中實現(xiàn)機器自動識別并調(diào)用。相比以上兩種方式,具有標準傳輸協(xié)議和服務(wù)定義的SOAP風格的Web服務(wù)更適合在自動化工具中調(diào)用,以便天文學家進行數(shù)據(jù)密集型的天文數(shù)據(jù)處理和研究工作。
國外2002年開始將Web Service應(yīng)用于虛擬天文臺并進行相關(guān)理論研究。應(yīng)用方面提出并實現(xiàn)了通過Web Service聯(lián)合數(shù)據(jù)庫的方法——SkyQuery用于將分布于互聯(lián)網(wǎng)中的天文數(shù)據(jù)聯(lián)合,以組成能解決復雜的分布式計算任務(wù)的虛擬天文臺[2];理論方面提出在虛擬天文臺中通過Web Service實現(xiàn)一個互操作服務(wù)的多層次架構(gòu),底層包括了由大多數(shù)數(shù)據(jù)提供商實現(xiàn)的簡單標準的服務(wù),通過這種方式有助于建立一個模塊化的架構(gòu),可以在這個核心層建立更復雜的應(yīng)用[3];同年Jim Gray提出建立全球望遠鏡的Web Servive時需要對天文目標進行對象化定義,被歸檔的天文數(shù)據(jù)都用類的實例表述。同時提到SkyQuery在虛擬天文臺中數(shù)據(jù)聯(lián)合上的嘗試反映和暴露了全球望遠鏡在數(shù)據(jù)整合上的很多問題[4]。這些研究反映出將Web Service應(yīng)用于虛擬天文臺中是可行的,同時也反映出在虛擬天文臺中制定Web Service標準的必要性。
國內(nèi)崔辰州在2003年提出Web Service是虛擬天文臺的三大支柱技術(shù)之一,通過開放網(wǎng)格服務(wù)架構(gòu)(Open Grid Services Architecture)將把Globus為代表的網(wǎng)格技術(shù)標準與以商用為主的Web Services的標準結(jié)合起來[5]。在此之后中國虛擬天文臺利用Globus Toolkit工具包,結(jié)合國際虛擬天文臺聯(lián)盟制訂的天文數(shù)據(jù)標準,對現(xiàn)有的異構(gòu)分布式的數(shù)據(jù)資源進行服務(wù)化封裝[6]。此外,國內(nèi)虛擬天文臺對Web Service的應(yīng)用還包括SkyMouse,其整合了大多數(shù)的天文服務(wù)如SIMBAD、NED、ADS、Vizier等[7];利用JNI和Web Service等技術(shù)設(shè)計出面向星歷研究人員和天文程序開發(fā)人員的星歷計算服務(wù)平臺——China-VO Ephemeris WS[8]。這些研究主要集中在將Web Service應(yīng)用于對天文數(shù)據(jù)的整合,而將Web Service應(yīng)用于天文數(shù)據(jù)發(fā)布的研究則較少。
國內(nèi)外目前主流的天文數(shù)據(jù)發(fā)布方式有Web頁面、客戶端和Web服務(wù),其中Web服務(wù)通常作為API編程接口向二次開發(fā)的用戶開放。而在Web服務(wù)中大多數(shù)是REST風格的Web服務(wù)[9]。REST是Roy Fielding在他的博士論文中提出的一個名詞,它代表REpresentational State Transfer,是對Web體系結(jié)構(gòu)設(shè)計原則的一種描述。在REST系統(tǒng)中,所有資源都有一個URL,包括Web服務(wù)也可以用URL來標識。根據(jù)IVOA中的標準,多數(shù)的數(shù)據(jù)服務(wù)都是基于REST風格的,例如簡單錐型檢索(Cone Search)接收HTTP GET的參數(shù)并返回VOTable,但是REST風格的Web服務(wù)對于語義的支持僅限于URI中,并且相比SOAP風格的Web服務(wù)缺少了傳輸協(xié)議和服務(wù)的定義,因此不利于在自動化工具中實現(xiàn)機器自動識別并調(diào)用。
為了使天文Web服務(wù)具有互操作性,需要遵循國際虛擬天文臺聯(lián)盟(IVOA)相關(guān)的數(shù)據(jù)訪問標準接口規(guī)范。在IVOA發(fā)布的一系列技術(shù)規(guī)范中,與Web服務(wù)相關(guān)的有IVOA Web服務(wù)基本概要(Web Service Basic Profile)和IVOA支持接口(Support Interface),以下對二者以及本文中將實現(xiàn)的錐型檢索服務(wù)規(guī)范做簡單介紹。
IVOA基本概要描述了在實現(xiàn)基于SOAP的Web服務(wù)時要考慮的規(guī)則,并說明如何檢查是否符合這些規(guī)則。該規(guī)范立足于現(xiàn)有Web服務(wù)互操作性組織(WS-I)的工作成果,并針對虛擬天文臺的需求和實際提出部分取代和補遺的規(guī)則。主要規(guī)則如下:IVOA基于SOAP的Web服務(wù)必須符合的WS-I基本概要1.1;必須符合IVOA支持接口(VOSI)規(guī)范,根據(jù)服務(wù)類型提供一系列的支持接口[10]。
IVOA支持接口詳細描述了作為IVOA Web服務(wù)應(yīng)提供的最少接口,以便提供支持虛擬天文臺管理的基本功能。這些接口在不改變原服務(wù)狀態(tài)的情況下返回元數(shù)據(jù),可以通過以下幾種方式實現(xiàn):在現(xiàn)有服務(wù)的端點中添加;在新服務(wù)的端點中添加;作為單獨的URL資源而不是SOAP協(xié)議的方式提供。但在目前版本的規(guī)范中,僅僅使用最后一種方式[11]。
錐形檢索已經(jīng)由NVO加入IVOA標準化進程,新的名稱是簡單錐形檢索(Simple Cone Search)協(xié)議。通過錐形檢索天文學家可以通過圓形天區(qū)中心坐標和搜索半徑確定天區(qū)范圍,創(chuàng)建并搜索給定天區(qū)中表格化的天體目標。實現(xiàn)符合IVOA規(guī)范的錐型檢索服務(wù)必須遵循以下規(guī)范:(1)服務(wù)必須相應(yīng)由基本URL和約束條件構(gòu)成HTTP GET請求,約束條件包括了赤經(jīng)(RA)、赤緯(DEC)、搜索半徑(SR)3個參數(shù);(2)服務(wù)必須以VOTable格式返回XML文檔,VOTable必須包含一個RESOURCE元素,并且其中只有一個TABLE元素。TABLE必須包含遵循UCD(Unified Content Descriptors)命名的id、RA和DEC的FIELD元素;(3)服務(wù)必須在調(diào)用錯誤的時候返回特定格式的VOTable[12]。
下面以中國科學技術(shù)大學光譜分析項目生成的數(shù)據(jù)錐型檢索功能為例,展示符合IVOA規(guī)范的服務(wù)搭建流程。自2002年來,中國科學技術(shù)大學天體物理中心在利用SDSS光譜數(shù)據(jù)進行星系和活動星系核研究過程中,發(fā)展了一套完善的光譜數(shù)據(jù)處理與分析方法和程序,它能自動分析海量的星系和活動星系核光譜。主要功能包括兩方面,一是將寄主星系恒星光譜貢獻與活動星系核貢獻從光譜數(shù)據(jù)中分離(星核光譜分離);二是對各成份的譜線和連續(xù)譜做精確的分解和測量。目前計算結(jié)構(gòu)以FITS格式保存。
為了進一步提高自動化程度并完善系統(tǒng)的功能,本文利用該光譜數(shù)據(jù)實現(xiàn)了對基于FITS格式的光譜數(shù)據(jù)發(fā)布及檢索,其中檢索功能通過后端的MySQL數(shù)據(jù)庫實現(xiàn),關(guān)鍵數(shù)據(jù)表結(jié)構(gòu)如表1。為提高檢索速度,事先已經(jīng)將FITS文件中相關(guān)源的信息字段(RA,DEC)導入MySQL數(shù)據(jù)庫,以便于通過SQL語句查詢符合各類條件的光譜數(shù)據(jù),具體的光譜數(shù)據(jù)仍保存在文件中。
表1 數(shù)據(jù)表結(jié)構(gòu)Table 1 Table Schema
除了后端的MySQL,項目中使用的相關(guān)軟件版本如表2。由于IVOA錐型檢索規(guī)范要求使用HTTP GET的方式調(diào)用并以VOTable的方式返回數(shù)據(jù),即REST風格的Web服務(wù),所以傳統(tǒng)Web服務(wù)搭建方式搭建的Web服務(wù)不能滿足這一規(guī)范。搭建REST風格的Web服務(wù)可以使用Restlet框架,但此處使用同時支持SOAP和REST方式Web服務(wù)的Axis2搭建,可使Web服務(wù)即可以符合IVOA的錐型檢索規(guī)范又可以獲得在SOAP客戶端調(diào)用的便利。
本次搭建及調(diào)用過程包含以下步驟:(1)將Axis2引擎配置到Tomcat容器中;(2)在Eclipse中編寫服務(wù)代碼及服務(wù)配置文件;(3)將Eclipse中的服務(wù)打包并部署到Axis2中;(4)在瀏覽器或客戶端中調(diào)用服務(wù)。以下詳細介紹各步驟。
2.2.1 配置 Axis2引擎
Axis2作為Web服務(wù)引擎,可在Servlet容器中部署或以獨立服務(wù)器的方式運行。此處采用生產(chǎn)環(huán)境中更常用的Servlet容器模式。首先下載Tomcat及Axis2的安裝包;其次建立目錄結(jié)構(gòu),在Tomcat的webapps中建立axis2目錄,并將Axis2安裝包中的 webapps目錄解壓到Tomcat的webapps目錄下;最后將Axis2安裝包中的 lib、conf、repository/services和repository/modules目錄解壓到tomcat/webapps/axis2/WEB-INF。經(jīng)過以上步驟,即完成在Tomcat中配置Axis2。啟動Tomcat后可在瀏覽器中輸入http://localhost:8080/axis2查看Axis2引擎的Web頁面。
表2 本項目中Web服務(wù)端及客戶端使用軟件及版本Table2 Softwares and libraries for the server side and client side in this project
2.2.2 編寫服務(wù)代碼及服務(wù)配置文件
配置完成Axis2引擎以后,即可開始編寫Web服務(wù)代碼。錐型檢索功能的流程如圖1:服務(wù)端在接收到OMElement類型的參數(shù)后,分析XML文檔對象獲得傳入的ra/dec/sr參數(shù);判斷參數(shù)是否有效,如果參數(shù)無效則按照IVOA規(guī)范返回包含錯誤消息的VOTable,如果有效則查詢數(shù)據(jù)庫并生成包含檢索結(jié)果的VOTable;最后將VOTable轉(zhuǎn)換為OMElement并返回。
圖1 錐型檢索服務(wù)的流程Fig.1 Flowchart of the Cone-Search Service
為了代碼清晰及易于維護,此處借鑒Web開發(fā)中常見的MVC模式,將錐型檢索服務(wù)代碼劃分為多層結(jié)構(gòu)。關(guān)鍵代碼如下:
雖然Axis2中搭建的服務(wù)默認支持SOAP和REST綁定,但在Axis2中默認使用SOAP對消息進行封裝,所以在編寫返回自定義格式XML(如VOTable)的服務(wù)時需要注意以下技術(shù)細節(jié):
首先,Web服務(wù)需配置使用Raw XMLIN Out Message Receiver作為消息接收器以支持HTTP GET方式的調(diào)用和自定義格式以XML的方式返回。在Raw XMLIN Out Message Receiver作為接收器時,服務(wù)即可接收SOAP封裝的參數(shù),又可接收HTTP GET風格的參數(shù)。其中HTTP GET風格傳遞的參數(shù)被Axis2自動轉(zhuǎn)換為XML結(jié)構(gòu)的文檔,因此對Web服務(wù)代碼來說參數(shù)的傳遞方式是透明的,接收到的參數(shù)都是OMElement類型的XML文檔。
其次,Web服務(wù)通過接收和返回OMElement類型的參數(shù),可以使用非SOAP消息封裝傳輸自定義文檔格式。使用Axiom(AXis對象模型,AXis Object Model)直接操作XML文檔對象,可以讀取傳入?yún)?shù)并生成返回文檔。服務(wù)端在接收參數(shù)時,需要通過OMElement.getChildren()方法返回的Iterator遍歷XML文檔,以分離出傳入的多個參數(shù),關(guān)鍵代碼如下:
分離傳入?yún)?shù)以后,即可通過參數(shù)和字符串拼接出查詢用的SQL語句,關(guān)鍵代碼如下:
String sql="SELECT 'fitsname','ra','dec'FROM spec_param WHERE"+"sqrt(power(('RA'-"+ra+"),2)+power(('DEC'-"+dec+"),2))<="+radius+"";
服務(wù)端代碼返回數(shù)據(jù)時也需要向Axis2引擎返回OMElement對象。方法是將JDBC執(zhí)行SQL查詢獲得的結(jié)果,通過voi.vowrite庫提供的相應(yīng)方法構(gòu)造輸出符合規(guī)范的VOTable格式,并使用Axis2的AXIOMUtil.stringToOM(xml)函數(shù)將xml字符串轉(zhuǎn)換為OMElement類型的對象并返回Axis2引擎。
完成服務(wù)代碼的編寫后,還需要編寫服務(wù)的配置文件META-INF/services.xml。服務(wù)配置文件可以描述服務(wù)的名稱、開放接口、接口使用的傳輸方式等,此處針對錐型檢索接口需要配置消息接收器為RawXMLINOutMessageReceiver,以便返回自定義格式的XML,配置文件如下:
2.2.3 打包并部署服務(wù)
Eclipse中可通過菜單File-Export-JAR file將項目打包,選擇輸出到Axis2的services目錄下即可由Axis2引擎自動部署服務(wù)。如果服務(wù)已經(jīng)存在則需重啟Tomcat服務(wù)器,或者在Axis2配置文件中開啟熱更新,使已存在的服務(wù)也可以熱部署。
2.2.4 調(diào)用服務(wù)
由于支持REST風格的服務(wù)調(diào)用,所以在瀏覽器中直接輸入網(wǎng)址即可調(diào)用剛才搭建的錐型檢索服務(wù),例如一次調(diào)用錐型檢索的查詢URL及返回結(jié)果如圖2,其中,ra=180,dec=59,sr=2。服務(wù)成功接收參數(shù)并查詢返回符合IVOA規(guī)范的錐型檢索規(guī)范的結(jié)果。
除了通過URL查詢直接訪問該服務(wù),還可以通過Axis2編寫SOAP客戶端調(diào)用該錐型檢索服務(wù)。此處采用Axiom技術(shù)構(gòu)建OMElement消息的方式,實現(xiàn)SOAP風格的服務(wù)調(diào)用,客戶端流程如圖3:首先創(chuàng)建調(diào)用服務(wù)的方法名節(jié)點,此處為coneSearch;其次在方法名節(jié)點中添加各個參數(shù)節(jié)點并設(shè)定參數(shù)值;最后新建Axis2客戶端對象并設(shè)定服務(wù)端點,以調(diào)用服務(wù)并返回結(jié)果。
圖2 符合IVOA規(guī)范的錐型檢索結(jié)果Fig.2 Results of Cone-Search Service complying with IVOA specifications
圖3 錐型檢索客戶端流程Fig.3 Flowchart of the Client in the Cone-Search Service
由于IVOA基本概要主要基于WS-I基本概要的工作,所以可以使用WS-I測試工具(WS-I Test Tool)驗證Web服務(wù)是否符合IVOA基本概要[10]。測試工具包含監(jiān)視器和分析器,其中監(jiān)視器采用中間人的方式攔截并記錄客戶端與服務(wù)器之間的消息,分析器通過處理一組測試斷言判斷Web服務(wù)的構(gòu)件是否符合基本概要(Basic Profile)[13]。借助WS-I測試工具,可以得到一份能在瀏覽器中打開的WS-I概要一致性報告,查看各項規(guī)范的符合情況,如圖4,結(jié)論是該Web服務(wù)符合WS-I基本概要。
本文對就如何將Web Service技術(shù)應(yīng)用到天文數(shù)據(jù)發(fā)布中進行了系統(tǒng)的調(diào)研,對IVOA的相關(guān)規(guī)范進行了分析,并在此基礎(chǔ)上,利用中國科學技術(shù)大學光譜數(shù)據(jù)設(shè)計實現(xiàn)了基于SOAP風格和REST風格的標準錐型檢索服務(wù),為自動化工具中機器識別與調(diào)用打下了基礎(chǔ)。下一步的工作可以開發(fā)自動化程度更高的工具,并考慮到以科學工作流等相應(yīng)系統(tǒng)進行有效數(shù)據(jù)集成,為天文學研究提供更為簡便、高效的數(shù)據(jù)檢索服務(wù)。
圖4 WS-I概要一致性報告Fig.4 WS-I Profile Conformance Report
[1]王曉倩,崔辰州,趙永恒.中國虛擬天文臺軟件集成 [J].天文研究與技術(shù)——國家天文臺臺刊,2005,2(4):293-301.Wang Xiaoqian,Cui Chenzhou,Zhao Yongheng.Integrating Legacy Software Toolkits into China-VO System [J].Astronomical Research & Technology——Publications of National Astronomical Observatories of China,2005,2(4):293-301.
[2]Tanu Malik,Alex S Szalay,Tamas Budavari,et al.Sky Query:A Web Service Approach to Federate Databases [J].Computer and Information Science,2002,11(2):23-32.
[3]Alexander S Szalay,Tamas Budavari,Tanu Malika,et al.Web Services for the Virtual Observatory[J].Proceedings of SPIE,2002:22-28.
[4]Gray J,A Szalay.The World-wide Telescope [J].Communications of the ACM,2002,45(11):50-55.
[5]崔辰州.中國虛擬天文臺系統(tǒng)設(shè)計 [D].北京:中國科學院國家天文臺,2003.
[6]桑健,趙永恒,崔辰州.中國虛擬天文臺數(shù)據(jù)訪問服務(wù) [J].天文研究與技術(shù)——國家天文臺臺刊,2004,1(3):216-228.San Jian,Zhao Yongheng,Cui Chenzhou.Data Access Service of China-VO [J].Astronomical Research & Technology——Publications of National Astronomical Observatories of China,2004,1(3):216-228.
[7]孫華平,崔辰州,趙永恒.天文服務(wù)的統(tǒng)一調(diào)用及其在Sky Mouse系統(tǒng)中的實現(xiàn) [J].天文研究與技術(shù)——國家天文臺臺刊,2008,5(2):130-136.Sun Huaping,Cui Chenzhou,Zhao Yongheng.Uniform Access to Astronomical Web Services and its Implementation in SkyMouse [J].Astronomical Research& Technology——Publications of National Astronomical Observatories of China,2008,5(2):130-136.
[8]田海俊,趙永恒,崔辰州,等.基于Web Services的星歷計算服務(wù)平臺設(shè)計及其實現(xiàn) [J].天文研究與技術(shù)——國家天文臺臺刊,2007,4(3):283-287.Tian Haijun,Zhao Yongheng,Cui Chenzhou,et al.Design and Implementation of China-VO Ephemeris Computing Service Based on Web Services[J].Astronomical Research& Technology——Publications of National Astronomical Observatories of China,2007,4(3):283-287.
[9]Sky Server:Application Programmer’s Interface [EB/OL].http://cas.sdss.org/dr6/en/help/docs/api.asp.
[10]Schaaff A,M Graham.IVOA Web Services Basic Profile [EB/OL].http://www.ivoa.net/Documents/WSBasicProfile/.
[11]Group,G.a.W.S.W.IVOA Support Interfaces [EB/OL].http://www.ivoa.net/Documents/latest/VOSI.html.
[12]Roy Williams,Robert Hanisch,Alex Szalay,et al.Simple Cone Search [EB/OL].http://www.ivoa.net/Documents/latest/ConeSearch.html.
[13]Brittenham P.了解 WS-I測試工具 [EB/OL].http://www.ibm.com/developerworks/cn/webservices/ws-wsitest/.