- WCF技術剖析(卷1)
- 蔣金楠
- 1650字
- 2018-12-27 11:32:32
1.1 SOA的基本概念和設計思想
近年來SOA如此火熱,在架構師研討會和論壇中永遠是討論的焦點。甚至一些軟件廠商在對SOA一知半解的情況下,也為自己的產品貼上了SOA的標簽,以此作為促銷的噱頭。SOA的火熱,反而讓人們對SOA這個本就含糊的術語更加摸不著頭腦,于是也對SOA有了一些誤解。對SOA最為典型的誤解就是:
SOA就是采用Web服務的架構
面向服務(SO:Service Orientation)代表的是一種設計理念,和面向對象(OO:Object Orientation)、面向組件(CO:Component Orientation)一樣,體現的是一種對關注點進行分解的思想,面向服務是和技術無關的。
Web服務(這里指的是廣義的Web服務,包括微軟平臺下的ASP.NET Web服務和WCF,也包含其他平臺的Web服務)是一種實現SOA最理想的技術手段。但是,如果你設計的理念還停留在COM或DCOM的層面,即使采用了Web服務來構建你的應用,也不能說你的應用是基于SOA的。另一方面,實現SOA并非只有Web服務一種手段。很多人認為面向服務架構僅僅是由若干Web服務堆砌而成,這是一個非常普遍而危險的想法。它會導致采用SOA的組織都熱衷于關注某種基于SOA的技術平臺,而忽略了對面向服務思想的把握,在我看來,這是一種本末倒置的做法。正是有了這樣的誤解,很多人采用了WCF,卻還是在按照傳統分布式架構的思想在設計他們認為是面向服務的應用。所以采用SOA多地是要求設計人員在思想上轉變觀念。
對SOA其實沒有一個統一的定義,不同的人站在不同的角度會對SOA有不同的認識。但是,不管對SOA存在怎樣的分歧,SOA的一些基本特性還是被大家普遍接受的。接下來,我們就來簡單介紹一些SOA的基本特性。
服務是自治的
服務的自治原則要求單個服務在底層邏輯控制方面盡可能是獨立和自包含的,服務不依賴于訪問它的客戶端和其他服務。服務可以獨立地進行部署及實施版本策略和安全策略。
SOA依賴于開放的標準
SOA的一個目標是讓不同廠商開發的服務能夠進行互操作,要實現這樣一個宏圖偉業,就必須依賴于一種開放的、能夠被不同的廠商普遍接受的標準。SOA采用基于消息的通信方式,從消息交換的角度來講,就是要求消息自身標準化,在此方面,SOAP消息的采用對消息承載的內容提供了一致性的表示。此外,客戶端進行服務調用的前提是對服務描述的理解,所以服務描述也需要一種標準化的表示,在此方面,SOA采用XML、XSD及WSDL作為服務描述的“語言”。
此外,當SOA真正地被用于企業級應用時,還須要考慮一些額外的因素,比如消息安全、可靠傳輸、事務的支持等。要實現真正意義上的跨平臺互操作,實現這些特性的互操作方式同樣需要通過一種開放的標準確定下來。在這方面,一些主流的IT廠商,比如微軟、IBM和BEA等聯合一些國際標準組織,比如W3C(World Wide Web Consortium:萬維網聯盟)、OASIS(Organization for the Advancement of Structured Information Standards:結構化信息標準促進組織)和WS-I(Web服務互操作性組織)等,對標準或規范的制定做出了極大的貢獻,這些標準或規范定義在WS-*規范中。
SOA支持跨平臺
能夠讓不同的平臺進行通信是SOA產生的最主要動機。正因為SOA采用了開放的標準,才使跨平臺得以實現。跨平臺性最大的好處就是促進了異質系統的集成,使J2EE平臺下的應用能夠調用.NET平臺暴露出來的WCF服務。此外,使用標準的服務對現有邏輯的封裝,實現了對歷史遺留應用的重用,也給企業提供了一種節約成本的捷徑。
SOA鼓勵創建可組合的服務
按照提供功能大小的差異,不同的服務具有不同的粒度。我們可以把提供具有最小粒度功能實現的服務稱為原子服務。多個原子服務可以通過合理的組合、編排構成一個新的聚合型服務。比如,我們把通過一系列獨立服務承載的活動(Activity),按照相應的規則進行編排構成一個聚合型的工作流(Workflow)服務。
SOA鼓勵服務的復用
功能的復用是軟件設計思想不變的主題,SOA鼓勵創建具有高復用度的服務。服務的組合性另一方面也促進了服務的重用。為了提高服務復用的程度,SOA甚至強調了創建與場景無關的服務,這樣,同一個服務就能在不同場景的解決方案中使用了。
SOA強調松耦合
基于類型系統交互方式面向組件的不同,SOA通過“契約”實現客戶端對服務的調用。雙方只須要采用能夠匹配的契約就能保證正常的交互。基于契約的服務交互,又進一步地促進了服務的自治,只要契約不發生改變,服務本身的實現就可以自由的變化。