SOA與Web服務(二)

2021-04-12 13:54:51 字數 3847 閱讀 4047

雖然web服務不是實現soa的惟一形式,但是毫無疑問,它是最成功、最流行的形式。它們是體系結構與實現的關係,好比http是一種標準,而iis或者apache是實現了這個協議的軟體一樣。

從物件導向、面向元件到soa

歷史總是呈螺旋狀前進,在開發領域也不例外:從最開始的面向機器的開發,到面向過程的開發,到物件導向的開發,到面向元件的開發,再到現在要談的soa。這些技術之間是繼承並發展的關係。

是什麼促使它們按照這種方向發展呢?其一是更加面向人,而不是機器,採用更加類似人處理事物時所採用的方式,簡單地說是友好性;其次是更加開放,而不是專用;第三是在軟體系統中各個模組耦合度更加鬆散,而不是更緊密。

從面向機器到面向過程與物件導向,最大程度地體現了面向人的思維方式的特點。程式設計師得以在問題域求解問題本身,而不是在機器域求解這個問題。這使得開發人員可以在更高的抽象級別上考慮問題,從而解決複雜的問題。面向元件本身並不是新技術,只不過其發展受到影響的乙個重要原因是物件的粒度太細,不能提供其最初承諾的重用性,所以開發人員在內部內聚一些更細粒度的物件來提供定義良好的功能,以此來提高可重用性。

在元件技術都沒有被廣大的程式設計師吸收消化的情況下,為什麼還要轉到面向服務呢?這就涉及到後面的兩個因素。各種現存元件系統並不是開放的,互相之間不能無縫地呼叫,而且這種轉換效率低下,各種轉換方式也是專用的,各個組織有自己不同的方案。從本質上講,soa的乙個重要方面是要解決異構性,然後是更鬆散的耦合度。這將帶來更大的靈活性和適應性,適應動態變化的應用場景。

「服務是將元件描述成提供相關服務的物理黑盒封裝的可執行**單元。它的服務只能通過一致的已發布介面(包括互動標準)進行訪問。元件必須能夠連線到其他元件(通過通訊介面)以構成乙個更大的元件。服務通常實現為粗粒度的可發現的軟體實體,它作為單個例項存在,並且通過鬆散耦合的基於訊息通訊模型來與應用程式和其他服務互動。

開發者眼中的soa

要了解一種新的技術,人們總會問兩個問題:「組成這些模型的各個部分是什麼?這些部分之間是怎樣互動的?」。我們可以用分層模型來幫助讀者理解。在分層模型中,模型的各部分以層來表述,而各部分的關係則以下層為上層提供的介面來表述,層層抽象。

圖1是一種被廣泛認可的體系結構。

左邊各層代表功能結構。其中:

● 傳輸(transport)是一種機制,用於將來自服務使用者的服務請求傳送給服務提供者,並且將來自服務提供者的響應傳送給服務使用者。它只是傳輸訊息的機制。

● 服務通訊協議(service communication protocol)是一種協商的機制,通過這種機制,服務提供者和服務使用者可以就將要請求的內容和將要返回的內容進行溝通。

● 服務描述(service description)是一種標準的模式,用於描述服務是什麼、應該如何呼叫服務以及成功地呼叫服務需要什麼資料。

● 服務(service)當然是指實際可供使用的服務實體。

● 業務流程(business process)是乙個服務的集合,可以按照特定的順序並使用一組特定的規則進行呼叫,以滿足業務要求。可以將業務流程本身看做是服務,這樣就產生了業務流程可以由不同粒度的服務組成的觀念。

● 服務註冊中心(service registry)是乙個服務和資料描述的儲存庫,服務提供者可以通過服務註冊中心發布它們的服務,而服務使用者可以通過服務註冊中心發現或查詢可用的服務。服務註冊中心可以給需要集中式儲存庫的服務提供其他的功能。

圖中右邊部分代表服務質量部分。這些是貫穿每一層的。

● 策略(policy)是一組條件和規則,在這些條件和規則之下,服務提供者可以使服務對於使用者可用。策略是功能與服務質量之間的紐帶,因此功能和服務質量兩個區都涉及策略。

● 安全性(security)是規則集,可以應用於呼叫服務的服務使用者的身份驗證、授權和訪問控制。

● 事務(transaction)是屬性集,可以應用於一組服務,以提供一致的結果。例如,如果要使用一組服務來完成一項業務功能,則所有的服務都必須完成,或者沒有乙個完成。

● 管理(management)是屬性集,可以應用於管理提供的服務或使用的服務。

如何實現web服務?

那麼web服務是如何實現這個架構的?

