SOA概述

 

  最近半年以來,在企業級應用開發領域,談論最多的一個詞,恐怕非SOA(Service-Oriented Architecture,面向服務架構)莫屬。那麼SOA究竟擁有什麼樣的魔力,能夠讓衆多的軟件廠商對他趨之若騖,掀起新的一輪企業架構浪潮。讓我們在本文中一探SOA的究竟。

  那麼什麼是SOA,讓我們先從基本概念開始講起。

  什麼是SOA?

  SOA是一種架構模型,它可以根據需求通過網絡對鬆散耦合的粗粒度應用組件進行分佈式部署、組合和使用。服務層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人爲依賴性。

  SOA的關鍵是“服務”的概念,W3C將服務定義爲:“服務提供者完成一組工作,爲服務使用者交付所需的最終結果。最終結果通常會使使用者的狀態發生變化,但也可能使提供者的狀態改變,或者雙方都產生變化”。

  Service-architecture.com將SOA定義爲:“本質上是服務的集合。服務間彼此通信,這種通信可能是簡單的數據傳送,也可能是兩個或更多的服務協調進行某些活動。服務間需要某些方法進行連接。所謂服務就是精確定義、封裝完善、獨立於其他服務所處環境和狀態的函數。”

  Looselycoupled.com將SOA定義爲:“按需連接資源的系統。在SOA中,資源被作爲可通過標準方式訪問的獨立服務,提供給網絡中的其他成員。與傳統的系統結構相比,SOA規定了資源間更爲靈活的鬆散耦合關係。”

  Gartner則將SOA描述爲:“客戶端/服務器的軟件設計方法,一項應用由軟件服務和軟件服務使用者組成……SOA與大多數通用的客戶端/服務器模型的不同之處,在於它着重強調軟件組件的鬆散耦合,並使用獨立的標準接口。”

  Gartner相信BPM和SOA的結合對所有類型的應用集成都大有助益??“SOA極大的得益於BPM技術和方法論,但是SOA面臨的真正問題是確立正確的企業意識,即:強化戰略化的SOA計劃(針對供應和使用)並鼓勵重用。”

  雖然不同廠商或個人對SOA有着不同的理解,但是我們仍然可以從上述的定義中看到SOA的幾個關鍵特性:一種粗粒度、鬆耦合服務架構,服務之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。

  需着重注意的是,SOA並不是新生事物??大型IT組織成功構建和部署SOA應用已有多年的歷史??這要比現有的XML和Web服務長很多。IBM CICS和BEA TUXEDO就是過去被用於構建SOA應用的兩種技術範例。

  重點說明的是SOA並不是一種現成的技術,而是一種架構和組織IT基礎結構及業務功能的方法。SOA是一種在計算環境中設計、開發、部署和管理離散邏輯單元(服務)的模型。這一定義闡明瞭SOA的範圍。

  SOA要求開發人員將應用設計爲服務的集合。SOA要求開發人員跳出應用本身進行思考,考慮現有服務的重用,或思索他們的服務如何能夠被其他項目重用。“單獨的”、“獨立的”、“封裝完善的”服務所具有的一個關鍵的好處是,可以採用多種不同方法將它們組合成較大型的服務,由此來實現重用。

  但是,SOA並不僅僅是一種開發方法??它還具有管理上的優點。例如,現在管理員可直接管理開發人員所構建的相同服務,這遠勝於以往管理單個應用的方式。通過分析服務間的交互,SOA可以幫助企業瞭解何時以及爲什麼業務邏輯被切實執行了,這使管理員或分析師能夠有針對性的優化業務流程。

  SOA的基本特徵

  SOA的實施具有幾個鮮明的基本特徵。實施SOA的關鍵目標是實現企業IT資產的最大化重用。要實現這一目標,就要在實施SOA的過程中牢記以下特徵:

