Bagikan melalui


SOA 與 WCF 原來如此

SOA 來自 Wiki 維基百科的定義

SOA 全名為 Service Oriented Architecture; 如果您上維基百科上查詢:

A Service-oriented architecture (SOA [pronounced "sō-uh" or "es-ō-ā"]) is a software architecture that uses loosely coupled software services to support the requirements of business processes and software users… /skips

您不難發現,在維基百科中這絕對是個 IT 業中超火熱的名詞。在本次寫作中我不打算討論所有 SOA 的定義,(有興趣的朋友您可以在維基百科中 找到更多的連結,或是寫信和我,我很樂意推薦我的同事 李匡正 和您深入討論) 今天我們只希望用一個簡單的定義來看 SOA 以讓您了解到為什麼我們會認為 Windows Communication Framework (WCF) 會是 SOA 架構的軟體最佳實作技術。

我們希望在您打算深入 .NET 與 SOA 的世界時,能夠有清楚了解到 WCF 技術、並且活用於您的SOA軟體結構之中。

為什麼要說 WCF 是 SOA 最佳實作技術

維基百科的簡單定中描述到SOA是一個軟體架構,並且包含了兩個重點:”loosely coupled software service 低耦合力的軟體服務” 以及 ”business process 商業流程”。其中 business process 的概念,如果您已經學習了 Windows Workflows Foundation (WF) 或是 BizTalk 等相關的技術概念,您不難了解這裡的 business process 概念最佳演化會是在對應的技術與平台層級上。本文的撰寫中並不會針對 WF 技術或是 BizTalk 做描述,這一次我們只針對服務

那麼什麼是鬆散偶合力的軟體服務呢?這裡我們要再拆解出兩個獨立的名詞,”鬆散偶合力” 以及 “軟體服務”;在 SOA 的情境下,軟體元件可以分為服務的提供者以及服務的消費者,消費者能夠自由的消費他想要的軟體服務,並且可以自由的轉換服務的提供者。

或許您可以想像,您想要的是買一杯清涼解渴的紅茶;7-11、 全家便利、甚至是巷口的乾杯都提供了相關的服務;您可以照您心情喜好自由選擇紅茶的提供者。

“消費者與服務提供者間的自由轉換” 是個理想,特別是針對資訊軟體來說,這裡有太多實作上的細節需要被考量到:”服務描述”、”平台交換的訊息”、”交易與安全”、”可靠穩定性”、”服務版本”…. 等。

了解 ABC

WCF 軟體技術在創作時,一開始就是希望解決這個問題空間,讓我們先看看 WCF 技術的核心概念:ABC。

在 WCF 的設計中,服務的提供者透過Address的定義描述到服務的絕對定址;透過Contract來描述到提供的服務內容;最後透過Binding來描述到服務內容的提供方式。

7-11提供了”沖洗照片的服務 (Contract)”;現在我想要到”吳興街281巷口 (Address)”那間 7-11 沖洗相片,所以我自己靠自己走過去請”櫃台人員收件 (Binding)”幫我沖洗我家小美女的照片。但我家的太太,她一樣要到同一家7-11(相同的 Address)去沖洗照片(相同的 Contract)可是她卻透過7-11提供的網站服務(不同的Binding方式)直接傳送照片沖洗;

透過 ABC 的架構,軟體元件所提供的服務可以多元的定義;您的訂單服務可以被 WCF 技術加值為支援 Web Service、支援 MSMQ、支援 TCP 甚至是WS-* 的溝通協定。

WCF鬆散偶合力與版本架構

另一個 WCF 的設計重點是,WCF技術內建了服務與合約的版本相容性架構;想像一個 SOA 的情境:服務的提供者已經將服務的合約升級為 2.0 的版本;在過去的軟體技術中;所有服務的消費端都必須要更新所有服務的合約 (重新 Link 並且 Compiler ),這是很不合理的!WCF 現在提供了一個版本相容的設計方式;