傳輸,往往採用http、**tp或者其他更優化的協議。用得廣泛的是http,現實的情況是大多數組織的安全策略都只開放80埠。

通訊協議,往往採用soap(****** object access protocol),即簡單物件訪問協議,它用xml的形式規定了訊息該如何編碼。頂層元素是envelope,其他包括可選的header,必需的body,還定義了一些屬性。

服務描述,採用wsdl(web services description language)。它是乙個開放的標準,由w3c制定,主要規定擴充套件的資料型別、訊息、埠、繫結、實現等,它規定了乙個服務可以如何被呼叫。另乙個正在制訂的標準是 web 服務定址(ws-addressing),它定義了如何在分布式體系結構中惟一地進行 web 服務定址和標識 web 服務,最終通過wsdl起作用(即向服務描述檔案中增加了幾個元素)。另乙個流行的規範是 web服務呼叫框架(web services invocation framework),在這種框架中,可以定義任何型別元件的wsdl介面,即使它們沒有使用相同的訊息傳遞協議。

服務,可以用任何語言開發,是實現具體介面的軟體實體。

業務流程依不同的場合而不同,說明了組合服務的順序。

服務的註冊與發現用uddi(universal description, discovery and integration) 實現。它用於規定web服務的註冊與發布機制。web 服務檢查語言(web services inspection language)是 uddi 在不使用註冊中心的情況下採用的一種可選機制。

用於 web 服務的安全性協議是從 web 服務安全性(ws-security)規範開始的,該規範為安全通訊定義了基於令牌的體系結構。

在安全性模型之外的是特定於應用程式的規範,其中包括 web 服務的業務流程執行語言(business process execution language for web services,bpel4ws),它定義了進行協同分布式事務處理的工作流操作、web服務事務(ws-transaction)以及web 服務協調(ws-coordination)等。

用於 web 服務的規範正處在不斷制訂的過程中,很多相關規範正在由各種標準組織(如w3c、ietfasis)以及行業聯盟(如web服務互操作性組,web services interoperability group,ws-i)制定。筆者的建議是經常關注這些組織的主頁,以獲得最新的資訊。

未來的趨勢與展望

web服務提供了簡單優美的通訊與整合方案,它應該可以成為分布式計算的基礎平台。我們主要介紹它在最近流行的網格計算中的基礎作用。

看完上文的介紹後,讀者或許已經形成了乙個基本的印象,即在soa架構下,一切都是服務。web服務以其松耦合、平台無關、現有的眾多任務具、大型企業的支援等優勢,成為網格計算首選的基礎平台。當今,網格計算與web服務間的界限已經越來越模糊。

不久前,globus alliance新提出了wsrf(web services resource framework)規範,以增強以前廣泛使用的ogsa(open grid services architecture)。這個規範將web服務進行了擴充套件。在web服務領域(以及社群),無狀態被認為是乙個好的工程實踐,所以web服務被設計成沒有狀態的、而網格要處理的是廣泛分布的,異構的各種資源,資源卻是有狀態的。好比乙個人造衛星,它時刻都有其空間位置和方向等。 wsrf因此而定義了「狀態」,稱乙個可以通過某個web服務訪問的資源為ws-resource。這意味著網格計算與web服務的繫結將更加緊密,最終有可能使得web服務成為分布式計算的基礎平台標準。

■ 清華大學作業系統與中介軟體技術研究中心 王彪(計算機世界報 2023年06月20日 第23期 b12)

引用: http://www2.ccw.com.cn/05/0523/b/0523b14_9.asp

微服務與SOA

過去的幾年來,微服務 這個術語逐漸得到關注,它描述的是由一系列更小的服務所組成的架構。在qcon san francisco 2012上,thoughworks的james lewis針對這個概念發表了演講,同時還就這個話題與martin fowler合作撰寫了一篇文章。最近,steve jones...

SOA最差實踐 過多的Web服務 麻煩

sonic軟體和progress 軟體公司技術總監dan foody,在他所認為的soa最差實踐基礎上正見證著soa的一系列失敗。作為技術總監,他並沒有從技術層面上來看待這個問題。在他看來,問題在於專案 的管理,缺乏對soa方案的理解和企業沒有能夠作出適合soa理念應有的改變。在soa方面,你們看到...

SOA 與 微服務的區別

什麼是soa soa service oriented architecture 面向服務架構,它可以根據需求通過網路對鬆散耦合的粗粒度應用元件進行分布式部署 組合和使用。服務層是soa的基礎,可以直接被應用呼叫,從而有效控制系統中與軟體 互動的人為依賴性。soa是一種粗粒度 松耦合服務架構,服務之...