摘要:隨著Web service應用的深入和應用環境的復雜,無狀態的Web service在一些方面顯示出很大的不足,如事務處理、用戶登錄、訪問權限控制等,所以有狀態Web service的研究具有很大的意義。通過對現有Web service兩種狀態的探討,分析現有狀態管理的不足,提出了一個新的Web service狀態管理模型。
關鍵詞:Web服務; 狀態; 企業服務總線; 狀態管理器
中圖分類號:TP311文獻標志碼:A
文章編號:1001-3695(2007)11-0076-03
Web service 是一種部署在Web上的對象,它提供基于XML/SOAP并可以跨越Internet進行遠程調用的機制。服務器端創建并發布能對外提供功能或者服務的組件;客戶端可以通過預定義的接口和參數遠程調用Web service;Web service器端接收請求,執行該過程并反饋結果。
一直以來,Web service 被當做是無狀態的。由于它不能記憶每次調用的結果,這就限制了Web service 操作不能使用前一次調用的結果;另一方面,雖然在絕大多數情況下都是通過諸如 HTTP 這樣的不可靠、無狀態的協議來訪問Web ser ̄vice,但是實際上,Web service通常可以代表單個服務請求者或在特定的業務上下文中跨多個交互來維護狀態或資源,所以有狀態Web service 的研究具有重要意義。
1 Web services的狀態
目前普遍認為Web services的狀態分為兩類:a)Web 服務的會話狀態,主要通過傳入Web service的上下文來實現;b)Web 服務作用于有狀態資源,對于這種Web 服務,2004年1月,包括IBM、HP和Globus聯盟在內的六家公司和組織公布了統一網格計算和Web服務的新標準——Web服務資源框架(WSresource framework,WSRF)。其主要目的是將Web service 環境下狀態地描述和管理標準化、統一化。
1.1 Web service的會話狀態管理
Web 服務的會話狀態是暫時的,會話開始時創建,會話結束時結束,狀態特定于某一次會話。由于Web service會話狀態的特殊性,現在還沒有組織對它提出標準化的框架。現有Web service會話狀態管理的技術均局限于使用HTTP會話中的session、application或cookies機制,存在著很大的不足。
a)這將使Web service局限于HTTP協議,無法進行進一步的擴展。
b)所有的會話狀態均需要Web service提供者自身維護,沒有統一的管理方式,加重了Web service提供者的負擔。
c)大量的會話狀態數據保存在Web service進程中,造成服務器支持會話數量受到服務器內存資源的限制問題,同時也因為大量非活動會話導致內存被無效占用。
d)出于安全性的考慮,很多人在瀏覽器中禁止了cookie的使用。
1.2作用于有狀態資源的Web service
在這種方法中,Web service 本身的實現是無狀態的, 狀態信息由獨立于Web service 的、專門的狀態資源進行表述和維護,使得Web service能夠把它們自己與改變狀態的數據直接脫離開來,以一個單獨的形式來有效的封裝資源。每一個狀態資源均具有自己的名稱和類型。通過隱式資源模式(implied resource pattern) ,無狀態的Web service 和狀態資源相連接, 共同向Web service 的調用者提供狀態化的Web service。WSRF(WSresource framework)作為一個標準化框架,由一系列的處理細節模塊組成。
1)WS資源定義了Web services如何能夠被用來表示多資源實例。
2)WS-資源屬性(WSRFRP)指定了同WS-資源中定義的屬性進行交互的實際方式。
3)WS-資源生命周期(WSRFRL)定義了如何來管理和銷毀WS-資源的生命周期。
4)WS-服務組(WSRFSG)指定了如何來聚合WS-資源。
5) WS-基本錯誤(WSRFBF)定義了被WSRF服務拋出的SOAP格式的錯誤。
2 Web service的狀態管理框架
在分析了傳統的Web service的狀態管理機制后,筆者提出一種新的Web服務狀態管理機制,該機制將Web service的兩類狀態用統一的方式進行管理。
2.1狀態管理總體模型
整個Web service的狀態管理模型如圖1所示。其中Web service使用者是要求使用Web service的應用程序,企業服務總線(enterprise service bus,ESB)是接收服務請求并將它路由和傳遞正確的Web service提供者。在它上面也可以要求狀態管理器創建、獲取、修改、刪除一些公共的Web service 狀態。Web service 提供者是Web service的邏輯單元。狀態管理器是管理Web 服務狀態的應用程序,所有Web service狀態元素的創建、獲取、修改、刪除等操作均由它完成,狀態元素庫則包含所有的Web service狀態資源。
在這個Web service狀態管理模型當中,Web service 使用者調用Web service的具體步驟如下:
a) Web service使用者向ESB發出調用Web service的請求,狀態請求消息將附加在SOAP請求消息頭中。
b) ESB接收到請求后,根據該請求中對具體狀態類型的不同,選擇是否向狀態管理器發出請求。一些公共的狀態請求如安全驗證、權限管理之類的可直接向狀態管理器發出請求,獲得狀態ID后將其附加到Web service請求中,再將請求傳遞到Web service提供者。而與具體Web service相關的狀態請求ESB不進行處理,直接將Web service請求傳送到Web service提供者。
c) Web service 提供者接收到Web service請求后進行解析,解析到狀態請求后向狀態管理器發出請求。
d) 狀態管理器接收到狀態請求后在狀態元素庫中生成一個狀態元素并返回一個不重復的狀態標志。
e) Web service提供者接收到狀態標志后執行本身程序,完成后將執行結果及狀態標志傳遞給ESB,它再將結果傳遞給Web service使用者。
2. 2ESB
在上面提出的Web service狀態管理模型當中,ESB是非常重要的一環,它連接了Web service使用者和Web service提供者。現在很多企業都提供ESB中間件,其實現不是本文的主要內容,在這里只簡單介紹一下它的基本功能。ESB是計算機技術、管理技術相結合的一種新的中間件技術。它借鑒了計算機硬件總線的概念,通過 ESB 來集中對應用系統進行服務,減少應用系統之間耦合性,提高系統間的互操作能力與健壯性。ESB 作為一個中介平臺,它提供的基本功能有:
a) 中介。提供位置透明的服務路由、尋址服務;提供消息的多種傳遞模式(請求/響應、單路請求、發布/訂閱等);支持多種傳輸協議(HTTP、JMS、FTP、SMTP、MQ 等)。
b) 控制。通過元數據來控制數據接收、發送、過濾、安全驗證等,通過服務的智能化引擎來發現、調用服務。
c) 系統管理。提供日志、審計、監控、服務管理策略等的管理。通過圖形化的界面展現系統的運行狀況。
d) 支持多種服務集成方式,如 Web 服務、消息、適配器等。
e) 元數據管理。管理 ESB 的元數據與服務的元數據,如注冊、尋址等。
2. 3狀態管理器模型的實現
狀態管理器是Web service狀態管理模型的核心,它管理了Web service用到的所有狀態資源。狀態資源存儲在狀態元素庫中,由狀態管理器直接操作,Web service使用者、ESB、Web service提供者均不能直接操作。狀態管理器的操作主要有:新增、獲取、更新、刪除。具體結構如圖2所示。
1)createState()
在狀態管理器獲得ESB或Web service提供者傳遞過來創建狀態的請求后,就調用這個操作。它生成一個惟一的狀態標志,返回給ESB或Web service提供者。創建狀態請求的XML消息頭格式如下:
〈state〉
〈action〉CreateState〈/action〉
〈statetype〉…〈/statetype〉
〈stateinfo〉
〈statevalue〉…〈/statevalue〉
…
…
〈/stateinfo〉
〈/state〉
該消息頭由三個抽象的屬性組成:
a)Action為對狀態資源的操作,在該消息頭中為創建狀態實例。
b)Statetype為狀態類型是對狀態資源類型的惟一標志。
c)Stateinfo為狀態資源屬性值,在創建狀態時需傳入狀態資源屬性值。
2)getState()
ESB或Web service提供者傳入狀態標志對某個具體狀態資源進行請求時,狀態管理器調用這個操作,用于查找某個具體狀態資源,并對找到的資源進行相應處理。請求狀態實例的XML消息頭格式如下:
〈state〉
〈action〉GetState〈/action〉
〈stateid〉〈/stateid〉
〈/state〉
該消息頭由兩個抽象屬性組成:
a)Action為 對狀態資源的操作,在該消息頭中為請求狀態實例值。
b)Stateid為該屬性是在創建狀態時生成的狀態實例惟一標志。狀態管理器根據這個惟一標志去查找相對應狀態實例的值。
3)setState()
ESB或Web service提供者傳入狀態標志對某個具體狀態資源進行狀態設置時,狀態管理器調用這個操作,用于設置某個具體狀態資源的狀態,設置狀態實例的XML消息頭格式如下:
〈state〉
〈action〉SetState〈/action〉
〈stateid〉〈/stateid〉
〈stateinfo〉
〈statevalue〉…〈/statevalue〉
…
…
〈/stateinfo〉
〈/state〉
該消息頭由三個抽象的屬性組成:
a)Action為對狀態資源的操作,在該消息頭中為設置狀態實例狀態值。
b)Stateid為狀態類型是對狀態資源類型的惟一標志。
c)Stateinfo為狀態資源屬性值,需設置的狀態資源屬性值。
4)destoryState()
當ESB或Web service提供者提出刪除某個狀態實例時,狀態管理器調用這個操作,用于對狀態資源的銷毀。刪除狀態實例的XML消息頭格式如下:
〈state〉
〈action〉DestoryState〈/action〉
〈stateid〉〈/stateid〉
〈/state〉
該消息頭由兩個抽象屬性組成:
a)Action為對狀態資源的操作,在該消息頭中為刪除狀態實例值。
b)Stateid為該屬性是在創建狀態時生成的狀態實例惟一標志。狀態管理器根據這個惟一標志去刪除相對應狀態實例。
2. 4狀態元素
對于狀態,本文定義了一個狀態基類state,每個狀態都必須從狀態基類繼承而來。同時,還需要一個管理相對應狀態的類,由它來創建、查找、更新、刪除相對應的狀態。本文將它的基類定義為stateHome,每個對狀態管理的類也必須由它繼承而來。筆者虛擬設計一個user狀態資源。其類圖如圖3所示。
其中:user為本文定義的狀態資源,它繼承于狀態基類state。而userHome則是管理user的類,它繼承于stateHome。所有user的狀態實例均由它進行管理。
2. 5Web service狀態管理模型的分析
在上述Web service狀態管理模型中,本文針對現有Web service狀態管理的不足,進行了一定的改進,使執行性能有了顯著的提升。與原有的狀態管理模型的主要區別有:
a)使Web service擺脫了只局限于通過HTTP這樣的不可靠、無狀態的協議訪問的局面,通過其他方式訪問也可以管理Web service的會話狀態。
b)原有的隱含資源模式通過標準化的操作有利于加強Web services 的互操作性,但是這種模式是以增加客戶端與服務端的通信時間作為代價的。在這個實現模式中,Web service使用者不需要等獲得狀態標志后再向ESB發出請求。它可以直接向ESB發出請求,這樣就縮短了通信時間。
c)在該模式中,將一些公有的狀態請求放在了ESB這一層中實現,這樣就簡化了Web service提供者的工作。
3結束語
隨著Web service在實際項目中的大量使用,Web service的狀態管理也越來越重要。本文通過對現有Web service狀態管理機制的分析,提出了一種新的狀態管理模型,完善了Web service狀態管理機制。筆者對該模型只進行了初步實現,下一步將進一步完善該狀態管理模型。
參考文獻:
[1]AI Ting, WANG Caixia, XIE Yong. Analysis of state management in Web services and various extensions[EB/OL].[2004].http://www.comp.nus.edu.sg/~wangxb/5505_final_report_XieYong.pdf.
[2]GUDGIN M. SOAP version 1.2 Part 2: Adjuncts[EB/OL].[2003-06-24].http://www.w3.org/TR/2003/RECsoap12part220030624.pdf.
[3]KARMARKAR A. Resource representation SOAP header block[EB/OL].[2005-01-25].http://www.w3.org/TR/2005/RECsoap12rep20050125.html.
[4]DAVYDOV M M.在面向服務的體系結構中管理狀態[EB/OL].[2005-10].http://www.oracle.com/technology/global/cn /pub/articles/davydov_soa.htm1.
[5]FOSTER I, FREY J, GRAHAM S, et al. Modleing stateful resources with Web services[EB/OL].[2006-09].http://www106.ibm.com/developerworks/library/wsresource/modelingresources.pdf.
[6]FOSTER I, KESSELMAN C, NICH J, et al. The physiology of the grid:an open grid services architecture for distributed systems integration[EB/OL].[2004]. http://www.globus.org/research/papers/ogsa.pdf.
[7]GRAHAM M J, CALTECH. Building stateful Web services[EB/OL].[2006-09].http://grist.caltech.edu/sc4devo/presentations/files/SC4DEVO1.ppt.
[8]薛貴友.SOAP有狀態/無狀態分析及有狀態實現[J].天津理工學院學報,2002,18(2):61-64.
[9]陳啟祥,楊軍.面向服務的軟件架構SOA及其支撐技術的研究[J].湖北工業大學學報,2005,20(4):38-41.
[10]岳昆,王曉玲,周傲英.Web服務核心支撐技術:研究綜述[J].軟件學報,2004,15(3):428-442.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”