什么是面向服務的體系結構(SOA)?
面向服務的體系結構(Service-Oriented Architec-ture,SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。
這種具有中立的接口定義(沒有強制綁定到特定的實現上)的特征稱為服務之間的松耦合。松耦合系統的好處有兩點,一點是它的靈活性;另一點是,當組成整個應用程序的每個服務的內部結構和實現逐漸地發生改變時,它能夠繼續存在。而與此相對,緊耦合意味著應用程序的不同組件之間的接口與其功能和結構是緊密相連的,因而當需要對部分或整個應用程序進行某種形式的更改時,它們就顯得非常脆弱。
對松耦合系統的需求來源于業務應用程序需要根據業務的變動變得更加靈活,以適應不斷變化的環境,比如經常改變的政策、業務級別、業務重點、合作伙伴關系、行業地位以及其他與業務有關的因素,這些因素甚至會影響業務的性質。我們稱能夠靈活地適應環境變化的業務為按需(On Demand)業務,在按需業務中,一旦需要,就可以對完成或執行任務的方式進行必要的更改。
雖然面向服務的體系結構不是一個新鮮事物,但它卻是更傳統的面向對象的模型的替代模型,面向對象的模型是緊耦合的,已經存在二十多年了。雖然基于 SOA的系統并不排除使用面向對象的設計來構建單個服務,但是其整體設計卻是面向服務的。由于它考慮到了系統內的對象,所以雖然SOA是基于對象的,但是作為一個整體,它卻不是面向對象的。不同之處在于接口本身。SOA系統原型的一個典型例子是通用對象請求代理體系結構(Common Object Request Broker Architecture,CORBA),它已經出現很長時間了,其定義的概念與SOA相似。
然而,現在的SOA已經有所不同了,因為它依賴于一些更新的進展,這些進展是以可擴展標記語言(eXtensible Markup Language,XML)為基礎的。通過使用基于XML的語言(稱為Web服務描述語言,Web Services Definition Language,WSDL)來描述接口,服務已經轉到更動態且更靈活的接口系統中,非以前 CORBA中的接口描述語言(Interface Definiti on Language,IDL)可比了。
Web服務并不是實現SOA的惟一方式。前面剛講的CORBA是另一種方式,這樣就有了面向消息的中間件(Message-Oriented Middleware)系統,比如IBM 的MQSeries。但是為了建立體系結構模型,您所需要的并不只是服務描述。您需要定義整個應用程序如何在服務之間執行其工作流。您尤其需要找到業務的操作和業務中所使用的軟件的操作之間的轉換點。因此,SOA 應該能夠將業務的商業流程與它們的技術流程聯系起來,并且映射這兩者之間的關系。例如,給供應商付款的操作是商業流程,而更新您的零件數據庫,以包括進新供應的貨物卻是技術流程。因而,工作流還可以在 SOA的設計中扮演重要的角色。
此外,動態業務的工作流不僅可以包括部門之間的操作,甚至還可以包括與不為您控制的外部合作伙伴進行的操作。因此,為了提高效率,您需要定義應該如何得知服務之間關系的策略,這種策略常常采用服務級協定和操作策略的形式。
最后,所有這些都必須處于一個信任和可靠的環境之中,以同預期的一樣根據約定的條款來執行流程。因此,安全、信任和可靠的消息傳遞應該在任何SOA中都起著重要的作用。
我可以用面向服務的體系結構做什么?
對SOA的需要來源于需要使業務 IT 系統變得更加靈活,以適應業務中的改變。通過允許強定義的關系和靈活的特定實現,IT 系統既可以利用現有系統的功能,又可以準備在以后做一些改變來滿足系統之間交互的需要。
下面舉一個具體的例子。一個服裝零售組織擁有 500 家國際連鎖店,它們常常需要更改設計來趕上時尚的潮流。這可能意味著不僅需要更改樣式和顏色,甚至還可能需要更換布料、制造商和可交付的產品。如果零售商和制造商之間的系統不兼容,那么從一個供應商到另一個供應商的更換可能就是一個非常復雜的軟件流程。通過利用WSDL接口在操作方面的靈活性,每個公司都可以將它們的現有系統保持現狀,而僅僅匹配 WSDL接口并制訂新的服務級協定,這樣就不必完全重構它們的軟件系統了。這是業務的水平改變,也就是說,它們改變的是合作伙伴,而所有的業務操作基本上都保持不變。這里,業務接口可以作少許改變,而內部操作卻不需要改變,之所以這樣做,僅僅是為了能夠與外部合作伙伴一起工作。
另一種形式是內部改變,在這種改變中,零售組織現在決定它還將把連鎖零售商店內的一些地方出租給專賣流行衣服的小商店,這可以看作是采用店中店(Store-in-Store)的業務模型。這里,雖然公司的大多數業務操作都保持不變,但是它們現在需要新的內部軟件來處理這樣的出租安排。盡管在內部軟件系統可以承受全面的檢修,但是它們需要在這樣做的同時不會對與現有的供應商系統的交互產生大的影響。在這種情況下,SOA模型保持原封不動,而內部實現卻發生了變化。雖然可以將新的方面添加到SOA模型中來加入新的出租安排的職責,但是正常的零售管理系統繼續如往常一樣。
為了延續內部改變的觀念,IT 經理可能會發現,軟件的新配置還可以以另外的一種方式加以使用,比如出租粘貼海報的地方以供廣告之用。這里,新的業務提議是通過在新的設計中重用靈活的SOA模型得出的。這是來自SOA模型的新成果,并且還是一個新的機會,而這樣的新機會在以前可能是不會有的。
垂直改變也是可能的,在這種改變中,零售商從銷售他們自己的服裝完全轉變到專門通過店中店模型出租地方。如果垂直改變完全從最底層開始的話,就會帶來 SOA模型結構的顯著改變,與之一起改變的還可能有新的系統、軟件、流程以及關系。在這種情況下,SOA 模型的好處是它從業務操作和流程的角度考慮問題,而不是從應用程序和編程的角度考慮問題,這使得業務管理可以根據業務的操作清楚地確定什么需要添加、修改或刪除。然后可以將軟件系統構造為適合業務處理的方式,而不是在許多現有的軟件平臺上常?吹降钠渌绞。
正如您可以看到的,在這里,改變和SOA系統適應改變的能力是最重要的部分。對于開發人員來說,這樣的改變無論是在他們工作的范圍之內還是在他們工作的范圍之外都有可能發生,這取決于是否有改變需要知道接口是如何定義的,以及它們相互之間如何進行交互。
與開發人員不同的是,架構師的作用就是決策對SOA 模型大的改變。這種分工,就是讓開發人員集中精力于創建作為服務定義功能單元,而讓架構師和建模人員集中精力于如何將這些單元適當地組織在一起。這種方式已經有十多年的歷史了,通常用統一建模語言(Universal Modeling Language,UML),并且描述成模型驅動的體系結構(Model-Driven Architecture,MDA)。
構成SOA的技術是什么?
SOA本身應該是“如何將軟件組織在一起”的抽象概念。它依賴于用 XML 和 Web 服務實現并以軟件的形式存在的更加具體的觀念和技術。此外,它還需要安全性、策略管理、可靠消息傳遞以及會計系統的支持,從而有效地工作。您還可以通過分布式事務處理和分布式軟件狀態管理來進一步地改善它。
SOA服務和Web服務之間的區別在于設計。SOA 概念并沒有確切地定義服務具體如何交互,而僅僅定義了服務如何相互理解以及如何交互。其中的區別也就是定義如何執行流程的戰略與如何執行流程的戰術之間的區別。而另一方面,Web服務在需要交互的服務之間如何傳遞消息有具體的指導原則;從戰術上實現SOA模型最常見的方式是通過HTTP傳遞的SOAP消息。因而,從本質上講,Web 服務是實現SOA的具體方式之一。
盡管我們覺得 Web 服務是實現SOA最好的方式,但是SOA并不局限于Web服務。其他使用WSDL直接實現服務接口并且通過XML消息進行通信的協議也可以包括在SOA之中。正如在別處指出的,CORBA和 IBM的MQ系統通過使用能夠處理WSDL的新特征也可以參與到SOA中來。如果兩個服務需要交換數據,那么它們還會需要使用相同的消息傳遞協議,但是數據接口允許相同的信息交換。
既為了建立所有這些信息的適當控制,又為了應用安全性、策略、可靠性以及會計方面的要求,在SOA體系結構的框架中加入了一個新的軟件對象。這個對象就是企業服務總線(Enterprise Service Bus,ESB),它使用許多可能的消息傳遞協議來負責適當的控制、流甚至還可能是服務之間所有消息的傳輸。雖然ESB并不是絕對必需的,但它卻是在SOA中正確管理您的業務流程至關重要的組件。ESB本身可以是單個引擎,甚至還可以是由許多同級和下級ESB組成的分布式系統,這些 ESB一起工作,以保持SOA系統的運行。在概念上,它是從早期比如消息隊列和分布式事務計算這些計算機科學概念所建立的存儲轉發機制發展而來的。
從開發人員的角度來說,他們使用的工具必須知道 SOA的能力,并允許開發人員有效地使用SOA對象。這將把設計SOA模型、開發服務和服務對象以及測試 SOA應用程序這些過程包括進來并組成一個整體。因而,開發人員的工作必須為面向服務的應用程序設計/開發(Service-Oriented Application Design/Development,SOAD)做好準備。
文章來源于領測軟件測試網 http://www.kjueaiud.com/