什么是SOA?
“面向服務(wù)的架構(gòu)”表達了一種軟件架構(gòu)的概念,它定義為使用服務(wù)來滿足軟件用戶的需求。在SOA環(huán)境中,網(wǎng)絡(luò)上的節(jié)點以獨立服務(wù)的形式將自己的資源開放給網(wǎng)絡(luò)上其他參與者,其他參與者按照一種標準的方法使用資源。
SOA不是一種具體的架構(gòu),它是能夠?qū)С瞿撤N具體架構(gòu)的東西。你可以將它叫做一種風(fēng)格、范式、概念、觀點、哲學(xué)、或者表示法。這也意味著SOA不是一種可以買到的具體工具或框架。它是一種說法,是一種思考方式,是個價值體系。
為什么SOA?
要理解為什么需要SOA,就必要理解大型分布式系統(tǒng)的特點:
1. 大型系統(tǒng)必須能夠處理老系統(tǒng)(引入SOA時,你很難從頭開始設(shè)計)
2. 大型系統(tǒng)天生就是異質(zhì)的。他們目的不同,時間各異,新舊程度相差懸殊;大型系統(tǒng)堆積了不同平臺,不同的語言,不同的編程范式。
3. 異質(zhì)性的一大原因是因為大型系統(tǒng)和它們的數(shù)據(jù)有非常長的生命周期。在這個過程中,它們不斷加入新的系統(tǒng)和流程,開發(fā)新的業(yè)務(wù)功能。
4. 大型系統(tǒng)天生是復(fù)雜的。而且,人類處理復(fù)雜問題的能力也是有限的,通常采取的方法就是分解。
5. 所有者各異。不同的團隊、部門、分支機構(gòu)或公司都可能在維護系統(tǒng)
6. 冗余度。
面對大型系統(tǒng),SOA接受異質(zhì)的,SOA正是靠對異質(zhì)性的承認和支持來處理大系統(tǒng)的。過去人們提出了許許多多的方法,試圖消除異質(zhì)性,解決集成分布式系統(tǒng)碰到的問題。比如,“把所有系統(tǒng)都換成J2EE應(yīng)用”、“不管哪兒都用CORBA”,“用MQ Sevce“,然而,這些方法都不行,大型系統(tǒng)天生就是異質(zhì)的,這是事實。也是我們設(shè)計大型分布式方案時必須接受的前提。
SOA是新東西么?
SOA沒有任何新發(fā)明的東西,它是個把現(xiàn)有概念和實踐放到一起,用于特定需求的范式。
SOA的改進之一可能體現(xiàn)在如下一點:Web Service引入了一個互操作性的新標準。
SOA另一個重要的方面是對異質(zhì)性的接受。這一點體現(xiàn)了SOA是一個革命性的方法,不同于以前經(jīng)??吹降臇|西哦,過去,相當多的解決方法都是基于同質(zhì)化想法,然而,只要系統(tǒng)超過一定的規(guī)模,同質(zhì)化就不可能。同質(zhì)化也無法伸縮,這意味著任何要求同質(zhì)化的方法遲早會失敗。(類似于敏捷編程接受需求不斷變更的事實,而不是力圖與這個事實抗爭)。
核心是什么?
我們已經(jīng)知道了SOA是一個范式,目的是實現(xiàn)和維護跨越了大型分布式系統(tǒng)的業(yè)務(wù)流程。那么它的核心是什么?
l 服務(wù)
軟件開發(fā)的藝術(shù)就是關(guān)于抽象的藝術(shù)。抽象可以從不同的角度進行。SOA的抽象集中在問題的業(yè)務(wù)角度。與業(yè)務(wù)相對應(yīng)的SOA概念就是“服務(wù)“。本質(zhì)上,服務(wù)就是業(yè)務(wù)功能的IT體現(xiàn)。SOA的目標就是基于業(yè)務(wù)規(guī)則和功能的抽象來構(gòu)筑大型分布式系統(tǒng)。我們可以把服務(wù)當做自足的業(yè)務(wù)功能的IT體現(xiàn),比如”創(chuàng)造一個客戶“,“轉(zhuǎn)賬”,“打開收音機”,“計算汽車的最佳路線”等。
l 互操作性
處理異質(zhì)系統(tǒng)時,第一個目標就是能輕松的連接系統(tǒng)。這通常被稱為“高互操作性”。雖然,高互操作性不是什么新點子,之前“企業(yè)應(yīng)用集成”EAI就有這樣的概念。但是,高互操作性和SOA得開始而非結(jié)束。從這個基礎(chǔ)出發(fā),實現(xiàn)跨越多個分布式系統(tǒng)的業(yè)務(wù)功能。
l 松耦合
| 緊耦合 | 松耦合 |
物理連接 | 點對點 | 通過中介者 |
通信風(fēng)格 | 同步 | 異步 |
數(shù)據(jù)模型 | 公共復(fù)雜類型 | 只是簡單的公共類型 |
類型系統(tǒng) | 強 | 弱 |
交互模式 | 通過復(fù)雜的對象樹導(dǎo)航 | 以數(shù)據(jù)為中心、自足的消息 |
業(yè)務(wù)邏輯控制 | 集中控制 | 分布式控制 |
綁定方式 | 靜態(tài) | 動態(tài) |
平臺 | 強平臺依賴 | 平臺無關(guān) |
事務(wù)性 | 2PC(兩階段提交) | 補償 |
部署 | 同時進行 | 非同時進行 |
版本劃分 | 顯示升級 | 隱式升級 |
SOA要素
我們已經(jīng)知道了SOA的關(guān)鍵技術(shù)概念是:服務(wù)、互操作性和松耦合。那么建立SOA所需要做的就是要引入服務(wù)、互操作性和松耦合。
但是SOA是買不來的,重要的是以合適的方式引入這些概念。這里面有一些要素,包括基礎(chǔ)設(shè)施、架構(gòu)以以及流程。
l 基礎(chǔ)設(shè)施(ESB)
基礎(chǔ)設(shè)施使SOA高操作性成為可能的技術(shù)部分。SOA范疇的基礎(chǔ)設(shè)施被稱為“企業(yè)服務(wù)總線”(ESB)。
ESB的關(guān)鍵業(yè)一點,它能使得在異質(zhì)系統(tǒng)間進行服務(wù)調(diào)用。他的職責包括數(shù)據(jù)轉(zhuǎn)化、(智能)路由、處理安全和可靠性、服務(wù)管理、監(jiān)測、以及日志。
l 架構(gòu)
l 流程
大型系統(tǒng)牽涉了許多不同的人和組織。因為通常并不由一個人或少數(shù)人控制著所有一切,所以必須建立起適當?shù)倪^程。這些過程包括:
業(yè)務(wù)過程建模(BPM)
服務(wù)生命周期
模型驅(qū)動的軟件開發(fā)
l 監(jiān)管
建立起一個大型的SOA項目,你需要處理不同的組織結(jié)構(gòu),所以理解、監(jiān)管、管理支持和專研是SOA成功的關(guān)鍵因素。
SOA與WEB Service
許多SOA定義都包括Web Service這個術(shù)語。但是,SOA與Web Service不一樣,SOA是個范式;Web Service是運用特定實現(xiàn)策略,實現(xiàn)基礎(chǔ)設(shè)施的可能方法。
REST表述性狀態(tài)轉(zhuǎn)移:最近,它常被人稱為Web Service的替代品,它指的是一個網(wǎng)絡(luò)架構(gòu)原則的集合,聚焦于對資源進行簡單和無狀態(tài)訪問。RESTful HTTP使用4個基礎(chǔ)HTTP方法:GET/PUT/POST/DELETE,對由URL標識出的資源進行無狀態(tài)的讀、寫、創(chuàng)建/執(zhí)行和刪除、這種對HTTP協(xié)議的自然運用既簡單又迅速,并且包含了對諸如緩存這樣的典型需求的內(nèi)生技術(shù)支持、所以,對于訪問服務(wù)器提供的數(shù)據(jù)或資源來說,這可能是一個很好的方法。
然而,它缺乏對安全性考量。非功能性特性、可組合性的支持,再加上全面鋪開的。復(fù)雜的SOA基礎(chǔ)設(shè)施有流程服務(wù)、配置、某些場景下讀取與寫于服務(wù)還有不同的粒度,所以,它很難被用作SOA的核心協(xié)議。
如果只是想向外部系統(tǒng)提供對數(shù)據(jù)資源的訪問,REST絕對是應(yīng)該考慮的原則或技術(shù),但是,如果計劃建立一個運行分布式業(yè)務(wù)流程的SOA景觀,REST還不是一個可選項。
在很多場合的交流中,常常遇到把SOA和Web Service混用的情況,所以想在這次的Blog里,結(jié)合網(wǎng)上的各種觀點,談?wù)剛€人對兩個概念的理解。用一句話來概括基本的觀點就是“SOA不是Web Service,Web Service是目前最適合實現(xiàn)SOA的技術(shù)”。 之所以SOA和Web Service被混為一談,最可能的原因了也就在于此吧。
早在1996年Gartner就前瞻性地提出了面向服務(wù)架構(gòu)的思想(SOA),該年赫赫有名的Netscape才發(fā)布了Navigator 2.0,整個互聯(lián)網(wǎng)剛剛慶祝超過500,000網(wǎng)站的誕生,網(wǎng)絡(luò)上的商業(yè)應(yīng)用還是鳳毛麟角,Web Service不知為何物,SOA還只是束之高閣的理論概念。直到2000年以后,W3C才成立了相關(guān)的委員會,開始討論Web Service的相關(guān)標準;各大廠商一邊積極參與標準制定,一邊推出了一系列實實在在的產(chǎn)品。新的技術(shù)和新的產(chǎn)品出現(xiàn),SOA找到了可以依托的憑借。隨著Web Service技術(shù)的推出和應(yīng)用,SOA的思想被一個個效益顯著的信息系統(tǒng)建設(shè)項目不斷的示范,才逐漸成為現(xiàn)今的熱門話題。類似的情況讓人聯(lián)想到愛因斯坦提出來的理論,著名的質(zhì)量能量轉(zhuǎn)化等式E=mc2,直到人們掌握了核子裂變技術(shù),才成功生產(chǎn)出了原子彈,向世人展示了這個理論等式的巨大威力。
因為現(xiàn)在幾乎所有的SOA應(yīng)用場合都是和Web Service綁定的,所以不免有時候這兩個概念混用。不可否認Web Service是現(xiàn)在最適合實現(xiàn)SOA的技術(shù),SOA的走紅在很大程度上歸功于Web Service標準的成熟和應(yīng)用普及。因為現(xiàn)在大家基本上認同Web Service技術(shù)在幾方面體現(xiàn)了SOA的需要:
首先是基于標準訪問的獨立功能實體滿足了松耦合要求:在Web Service中所有的訪問都通過SOAP訪問進行,用WSDL定義的接口封裝,通過UDDI進行目錄查找,可以動態(tài)改變一個服務(wù)的提供方而無需影響客戶端的配置,外界客戶端是根本不關(guān)心訪問服務(wù)器端的實現(xiàn)。
其次,適合大數(shù)據(jù)量低頻率訪問符合服務(wù)大顆粒度功能:基于性能和效率平衡的要求,SOA的服務(wù)提供的是大顆粒度的應(yīng)用功能,而且跨系統(tǒng)邊界的訪問頻率也不會象程序間函數(shù)調(diào)用那么頻繁。通過使用WSDL和基于文本(Literal)的SOAP請求,可以實現(xiàn)能一次性接收處理大量數(shù)據(jù)。
最后,基于標準的文本消息傳遞為異構(gòu)系統(tǒng)提供通訊機制:Web Service所有的通訊是通過SOAP進行的,而SOAP是基于XML的,XML是結(jié)構(gòu)化的文本消息。從最早的EDI開始,文本消息也許是異構(gòu)系統(tǒng)間通訊最好的消息格式,適用于SOA強調(diào)的服務(wù)對異構(gòu)后天宿主系統(tǒng)的透明性。
綜合上述觀點,Web Service不愧為當前SOA的最好選擇。然而,就SOA思想本身而言,并不一定要局限于Web Service方式的實現(xiàn)。更應(yīng)該看到的是SOA本身強調(diào)的是實現(xiàn)業(yè)務(wù)邏輯的敏捷性要求,是從業(yè)務(wù)應(yīng)用角度對信息系統(tǒng)實現(xiàn)和應(yīng)用的抽象。隨著人們認識的提高,還會有新技術(shù)不斷的發(fā)明出來,更好的來滿足這個要求。就好像在核子裂變之后,人們又發(fā)現(xiàn)了威力更加強大的核子聚變。為了要有一個更高的角度來看待問題,SOA和Web Service還是不應(yīng)該混為一談。