Service-Oriented Architecture
面向服務(wù)的架構(gòu)
軟件業(yè)從最初的面向過(guò)程、面向?qū)ο螅胶髞?lái)的面向組件、面向集成,直到現(xiàn)在的面向服務(wù),走過(guò)了一條螺旋上升的曲線。
其實(shí),自從上世紀(jì)70年代提出“軟件危機(jī)”,誕生軟件工程學(xué)科以來(lái),為了徹底擺脫軟件系統(tǒng)開發(fā)泥潭,我們一直也沒(méi)有放棄努力。
SOA的定義
SOA,面向服務(wù)的架構(gòu)是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元----服務(wù)(service),通過(guò)服務(wù)間定義良好的接口和契約(contract)聯(lián)系起來(lái)。接口采用中立的方式定義,獨(dú)立于具體實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言,使得構(gòu)建在這樣的系統(tǒng)中的服務(wù)可以使用統(tǒng)一和標(biāo)準(zhǔn)的方式進(jìn)行通信。
這種具有中立的接口定義(沒(méi)有強(qiáng)制綁定到特定的實(shí)現(xiàn)上)的特征稱為服務(wù)之間的松耦合
軟件系統(tǒng)架構(gòu)
SOA不是一種語(yǔ)言,也不是一種具體的技術(shù),更不是一種產(chǎn)品,而是一種軟件系統(tǒng)架構(gòu),它嘗試給出在特定環(huán)境下推薦采用的一種架構(gòu)。
從這個(gè)角度上來(lái)說(shuō),它其實(shí)更像一種架構(gòu)模式(Pattern),是一種理念架構(gòu),是人們面向應(yīng)用服務(wù)的解決方案框架。
?????? 服務(wù)是一個(gè)自包含的、無(wú)狀態(tài)的實(shí)體,可以由多個(gè)組件組成。它通過(guò)事先定義的界面響應(yīng)服務(wù)請(qǐng)求。它也可以執(zhí)行諸如編輯和處理事務(wù)等離散性任務(wù)。服務(wù)本身并不依賴于其他函數(shù)和過(guò)程的狀態(tài)。用什么技術(shù)實(shí)現(xiàn)服務(wù),并不在其定義中加以限制。
?????????? 服務(wù)提供者提供符合契約的服務(wù),并將它們發(fā)布到服務(wù)代理。
??????????? 服務(wù)請(qǐng)求者也叫服務(wù)使用者,它發(fā)現(xiàn)并調(diào)用其他的軟件服務(wù)來(lái)提供商業(yè)解決方案。從概念上來(lái)說(shuō),SOA 本質(zhì)上是將網(wǎng)絡(luò)、傳輸協(xié)議和安全細(xì)節(jié)留給特定的實(shí)現(xiàn)來(lái)處理。服務(wù)請(qǐng)求者通常稱為客戶端,但是,也可以是終端用戶應(yīng)用程序或別的服務(wù)。
服務(wù)是整個(gè)SOA實(shí)現(xiàn)的核心
SOA架構(gòu)的基本元素是服務(wù),SOA 指定一組實(shí)體(服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)注冊(cè)表、服務(wù)條款、服務(wù)代理和服務(wù)契約),這些實(shí)體詳細(xì)說(shuō)明了如何提供和消費(fèi)服務(wù)。
遵循 SOA 觀點(diǎn)的系統(tǒng)必須要有服務(wù),這些服務(wù)是可互操作的、獨(dú)立的、模塊化的、位置明確的、松耦合的并且可以通過(guò)網(wǎng)絡(luò)查找其地址。
?????????? 服務(wù)代理者作為儲(chǔ)存庫(kù)、電話黃頁(yè)或票據(jù)交換所,產(chǎn)生由服務(wù)提供者發(fā)布的軟件接口。
????????? 這三種 SOA 參與者:服務(wù)提供者、服務(wù)代理者以及服務(wù)請(qǐng)求者通過(guò) 3 個(gè)基本操作:發(fā)布、查找、綁定相互作用。服務(wù)提供者向服務(wù)代理者發(fā)布服務(wù)。服務(wù)請(qǐng)求者通過(guò)服務(wù)代理者查找所需的服務(wù),并綁定到這些服務(wù)上。服務(wù)提供者和服務(wù)請(qǐng)求者之間可以交互。
??????????? 所謂服務(wù)的無(wú)狀態(tài),是指服務(wù)不依賴于任何事先設(shè)定的條件,是狀態(tài)無(wú)關(guān)的(state-free)。在SOA架構(gòu)中,一個(gè)服務(wù)不會(huì)依賴于其他服務(wù)的狀態(tài)。 它們從客戶端接受服務(wù)請(qǐng)求。因?yàn)榉?wù)是無(wú)狀態(tài)的,它們可以被編排(orchestrated)和序列化(sequenced)成多個(gè)序列 (有時(shí)還采用流水線機(jī)制) ,以執(zhí)行商業(yè)邏輯。編排指的是序列化服務(wù)并提供數(shù)據(jù)處理邏輯。但不包括數(shù)據(jù)的展現(xiàn)功能。
SOA的一些重要特征
?????????? 服務(wù)的封裝(encapsulation)。將服務(wù)封裝成用于業(yè)務(wù)流程的可重用組件的應(yīng)用程序函數(shù)。它提供信息或簡(jiǎn)化業(yè)務(wù)數(shù)據(jù)從一個(gè)有效的、一致的狀態(tài)向另一個(gè)狀態(tài)的轉(zhuǎn)變。封裝隱藏了復(fù)雜性。服務(wù)的API保持不變,使得用戶遠(yuǎn)離具體實(shí)施上的變更。
SOA的一些重要特征
?????????? 服務(wù)的重用(reuse)。服務(wù)的可重用性設(shè)計(jì)顯著地降低了成本。為了實(shí)現(xiàn)可重用性,服務(wù)只工作在特定處理過(guò)程的上下文(context)中,獨(dú)立于底層實(shí)現(xiàn)和客戶需求的變更。
SOA的一些重要特征
??????????? 服務(wù)的互操作。互操作并不是一個(gè)新概念。在CORBA、DCOM、Web Service中就已經(jīng)采用互操作技術(shù)了。在SOA中,通過(guò)服務(wù)之間既定的通信協(xié)議進(jìn)行互操作。主要有同步和異步兩種通信機(jī)制。SOA提供服務(wù)的互操作特性更利于其在多個(gè)場(chǎng)合被重用。
SOA的一些重要特征
?????????? 服務(wù)是自治的(Autonomous)功能實(shí)體。服務(wù)是由組件組成的組合模塊,是自包含和模塊化的。
SOA的一些重要特征
?????????? SOA非常強(qiáng)調(diào)架構(gòu)中提供服務(wù)的功能實(shí)體的完全獨(dú)立自主的能力。傳統(tǒng)的組件技術(shù),都需要有一個(gè)宿主(Host或者Server)來(lái)存放和管理這些功能實(shí)體;當(dāng)這些宿主運(yùn)行結(jié)束時(shí)這些組件的壽命也隨之結(jié)束。這樣當(dāng)宿主本身或者其它功能部分出現(xiàn)問(wèn)題的時(shí)候,在該宿主上運(yùn)行的其它應(yīng)用服務(wù)就會(huì)受到影響。
SOA的一些重要特征
?????????? SOA架構(gòu)中非常強(qiáng)調(diào)實(shí)體自我管理和恢復(fù)能力。常見的用來(lái)進(jìn)行自我恢復(fù)的技術(shù),比如事務(wù)處理,消息隊(duì)列等在SOA中都起到至關(guān)重要的作用。
SOA的一些重要特征
?????????? 服務(wù)之間的松耦合度。服務(wù)請(qǐng)求者到服務(wù)提供者的綁定與服務(wù)之間應(yīng)該是松耦合的。這就意味著,服務(wù)請(qǐng)求者不知道提供者實(shí)現(xiàn)的技術(shù)細(xì)節(jié),比如程序設(shè)計(jì)語(yǔ)言、部署平臺(tái),等等。服務(wù)請(qǐng)求者往往通過(guò)消息調(diào)用操作,請(qǐng)求消息和響應(yīng),而不是通過(guò)使用 API 和文件格式。
SOA的一些重要特征
?????????? 松耦合使會(huì)話一端的軟件可以在不影響另一端的情況下發(fā)生改變,前提是消息模式保持不變。在一個(gè)極端的情況下,服務(wù)提供者可以將以前基于遺留代碼的實(shí)現(xiàn)完全用基于 Java 語(yǔ)言的新代碼取代,同時(shí)又不對(duì)服務(wù)請(qǐng)求者造成任何影響。這種情況是真實(shí)的,只要新代碼支持相同的通信協(xié)議。
SOA的一些重要特征
???????? 服務(wù)是位置透明的。服務(wù)是針對(duì)業(yè)務(wù)需求設(shè)計(jì)的,需要反應(yīng)需求的變化,即所謂敏捷設(shè)計(jì)。要想真正實(shí)現(xiàn)業(yè)務(wù)與服務(wù)的分離。就必須使得服務(wù)的設(shè)計(jì)和部署對(duì)用戶來(lái)說(shuō)是完全透明的。也就是說(shuō),用戶完全不必知道響應(yīng)自己需求的服務(wù)的位置,甚至不必知道具體是哪個(gè)服務(wù)參與了響應(yīng)。
抽象級(jí)別1:操作
?????????? 代表單個(gè)邏輯工作單元的事務(wù)。執(zhí)行操作通常會(huì)導(dǎo)致讀、寫或修改一個(gè)或多個(gè)持久性數(shù)據(jù)。SOA 操作可以直接與面向?qū)ο蟮姆椒ㄏ啾取K鼈兌加刑囟ǖ慕Y(jié)構(gòu)化接口,并且返回結(jié)構(gòu)化的響應(yīng)。完全同方法一樣,特定操作的執(zhí)行可能涉及調(diào)用附加的操作。
抽象級(jí)別2:服務(wù)
?????????? 代表操作的邏輯分組。服務(wù)可以分層,以降低耦合度和復(fù)雜性。一個(gè)服務(wù)的粒度大小也與系統(tǒng)的性能息息相關(guān)。粒度太小,會(huì)增加服務(wù)間互操作通訊的開銷;粒度太大,又會(huì)影響服務(wù)面對(duì)需求變化的敏捷性。
抽象級(jí)別3:業(yè)務(wù)流程
?????????? 為實(shí)現(xiàn)特定業(yè)務(wù)目標(biāo)而執(zhí)行的一組長(zhǎng)期運(yùn)行的動(dòng)作或活動(dòng)。業(yè)務(wù)流程通常包括多個(gè)業(yè)務(wù)調(diào)用。
業(yè)務(wù)流程
?????????? 在SOA中,業(yè)務(wù)流程包括依據(jù)一組業(yè)務(wù)規(guī)則按照有序序列執(zhí)行的一系列操作。操作的排序、選擇和執(zhí)行稱為服務(wù)或流程編排。典型的情況是調(diào)用已編排服務(wù)來(lái)響應(yīng)業(yè)務(wù)事件。從建模的觀點(diǎn)來(lái)看,描述設(shè)計(jì)良好的操作、服務(wù)和流程抽象的特征以及系統(tǒng)地構(gòu)造它們是重要的。