上例中,您可以清楚看到,透過標籤註記,軟體資訊服務提供者的資料合約(DataContract) 已經是 2.0 的版本,但對於已經在使用該服務的所有服務的消費者(Client 端),並不需要重新更新系統 (重新 Link & Compiler 完全不需要)。

效能

SOA 是架構在一個基礎的供需原則之下,因為要滿足不同的平台與服務協定標準等;很多時候效能會是一個服務成功的重要因素,在過去很多人會討論到,如果透過標準的Web Service 的通訊協定進行溝通,系統的效能實在不好;WCF 為了追求更高的服務品質,重新打造了更好的設計模型與序列化串流機制,您可以看見全新的比較數據如下:

您可以發現,既使是套用了安全性規範,WCF 仍比過去的 ASMX / WSE 的效能提升了數倍之多。

可靠度

在分散式的 SOA 服務世界裡,可靠度需要仰賴 Queue機制;透過Queue機制,您可以確保您的訊息可以安全可靠的被傳送到服務的提供者端;WCF設計階段中直接提供了 MSMQ 的整合 (Binding to MSMQ);這讓整個SOA實作過程中;減少了為了處理 Queue 機制所必須額外付出的軟體開發時間;

其中知名軟體顧問與作家 Juval Lowy 在這個2007年二月份的 MSDN 雜誌中有一篇精闢的 WCF 與 Queue 系統實作:

更是值得反覆閱讀的活用與實作好文章。

安全性

有人說安全性是 SOA 上最重要的一個環節,如果不夠安全不論平台再如何完善,您的服務交易是完全沒有保障的;而嚴格來說,WCF 幾乎包含了所有現今的安全標準實作,為了相容於目前的主流安全架構,WCF 實作了 WS-* 的所有安全規格;提供與 Windows、Kerberos、X.509、HTTPS等安全規範。除此之外,如果您喜歡 如ASP.NET Role-Base安全性的架構,WCF 也提供了進階的 ACL Principal模型,讓您可以進階剖基您的服務安全性。

您若是對於WCF 安全架構需要進一步了解,建議您上 MSDN Magazine 查欣賞 Keith Brown的著作 “Security in Windows Communication Foundation”

https://msdn.microsoft.com/msdnmag/issues/06/08/SecurityBriefs/

或是 Michele Leroux 在 CoDx 上的精闢介紹 “Fundamental of WCF Security ”

https://www.code-magazine.com/articleprint.aspx?quickid=0611051&printmode=true

管理

在SOA 這種分散式的系統環境下,訊息的管理與追蹤是非常重要的議題;過去的軟體實作技術:Remoting 或是 ASMX 一直沒有提供一個好的管理基礎;WCF 則是內建了強大的訊息追蹤與管理架構。

上圖中的工具是 SDK所提供的小工具,重點在這個小工具能夠收集 WCF 內建的 Logging & Tracing 訊息,分析與剖析分散式節點之間的訊息。對於大型企業來說,這個小工具也許還不是很足夠;但是您已經看見到一個新的可能性:資料已經具備,需要的只是更高整合度的管理工具。

另一個特點是;在 WCF 技術細節上有許多的設計定義根本上就脫離了程式語言本身,回到我們最初談到的 ABC 概念;除了 Contract 本身是透過 .NET 程式碼組件裡頭所定義的;Address 與 Binding 等資訊根本上就不是軟體設計師在設計階段就 “Hard-Code” 進入程式碼的;事實上這種設計是相當優雅合理的,因為軟體設計師根本上就沒有必要是先決定死服務最終在企業內是透過 HTTP 還是 WS-* 做為 Binding 的呈現;在 WCF 技術中,您會發現到處充滿了 XML 描述的 ABC 定義模型。

結論

WCF 是微軟 SOA 架構中的重要堆疊;提供彈性管理的空間同時也帶來更好的基礎架構;希望能藉由本篇短文讓您了解到 WCF 與 SOA 的相輔相成。