SOA(面向服務框架)

Web服務(Web Services)在不少人眼裏仍是個十分神祕的概念,究其根源,我想主要是因爲Web服務被宣傳得不少,但實際應用卻鮮見,給人一種很複雜和難以理解的感受。另外,Web服務是基於XML的,很多人對XML自己也缺少理解,雖然他們可能天天都在寫XML格式的配置文件。 提到Web服務的起源就必定要先說一說SOA(面向服務的體系結構),和不少具備劃時代意義的軟件技術同樣,SOA的出現根本上也是爲了解決軟件危機問題。作過項目的人都有過這種感覺,隨着項目推動,模塊之間關係愈來愈緊密,任何一個小的修改均可能引發整個系統的不穩定,而客戶需求恰恰老是在改變,結果是項目以差很少失敗的結果了結。 從(分佈式)軟件發展的趨勢來看,C/S->B/S->SOA,模塊之間的耦合度是由緊密到鬆散的,鬆散的耦合有利於修改。咱們常說的各類設計模式,其中大部分不也是爲了下降類之間的耦合度嗎。 這裏我引用一下IBM網站上對SOA的定義:面向服務的體系結構(service-oriented architecture)是一個組件模型,它將應用程序的不一樣功能單元(稱爲服務)經過這些服務之間定義良好的接口和契約聯繫起來。接口是採用中立的方式進行定義的,它應該獨立於實現服務的硬件平臺、操做系統和編程語言。這使得構建在各類這樣的系統中的服務能夠以一種統一和通用的方式進行交互。(全文) 說得通俗一點就是,系統中分爲三種角色:服務提供者、服務使用者和註冊中心,提供者發佈服務到註冊中心,使用者經過註冊中心發現所需服務,而後與該服務的提供者綁定,並調用服務。 那麼Web服務和SOA是什麼關係呢,能夠這樣說,Web服務是SOA的一種實現,有點像Tomcat和JSP/Servlet規範的關係。SOA是一個比較虛的概念,例如它只提出定義一些接口和協議,那麼這些東西具體應該怎樣定義呢,Web服務就將它們具體化了:Web服務使用的協議都是基於XML的;SOA只說應該有三種角色,而Web服務裏這三種角色都有具體的實現方式。看到這裏你應該會問,那麼SOA還有哪些實現呢?CORBA、DCOM和J2EE均可以算是,但我認爲它們不能算很純粹,至少它們並不都具備中立的協議。 如今該用一個具體的例子來講明一下Web服務了,假設咱們的系統中須要一項功能是查詢當地的天氣狀況(世界時間、貨幣匯率等等,都同樣),顯然咱們不會本身作一個從氣象部門數據庫中查找數據的程序,這須要不少手續也沒有必要,更要命的是,這樣作會增長咱們與氣象部門的耦合度。試想某一天氣象部門的數據庫結構改變了,咱們將不得不修改本身的代碼,若是他們忘記通知咱們這一改變,想象一下客戶會看到什麼? 爲了利用Web服務,咱們從某一註冊中心查找和天氣有關的服務,在結果中也許咱們會選擇收費較低,或者收費稍高但更穩定和準確的服務。從註冊中心咱們可以獲得所選服務的完整描述,其中包含了各類數據類型和調用方式,利用這些信息,可使用工具生成這些必要的類,以及客戶端Stub,利用這個Stub就能夠調用遠程的Web服務了。在咱們的例子中,調用後服務提供者會返回一個含有結果的消息,在咱們的系統中能夠從這個消息裏獲得所要的結果,並顯示給客戶。這樣就造成一個完整的Web服務調用。這種調用方式被稱爲靜態調用,由於在Stub裏服務提供者的地址(被稱爲調用端點endpoint)是寫定的,還有另一種方式被稱爲動態調用,之後會講到。 那麼Web服務和之前的RPC(遠程過程調用)有什麼分別呢?RPC一般要求調用者和被調用者是同構的,即便用一樣的語言編寫,而Web服務沒有這個要求(訣竅在於使用了XML封裝消息),這就大大增長了靈活程度;另外,Web服務的調用除這種相似RPC的方式外,還能夠是基於消息的方式,服務使用者能夠只接收消息,或是隻發送消息,在一些應用中這種方式十分有用。 內容總結一下就是:Web服務是SOA的實現,Web服務不是RPC。
相關文章
相關標籤/搜索