什么是面向服務(wù)的體系結(jié)構(gòu)(soa)?
面向服務(wù)的體系結(jié)構(gòu)(soa)表示您可以如何使用 web 服務(wù)的大圖景。web 服務(wù)規(guī)范定義了實現(xiàn)服務(wù)以及與它們的交互所需要的細節(jié)。然而,面向服務(wù)的體系結(jié)構(gòu)(soa)是一種用于構(gòu)建分布式系統(tǒng)的方法,采用 soa 這種方法構(gòu)建的分布式應(yīng)用程序可以將功能作為服務(wù)交付給終端用戶,也可以構(gòu)建其他的服務(wù)。面向服務(wù)的體系結(jié)構(gòu)(soa)可以基于 web 服務(wù),但是它可能改為使用其他的技術(shù)來代替。在使用面向服務(wù)的體系結(jié)構(gòu)(soa)設(shè)計分布式應(yīng)用程序時,您可以將 web 服務(wù)的使用從簡單的客戶端-服務(wù)器模型擴展成任意復(fù)雜的系統(tǒng)。
因而,單個的軟件資產(chǎn)成為開發(fā)其他應(yīng)用程序的基本構(gòu)件。您可以通過與新的代碼和遺留代碼一起使用的共同交互方式來減少系統(tǒng)的復(fù)雜性(cbdi 的 lawrence wilkes 開玩笑說,面向服務(wù)的體系結(jié)構(gòu)(soa)可以代表“節(jié)省我們的資產(chǎn)(save our assets)”)。有一種標準的方法可以用于表示這些軟件資產(chǎn)和與它們交互;現(xiàn)在人們關(guān)注的重點已經(jīng)轉(zhuǎn)移到基于這些構(gòu)件的應(yīng)用程序裝配上來了。
雖然在這里討論的是用于業(yè)務(wù)應(yīng)用程序的面向服務(wù)的體系結(jié)構(gòu)(soa),但是面向服務(wù)的體系結(jié)構(gòu)(soa)同樣也可以用于其他的分布式系統(tǒng),比如網(wǎng)格計算和高級 web 服務(wù)規(guī)范(例如,web 服務(wù)分布式管理(ws-distributedmanagement)、web 服務(wù)信任(ws-trust)以及 uddi)。
什么是服務(wù)?
在面向服務(wù)的體系結(jié)構(gòu)(soa)中,服務(wù)(service)是封裝成用于業(yè)務(wù)流程的可重用組件的應(yīng)用程序函數(shù)。它提供信息或簡化業(yè)務(wù)數(shù)據(jù)從一個有效的、一致的狀態(tài)向另一個狀態(tài)的轉(zhuǎn)變。用于實現(xiàn)特定服務(wù)的流程并不重要,只要它響應(yīng)您的命令并為您的請求提供高質(zhì)量的服務(wù)就可以了。
通過定義的通信協(xié)議,可以調(diào)用服務(wù)來強調(diào)互操作性和位置透明性。一個服務(wù)表現(xiàn)為一個軟件組件,因為從服務(wù)請求者的角度來看,它看起來就像是一個自包含的函數(shù)。然而,實際上,服務(wù)的實現(xiàn)可能包括在一個企業(yè)內(nèi)部的不同計算機上或者許多業(yè)務(wù)合作伙伴擁有的計算機上執(zhí)行的很多步驟。就封裝的軟件而言,服務(wù)可能是一個組件,也可能不是一個組件。如同類對象,請求者應(yīng)用程序能夠?qū)⒎?wù)看作是一個整體。
web 服務(wù)是以使用 soap 消息(它是用像 http 這樣的標準協(xié)議上的 wsdl 來描述的)的調(diào)用為基礎(chǔ)的。使用 web 服務(wù)的最佳實踐就是與外部的業(yè)務(wù)伙伴通信。
松耦合
服務(wù)請求者到服務(wù)提供者的綁定與服務(wù)之間應(yīng)該是松耦合的。這就意味著,服務(wù)請求者不知道提供者實現(xiàn)的技術(shù)細節(jié),比如程序設(shè)計語言、部署平臺,等等。服務(wù)請求者往往通過消息調(diào)用操作——請求消息和響應(yīng)——而不是通過使用 api 和文件格式。
這個松耦合使會話一端的軟件可以在不影響另一端的情況下發(fā)生改變,前提是消息模式保持不變。在一個極端的情況下,服務(wù)提供者可以將以前基于遺留代碼(例如,cobol)的實現(xiàn)完全用基于 java 語言的新代碼取代,同時又不對服務(wù)請求者造成任何影響。這種情況是真實的,只要新代碼支持相同的消息模式。
明確定義的接口
服務(wù)交互必須是明確定義的。web 服務(wù)描述語言(web services description language,wsdl)是受到廣泛支持的方法,用于描述服務(wù)請求者所要求的綁定到服務(wù)提供者的細節(jié)。服務(wù)描述的重點在于與下面幾部分交互所用的操作:
服務(wù)
調(diào)用操作的消息
構(gòu)造這種消息的細節(jié)
關(guān)于向何處發(fā)送用于構(gòu)造這種消息的處理細節(jié)的消息的信息
wsdl 不包括服務(wù)實現(xiàn)的任何技術(shù)細節(jié)。服務(wù)請求者不知道也不關(guān)心服務(wù)究竟是由 java 代碼、c#、cobol,還是由某種其他的程序設(shè)計語言編寫的。它可以描述使用 http 的 soap 調(diào)用。由于它的擴展機制,它也可以定義其他類型的交互,比如通過 jms 提交的 xml 內(nèi)容、直接方法調(diào)用、由管理遺留代碼的適配器處理的調(diào)用(cics),等等。
wsdl 的通用定義允許開發(fā)工具創(chuàng)建各種各樣類型的交互的通過接口,同時隱藏它是如何由應(yīng)用程序代碼調(diào)用服務(wù)的細節(jié)。例如,如果服務(wù)是以多種交互類型公開的,web 服務(wù)調(diào)用框架(web services invocation framework,wsif)通過允許運行時決定調(diào)用高質(zhì)量服務(wù)的最優(yōu)方法來使用這種能力。
無狀態(tài)的服務(wù)設(shè)計
服務(wù)應(yīng)該是獨立的、自包含的請求,在實現(xiàn)時它不需要從一個請求到另一個請求的信息或狀態(tài)。服務(wù)不應(yīng)該依賴于其他服務(wù)的上下文和狀態(tài)。當需要依賴時,它們最好定義成通用業(yè)務(wù)流程、函數(shù)和數(shù)據(jù)模型,而不是實現(xiàn)構(gòu)件(比如會話密鑰)。當然,請求者應(yīng)用程序需要服務(wù)調(diào)用之間的持久狀態(tài),但是這不應(yīng)該與服務(wù)提供者分開。
這里有一個定義會話的錯誤方法的示例:
requester: “what is bruce’s checking account balance?"
provider: “$x"
requester: “and what is his credit limit?"
provider: “$y"
提供者被要求記住請求之間 bruce 的帳號,這就在服務(wù)實現(xiàn)中引入了復(fù)雜性。無狀態(tài)的服務(wù)設(shè)計將重新定義會話,如下所示:
requester: “what is bruce’s checking account balance?"
provider: “$x"
requester: “what is bruce’s credit limit?"
provider: “$y"
服務(wù)粒度
操作的粒度是一項重要的設(shè)計要點。對于外部的消耗推薦使用粗粒度的接口,而細粒度的接口可能用于企業(yè)內(nèi)部。粗粒度接口可能是特定服務(wù)的完整處理,例如 submitpurchaseorder,在這里消息包括定義訂購單所需的所有業(yè)務(wù)信息。細粒度接口可能具有用于以下方法的不同操作:createnewpurchaseorder、setshippingaddress、additem,等等。
雖然細粒度的接口為請求者應(yīng)用程序提供了更多的靈活性,它同樣也意味著交互的模式可能隨著不同的服務(wù)請求者而不同。這可能使對于服務(wù)提供者的支持更加困難。粗粒度接口保證服務(wù)請求者將以一致的方式使用服務(wù)。面向服務(wù)的體系結(jié)構(gòu)(soa)不要求使用粗粒度接口,但是推薦使用它們作為外部集成的最佳實踐。服務(wù)編排可以用來創(chuàng)建運行由細粒度操作組成的業(yè)務(wù)流程的粗粒度接口。
服務(wù)質(zhì)量需要考慮的問題
面向服務(wù)的體系結(jié)構(gòu)(soa)設(shè)計將跨越計算機系統(tǒng),并且還可能跨越企業(yè)邊界。您不得不考慮在使用 internet 時安全性功能和需求以及如何鏈接伙伴的安全域。internet 協(xié)議并不是為可靠性(有保證的提交和提交的順序)而設(shè)計,但是您不得不確保消息被提交并被處理一次。當這不可能時,請求者必須知道請求并沒有被處理。
例如,您可能需要考慮您所部署服務(wù)的度量、可靠性以及響應(yīng)時間,以便確保它們在承諾的范圍之內(nèi)。當您設(shè)計使用來自其他業(yè)務(wù)伙伴的服務(wù)的系統(tǒng)時,您就不得不考慮面向服務(wù)的管理來以協(xié)作方式管理伙伴之間的服務(wù)。
注冊會員,創(chuàng)建你的web開發(fā)資料庫,新聞熱點
疑難解答
圖片精選