﹡ 可從企業外部訪問
﹡ 隨時可用
﹡ 粗粒度的服務接口
﹡ 分級
﹡ 鬆散耦合
﹡ 可重用的服務
﹡ 服務接口設計管理
﹡ 標準化的服務接口
﹡ 支持各種消息模式
﹡ 精確定義的服務契約

  我們現在開始依次討論以上概念。

  1  可從企業外部訪問

  通常被稱爲業務夥伴的外部用戶也能像企業內部用戶一樣訪問相同的服務。業務夥伴採用先進的B2B協議(ebXML或RosettaNet)相互合作。當業務夥伴基於業務目的交換業務信息時,他們就參與了一次會話。會話是業務夥伴間一系列的一條或多條業務信息的交換。會話類型(會話複雜或簡單、長或短等)取決於業務目的。

  除了B2B協議外,外部用戶還可以訪問以Web服務方式提供的企業服務。

  2 隨時可用

  當有服務使用者請求服務時,SOA要求必須有服務提供者能夠響應。大多數SOA都能夠爲門戶應用之類的同步應用和B2B之類的異步應用提供服務。同步應用對於其所使用的服務具有很強的依賴性。

  許多同步應用通常部署在前臺,其最終用戶很容易受到服務提供者短缺的影響。很多情況下,同步應用利用分佈式服務提供者,這樣可以響應更多的用戶請求。但是,隨着提供特定服務功能的服務器數量的增長,出現短缺的可能性也呈指數級上升。

  當相比之下,異步應用要更爲穩健,因爲其採用隊列請求設計,因此可以容許出現服務提供者短缺或遲滯的情況。異步應用大多數情況下部署在後臺,用戶通常不會覺察到短暫的短缺。大部分情況下異步應用能夠穩健應對短時間短缺,但是長時間短缺則會引發嚴重問題。在服務短缺解決、隊列引擎將罕見的大量工作推到共享的應用資源中時,可能會出現隊列溢出甚至服務死鎖。

  服務使用者要求提供同步服務時,通常是基於其自身理解或使用習慣。在多數情況下,採用異步模型可以達到同樣的效果,但更能夠體現SOA的最佳特性。

  當然,並不是所有情況下都應當採用異步設計模式。但大多數情況下,異步消息可以確保系統在不同負荷下的伸縮性,在接口響應時間不是很短時尤其如此。

  3  粗粒度服務接口

  粗粒度服務提供一項特定的業務功能,而細粒度服務代表了技術組件方法。舉個例說明最爲清楚??向計費系統中添加一個客戶是典型的粗粒度服務,而你可以使用幾個細粒度服務實現同一功能,如:將客戶名加入到計費系統中,添加詳細的客戶聯繫方式、添加計費信息等等。

  採用粗粒度服務接口的優點在於使用者和服務層之間不必再進行多次的往復,一次往復就足夠。Internet環境中有保障的TCP/IP會話已不再佔據主導、建立連接的成本也過高,因此在該環境中進行應用開發時粗粒度服務接口的優點更爲明顯。

  除去基本的往復效率,事務穩定性問題也很重要。在一個單獨事務中包含的多段細粒度請求可能使事務處理時間過長、導致後臺服務超時,從而中止。與此相反,從事務的角度來看,向後臺服務請求大塊數據可能是獲取反饋的唯一途徑。

  4 分級

  一個關於粗粒度服務的爭論是此類服務比細粒度服務的重用性差,因爲粗粒度服務傾向於解決專門的業務問題,因此通用性差、重用性設計困難。解決該爭論的方法之一就是允許採用不同的粗粒度等級來創建服務。這種服務分級包含了粒度較細、重用性較高的服務,也包含粒度較粗、重用性較差的服務。

  在服務分級方面,須注意服務層的公開服務通常由後臺系統(BES's)或SOA平臺中現有的本地服務組成。因此允許在服務層創建私有服務是非常重要的。正確的文檔、配置管理和私有服務的重用對於IT部門在SOA服務層快速開發新的公開服務的能力具有重要影響。

  5  鬆散耦合

  SOA具有“鬆散耦合”組件服務,這一點區別於大多數其他的組件架構。該方法旨在將服務使用者和服務提供者在服務實現和客戶如何使用服務方面隔離開來。

  服務提供者和服務使用者間鬆散耦合背後的關鍵點是服務接口作爲與服務實現分離的實體而存在。這是服務實現能夠在完全不影響服務使用者的情況下進行修改

  大多數鬆散耦合方法都依靠基於服務接口的消息。基於消息的接口能夠兼容多種傳輸方式(如HTTP、JMS、TCP/IP、MOM等)。基於消息的接口可以採用同步和異步協議實現,Web服務對於SOA服務接口來講是一個重要的標準。

  當使用者調用一個Web服務時,被調用的對象可以是CICS事務、DCOM或CORBA對象、J2EE EJB或TUXEDO服務等,但這與服務使用者無關。底層實現並不重要。

  消息類Web服務通常是鬆散耦合和文檔驅動的,這要優於與服務特定接口的連接。當客戶調用消息類Web服務時,客戶通常會發送的是一個完整的文檔(如採購訂單),而非一組離散的參數。Web服務接收整個文檔、進行處理、而後可能或者不會返回結果信息。由於客戶和Web服務間不存在緊密耦合請求響應,消息類Web服務在客戶和服務器間提供了更爲鬆散的耦合。

  6  可重用的服務及服務接口設計管理

  如果完全按照可重用的原則設計服務,SOA將可以使應用變得更爲靈活。可重用服務採用通用格式提供重要的業務功能,爲開發人員節約了大量時間。設計可重用服務是與數據庫設計或通用數據建模類似的最有價值的工作。由於服務設計是成功的關鍵因此,因此SOA實施者應當尋找一種適當的方法進行服務設計過程管理。

  服務設計管理根本上講是服務設計問題,服務設計需要在兩點間折衷??走捷徑的項目戰術與企業構建可重用通用服務的長期目標。

  超越項目短期目標進行服務接口的開發和評估是邁向精確定義服務接口的重要一步,同時還需要爲接口文檔、服務實現文檔及所有重要的非功能性特徵設立標準。
在大型組織中實現重用的一個先決條件是建立通用(設計階段)服務庫和開發流程,以保證重用的正確性和通用性。此外,對記述服務設計和開發的服務文檔進行評估也是成功利用服務庫的關鍵。

  簡言之,不按規則編寫服務將無法保證可提供重用性的SOA的成功實施。在執行規則的過程中會產生財務費用,需要在制定SOA實施計劃時加以考慮。

  7  標準化的接口

  近年來出現的兩個重要標準XML和Web服務增加了全新的重要功能,將SOA推向更高的層面,並大大提升了SOA的價值。儘管以往的SOA產品都是專有的、並且要求IT部門在其特定環境中開發所有應用,但XML和Web服務標準化的開放性使企業能夠在所部署的所有技術和應用中採用SOA。這具有巨大的意義!

  Web服務使應用功能得以通過標準化接口(WSDL)提供,並可基於標準化傳輸方式(HTTP和JMS)、採用標準化協議(SOAP)進行調用。例如,開發人員可以採用最適於門戶開發的工具輕鬆創建一個新的門戶應用,並可以重用ERP系統和定製化J2EE應用中的現有服務,而完全無須瞭解這些應用的內部工作原理。採用XML,門戶開發人員無須瞭解特定的數據表示格式,便能夠在這些應用間輕鬆地交換數據。
你也可以不採用Web服務或XML來創建SOA應用,但是這兩種標準的重要性日益增加、應用日趨普遍。儘管目前只有幾種服務使用者支持該標準,但未來大多數的服務使用者都會將其作爲企業的服務訪問方法。

  8  支持各種消息模式

  SOA中可能存在以下消息模式。在一個SOA實現中,常會出現混合採用不同消息模式的服務。

  無狀態的消息。使用者向提供者發送的每條消息都必須包含提供者處理該消息所需的全部信息。這一限定使服務提供者無須存儲使用者的狀態信息,從而更易擴展。

  有狀態的消息。使用者與提供者共享使用者的特定環境信息,此信息包含在提供者和使用者交換的消息中。這一限定使提供者與使用者間的通信更加靈活,但由於服務提供者必須存儲每個使用者的共享環境信息,因此其整體可擴展性明顯減弱。該限定增強了服務提供者和使用者的耦合關係,提高了交換服務提供者的服務難度。

  等冪消息。向軟件代理髮送多次重複消息的效果和發送單條消息相同。這一限定使提供者和消費者能夠在出現故障時簡單的複製消息,從而改進服務可靠性。

  9  精確定義的服務接口

  服務是由提供者和使用者間的契約定義的。契約規定了服務使用方法及使用者期望的最終結果。此外,還可以在其中規定服務質量。此處需要注意的關鍵點是,服務契約必須進行精確定義。

  META將SOA定義爲:“一種以通用爲目的、可擴展、具有聯合協作性的架構,所有流程都被定義爲服務,服務通過基於類封裝的服務接口委託給服務提供者,服務接口根據可擴展標識符、格式和協議單獨描述。”該定義的最後部分表明在服務接口和其實現之間有明確的分界。

  SOA的優點

  瞭解了SOA的定義和基本特徵,最後我們再來看看SOA潛在的優點:

  編碼靈活性

  可基於模塊化的低層服務、採用不同組合方式創建高層服務,從而實現重用,這些都體現了編碼的靈活性。此外,由於服務使用者不直接訪問服務提供者,這種服務實現方式本身也可以靈活使用。

  明確開發人員角色

例如,熟悉BES的開發人員可以集中精力在重用訪問層,協調層開發人員則無須特別瞭解BES的實現,而將精力放在解決高價值的業務問題上。

  支持多種客戶類型

  藉助精確定義的服務接口和對XML、Web服務標準的支持,可以支持多種客戶類型,包括PDA、手機等新型訪問渠道。

  更易維護

  服務提供者和服務使用者的鬆散耦合關係及對開放標準的採用確保了該特性的實現。

  ﹡更好的伸縮性

  依靠服務設計、開發和部署所採用的架構模型實現伸縮性。服務提供者可以彼此獨立調整,以滿足服務需求。

  ﹡更高的可用性

  該特性在服務提供者和服務使用者的鬆散耦合關係上得以體現。使用者無須瞭解提供者的實現細節,這樣服務提供者就可以在WebLogic集羣環境中靈活部署,使用者可以被轉接到可用的例程上。

  SOA可以看作是B/S模型、XML/Web Service技術之後的自然延伸。SOA將能夠幫助我們站在一個新的高度理解企業級架構中的各種組件的開發、部署形式,它將幫助企業系統架構者以更迅速、更可靠、更具重用性架構整個業務系統。較之以往,以SOA架構的系統能夠更加從容地面對業務的急劇變化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章