為什麼SO有意義
開發者和架構師經常問我, “為什麼我們需要面向服務?”我的回答很簡單 :可伸縮性、維護性、互操作性和靈活性。過去,分布式組件技術像COM緊緊地 把所有的組件綁定到一起。最低限度上,這些分布式技術必須分享公共類型系統 ,並且常常是一個運行時。有了這些依賴,升級和軟件升級變得復雜、費時和費 力的。面向服務的應用系統,恰恰相反,不需要相同類型的依賴,因此顯示出更 加適合企業精算需求的行為。
版本升級
應用系統的需求會隨著時間的變化而變化。這個問題從計算機出現的時候就 一只存在,而且並沒有任何跡象表明這個行為會在將來減慢。開發者、架構師和 項目經理已經付出了巨大的努力到軟件開發過程的中去,希望能夠調節和控制應 用系統變化的數量和步驟。在整個應用系統的聲明周期裡,開發過程裡的一些設 想將會證明是徒勞的。某些情況下,最後集成應用系統的改變將會導致一系列級 聯的其它應用系統部分的改變。自治的、邊界清晰的、基於契約的面向服務的應 用提供了幾層封裝來緩沖這些系統部分版本升級帶來的影響。在面向服務的應用 系統裡,消息發送者和接收者之間的唯一協定就是契約。兩者都可以根據自己的 期望自由改變自己的實現,只要保持契約不變。這些同樣適用於組件架構,面向 服務契約的普遍自然屬性把發送者和接收者從實現中解耦,因此使得版本升級周 期變短。面向服務並沒有去掉了一個好的版本化升級過程的需求。
負載均衡
每個應用都有一些瓶頸,優勢這些瓶頸可能阻止一個應用為了增加吞吐量需 求而進行的擴展。
圖2-4:一個傳統的面向組件的應用
在這個場景裡,數據檢索或許成為性能瓶頸。如果真是這個情況,一種擴展 組件驅動的Web網站的方式如圖2-5所示。
圖2-5:伸縮一個組件應用
本質上,我們可以在另外的服務器上重新創建整個Web應用,使用負載均衡器 去重定向請求到不是很忙的Web服務器上。這個類型的伸縮性在過去證明是很有 效的,但是卻效率低下和成本過高,並且產生配置問題,尤其是版本升級的時候 。
擴展訂單處理系統的一個面向服務的方法在圖2-5裡,例子在圖2-6裡。
圖2-6:使用服務
面向服務的應用可以更容易地收縮應用系統需要變化的部分。這減少了總的 成本和簡化了配置管理。
平台隨時改變
平台變化,隨著時間的過去,有時候會很快。這個確實在任何廠商的平台裡 存在,像補丁和服務包,並且平台的新版本經常發布。對於分布式組件,會經常 有一個平台組件運行時的依賴。比如,一個系統架構師如何知道一個DCOM 組件 能夠在Microsoft Windows Server 2000、Windows Professional 2000、 Windows XP或者 Windows Server 2003上行為一致?因為一個DCOM組件依賴於每 個系統的組件運行時,許多測試場景看起來無中生有。當你開始思考測試每個可 能的配置、服務包和熱補丁的時候,你也許會緊張的直流鼻血。
當應用變為面向服務的時候許多這些問題消失了。這個很大程度上因為使用 了平台獨立的XML 語法來表示消息契約。這個契約把發送者和接受者解耦。發送 者就是遵守契約產生和發送消息,而接受者就是接受和處理消息。不需要序列化 平台規范到消息裡,所以終結點可以不受他們關注的平台版本更新的影響。進一 步說,測試更簡單,因為終結點必須測試的只是一個清晰的服務邊界。
基於內容的路由
過去,面向服務的消息在面臨路由場景的時候一直非常困難。為了演示,圍 繞我們的訂單處理例子我們可以建立一些商業規則:
訂單可以訂購新商品和維修現有商品。
新商品的訂單會發送給制造管理系統
維修訂單會發送到維修管理系統
兩個訂單,在發送給最終目標系統以前必須發送到財務系統和調度系統。
面向服務的消息應用系統非常好地適應了這些類型的需求。本質上,路由的 信息可以放置到消息頭裡,被終結點用來判斷消息路徑。
端到端的安全
許多分布式系統在傳輸級別通過點對點方式保證通信安全。傳輸是安全的, 但是被傳輸的數據在傳輸結束以後也許就不安全了。日志文件和其它審核機制經 常包含傳輸時保護的信息,結果,他們經常成為許多安全攻擊的目標。可以使用 標准的XML安全機制通過面向服務的消息來提供端到端的安全。即使消息被持久 化到日志文件或者被破解攻擊,如果消息使用標准的XML安全機制加密,消息裡 的數據是可以保證機密的。
互操作性
當一個初始發送者發送消息給一個最終接受者時,初始發送者不需要依賴最 終接受者運行的平台。如你看到的二進制消息編碼,沒有恆定不變的情況。一些 消息格式能夠引入平台依賴,但是這個是選擇的問題。在純正意義上,面向服務 的應用系統式平台獨立的。平台獨立是XML語法表述消息契約的普遍本性。真的 可能(不是理論上)是發送一個消息給一個終結點而不知道它所運行的平台。這 與生意人和管理人員產生了共鳴,因為它不需要用一個單一平台的一個同質應用 的集合來取代現有的應用系統。
本章小結
本章闡述了面向服務的動機,和面向服務系統的一些基本概念。面向服務需 要專注於應用發送、接受和處理的消息上。面向服務的系統能夠取代以前傳輸的 功能,並且把他們放到一個消息結構裡(地址,安全信息,相關信息等等)。專 注於消息使其能夠獨立於平台、硬件和運行時環境。我的觀點,面向服務應用的 版本彈性是IT組織最大的勝利,因為系統級別的升級是最貴的維護部分之一。下 一章,我們會看一些構建高級消息應用系統的不同的方式,並介紹一些必備概念 。