SOA是英文Service-Oriented Architecture,即面向服務(wù)架構(gòu)的縮寫(xiě)。
下面是SOA的一個(gè)定義:SOA是指為了解決在Internet環(huán)境下業(yè)務(wù)集成的需要,通過(guò)連接能完成特定任務(wù)的獨(dú)立功能實(shí)體實(shí)現(xiàn)的一種 軟件系統(tǒng)架構(gòu)。從這個(gè)定義中我們可以看出:
1) 軟件系統(tǒng)架構(gòu):SOA不是一種語(yǔ)言,也不是一種具體的技術(shù)而是一種軟件系統(tǒng)架構(gòu),它嘗試給出在特定環(huán)境下推薦采用的一種架構(gòu),從這 個(gè)角度上來(lái)說(shuō),它更像一種模式(Pattern)。因此它與很多已有的軟件技術(shù)比如面向?qū)ο蠹夹g(shù),是互補(bǔ)的而非互斥的。它們分別面向不同的應(yīng)用 場(chǎng)景,用來(lái)滿足不同的特定需求。
2) SOA的使用范圍:需求決定同時(shí)也限制功能。SOA并不是包治百病的萬(wàn)靈丹,它最主要的應(yīng)用場(chǎng)合在于解決在Internet環(huán)境下的不同商業(yè) 應(yīng)用之間的業(yè)務(wù)集成問(wèn)題。在下面我們會(huì)詳細(xì)討論Internet的各種特點(diǎn)如何決定SOA的特點(diǎn),這里我們只需要先簡(jiǎn)單回顧一下Internet環(huán)境區(qū)別 于Intranet環(huán)境的幾個(gè)特點(diǎn):
a) 大量異構(gòu)系統(tǒng)并存,計(jì)算機(jī)硬件工作方式不同,操作系統(tǒng)不同、編程語(yǔ)言也不同;
b) 大量、頻繁的數(shù)據(jù)傳輸仍然速度緩慢并且不穩(wěn)定;
c) 版本升級(jí)無(wú)法完成,我們根本就無(wú)法知道互聯(lián)網(wǎng)上有哪些機(jī)器直接或者間接的使用某個(gè)服務(wù)。
基于上面的前提,下面就讓我們一起看一下SOA的基本特征。
SOA三大基本特征 :
1 獨(dú)立的功能實(shí)體
在Internet這樣松散的使用環(huán)境中,任何訪問(wèn)請(qǐng)求都有可能出錯(cuò),因此任何企圖通過(guò)Internet進(jìn)行控制的結(jié)構(gòu)都會(huì)面臨嚴(yán)重的穩(wěn)定性問(wèn)題。 SOA非常強(qiáng)調(diào)架構(gòu)中提供服務(wù)的功能實(shí)體的完全獨(dú)立自主的能力。傳統(tǒng)的組件技術(shù),如.NET Remoting,EJB,COM或者CORBA,都需要有一個(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架構(gòu)中非常強(qiáng)調(diào)實(shí)體自我管理和恢復(fù)能力。常見(jiàn)的用來(lái)進(jìn)行自我恢復(fù)的技術(shù),比如事務(wù)處理(Transaction),消息隊(duì)列(Message Queue) ,冗余部署(Redundant Deployment)和集群系統(tǒng)(Cluster)在SOA中都起到至關(guān)重要的作用。
2 大數(shù)據(jù)量低頻率訪問(wèn)
對(duì)于.NET Remoting,EJB或者XML-RPC這些傳統(tǒng)的分布式計(jì)算模型而言,他們的服務(wù)提供都是通過(guò)函數(shù)調(diào)用的方式進(jìn)行的,一個(gè)功能的完成 往往需要通過(guò)客戶端和服務(wù)器來(lái)回很多次函數(shù)調(diào)用才能完成。在Intranet的環(huán)境下,這些調(diào)用給系統(tǒng)的響應(yīng)速度和穩(wěn)定性帶來(lái)的影響都可以忽 略不計(jì),但是在Internet環(huán)境下這些因素往往是決定整個(gè)系統(tǒng)是否能正常工作的一個(gè)關(guān)鍵決定因素。因此SOA系統(tǒng)推薦采用大數(shù)據(jù)量的方式一次性進(jìn)行信息交換。
3 基于文本的消息傳遞
由于Internet中大量異構(gòu)系統(tǒng)的存在決定了SOA系統(tǒng)必須采用基于文本而非二進(jìn)制的消息傳遞方式。在COM、CORBA這些傳統(tǒng)的組件模型中, 從服務(wù)器端傳往客戶端的是一個(gè)二進(jìn)制編碼的對(duì)象,在客戶端通過(guò)調(diào)用這個(gè)對(duì)象的方法來(lái)完成某些功能;但是在Internet環(huán)境下,不同語(yǔ)言, 不同平臺(tái)對(duì)數(shù)據(jù)、甚至是一些基本數(shù)據(jù)類(lèi)型定義不同,給不同的服務(wù)之間傳遞對(duì)象帶來(lái)的很大困難。由于基于文本的消息本身是不包含任何處理邏輯和數(shù)據(jù)類(lèi)型的,因此服務(wù)間只傳遞文本,對(duì)數(shù)據(jù)的處理依賴于接收端的方式可以幫忙繞過(guò)兼容性這個(gè)的大泥坑。
此外,對(duì)于一個(gè)服務(wù)來(lái)說(shuō),Internet與局域網(wǎng)最大的一個(gè)區(qū)別就是在Internet上的版本管理極其困難,傳統(tǒng)軟件采用的升級(jí)方式在這種松散 的分布式環(huán)境中幾乎無(wú)法進(jìn)行。采用基于文本的消息傳遞方式,數(shù)據(jù)處理端可以只選擇性的處理自己理解的那部分?jǐn)?shù)據(jù),而忽略其它的數(shù)據(jù), 從而得到的非常理想的兼容性。
HTTP協(xié)議就是一個(gè)非常典型的 SOA架構(gòu)設(shè)計(jì)。HTTP協(xié)議的工作過(guò)程簡(jiǎn)單敘述如下:客戶端,通常是通過(guò)瀏覽器,向服務(wù)器端以文本的方式發(fā)送一個(gè)請(qǐng)求,索取一個(gè)Web頁(yè)面。
更多詳細(xì)資料參看《下一代軟件架構(gòu)--SOA》