HTTP協議:一個典型的SOA實現
每一項新技術都是在一些舊的技術基礎上發展出來的。正如XML根本思想來自于在60年代就已經出現的早期標記性語言一樣,SOA雖然這兩年才出現,但是它所表達的觀念應該說在網絡這種分布式系統結構出現不久就已經廣泛應用了。例如我們最熟悉的HTTP協議就是一個非常典型的SOA架構設計。HTTP協議的工作過程簡單敘述如下:
1) 客戶端,通常是通過瀏覽器,向服務器端以文本的方式發送一個請求,索取一個Web頁面;
2) 服務器端接收到這個請求之后,根據請求的內容進行處理并且返回一個符合HTML語法的文本;
3) 客戶端接收到服務器端的響應文本后調用本地的程序,通常還是瀏覽器,把返回的HTML文本的內容展現出來。
下面來看一下HTTP協議如何滿足了SOA的特點:
* 獨立的功能實體:作為服務器端的Web服務器是絕對不會因為客戶端的狀況變化而改變的,它總是非常穩定地按照自己的內在邏輯運行,響應外部的請求,管理自己的資源和數據。這里一個非常好的例子就是Web服務器對緩存(Cache)的處理,很多Web服務器為了提高性能都或多或少的對數據進行緩存,但是緩存數據、刷新數據這些于客戶端完全無關的操作完全由服務器端獨立完成,完全不受客戶端的影響。
* 大數據量低頻率訪問:對于一個HTTP請求來說,客戶端與服務器之間訪問的邊界非常簡單:就是一個請求,一個響應,沒有任何其它的信息往返。無論客戶端申請的網頁上除了文字之外還有什么信息,對于客戶端來說,它發出的請求只是簡單的告訴Web服務器它所需要的網頁的位置;至于為了生成這個網頁,服務器端是否需要訪問數據庫,執行Servlet或者其它的CGI程序對客戶端而言,都是完全透明的。
* 基于文本的消息傳遞:迄今為止兼容性最好的系統可能就是HTTP協議支撐的大部分的web應用了,我們可以在Windows平臺下用IE查看互聯網上一個Linux+Apache服務器上的由Perl腳本自動生成的網頁。這里的關鍵就是所有內容都是以格式化的文本方式傳遞的,不管Perl腳本如何執行,只要它的輸出是符合HTML規范的網頁,就可以被客戶端的瀏覽器解釋。而由于不同的操作系統上對于相同的HTML的解釋遵循相同的規范,因此不同操作系統下仍然能夠看到一致的用戶界面。
我們上面基本描述了SOA作為一種軟件架構有哪些特點,下面讓我們一起看看Web Service與SOA的關系。
SOA與Web Service
Web Service是就現在而言最適合實現SOA的一些技術的集合,事實上最近SOA的火爆在很大程度上歸功于Web Service標準的成熟和應用的普及為廣泛的實現SOA架構提供了基礎。下面讓我們看看Web Service中的各種協議是如何互相工作來滿足SOA所需的特點的:
* 獨立的功能實體:通過UDDI的目錄查找,我們可以動態改變一個服務的提供方而無需影響客戶端的應用程序配置。所有的訪問都通過SOAP訪問進行,只要WSDL接口封裝良好,外界客戶端是根本沒有辦法直接訪問服務器端的數據的。
* 大數據量低頻率訪問:通過使用WSDL和基于文本(Literal)的SOAP請求,我們可以實現能一次性接收大量數據的接口。這里需要著重指出的是SOAP請求分文本方式和遠程調用(RPC)兩種方式,正如上文已經提到的,采用遠程調用方式的SOAP請求并不符合這點要求。但是令人遺憾的是現有的大多數SOAP請求采用的仍然是遠程調用(RPC)方式,在某些平臺上,例如IBM WebSphere的早期版本,甚至沒有提供文本方式的SOAP支持。
* 基于文本的消息傳遞:Web Service所有的通訊是通過SOAP進行的,而SOAP是基于XML的,不同版本之間可以使用不同的DTD或者XML Schema加以辨別和區分。因此只需要我們為不同的版本提供不同的處理就可以輕松實現版本控制的目標。
SOA對于軟件架構設計的影響
無論您現在的系統是否牽涉到基于Internet的業務集成,采用SOA推薦的架構都對提高您系統的擴展性有很大幫助,下面是在系統中引入SOA后需要在軟件架構方面做出的改變:
* 使用基于文本方式的SOAP調用,擺脫遠程調用中出現的函數參數類型等與數據無關的信息,保證所有SOAP傳遞的都是有意義的商業數據。依賴于Schema,而不是類定義對這些數據進行解釋。
* 傳統的三層Web應用將可能變成四層結構:傳統意義上的商業邏輯層將被進一步劃分為存放每個會話(Session)信息的客戶邏輯層和與狀態無關Sateless的SOA層。
文章來源于領測軟件測試網 http://www.kjueaiud.com/