前言
面向服務架構soa以其獨特的優勢越來越受到企業的重視,它可以根據需求通過網絡對松散耦合的粗粒度應用組件進行分布式部署、組合和使用。服務層是SOA的基礎,可以直接被應用調用,從而有效控制系統中與軟件代理交互的人為依賴性。Soa的開發方法一般主要有開源的dubbo、dubbox、mule、wso2、cxf,以及付費的oracle soa、ibm soa等。
SOA是什么
SOA是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。SOA可以看作是B/S模型、XML(標準通用標記語言的子集)/Web Service技術之后的自然延伸。
SOA將能夠幫助軟件工程師們站在一個新的高度理解企業級架構中的各種組件的開發、部署形式,它將幫助企業系統架構者以更迅速、更可靠、更具重用性架構整個業務系統。較之以往,以SOA架構的系統能夠更加從容地面對業務的急劇變化。
SOA的實施具有幾個鮮明的基本特征。實施SOA的關鍵目標是實現企業IT資產的最大化作用。要實現這一目標,就要在實施SOA的過程中牢記以下特征:
可從企業外部訪問
隨時可用
粗粒度的服務接口分級
松散耦合
可重用的服務
服務接口設計管理
標準化的服務接口
支持各種消息模式
精確定義的服務契約
SOA服務具有平***立的自我描述XML文檔。Web服務描述語言(WSDL, Web Services Description Language)是用于描述服務的標準語言。
SOA 服務用消息進行通信,該消息通常使用XML Schema來定義(也叫做XSD, XML Schema Definition)。消費者和提供者或消費者和服務之間的通信多見于不知道提供者的環境中。服務間的通訊也可以看作企業內部處理的關鍵商業文檔。
在一個企業內部,SOA服務通過一個扮演目錄列表(directory listing)角色的登記處(Registry)來進行維護。應用程序在登記處(Registry)尋找并調用某項服務。統一描述,定義和集成(UDDI, Universal Description, Definition, and Integration)是服務登記的標準。
每項SOA服務都有一個與之相關的服務品質(QoS, quality of service)。QoS的一些關鍵元素有安全需求(例如認證和授權),可靠通信(注:可靠消息是指,確保消息“僅且僅僅”發送一次,從而過濾重復信息。),以及誰能調用服務的策略。
隨著全球信息化的浪潮,信息化產業不斷發展、延伸,已經深入了眾多的企業及個人,SOA系統架構的出現,將給信息化帶來一場新的革命。
縱觀信息化建設與應用的歷程,盡管出現過XML(標準通用標記語言的子集)、Unicode、UML等眾多信息標準,但是許多異構系統之間的數據源仍然使用各自獨立的數據格式、元數據以及元模型,這是信息產品提供商一直以來形成的習慣。各個相對獨立的源數據集成一起,往往通過構建一定的數據獲取與計算程序來實現,這樣的做法需要花費大量工作。信息孤島大量存在的事實,使信息化建設的ROI(投資回報率)大大降低,ETL成為集中這些異構數據的有效工具。 ETL常用于從源系統中提取數據,將數據轉換為與目標系統相兼容的格式,然后將其裝載到目標系統中。數據經過獲取、轉換、裝載后,要產生應用價值,還需另外的數據展現工具予以實現,如此復雜的數據應用過程,必定產生高昂的應用成本。
結構化的數據管理尚可通過以上方法,予以實現其集成應用。在非結構化的內容方面,這些具有挑戰性的問題令人生畏。內容管理的應用方案基于不同的信息化應用系統,而且大部分是縱向的以組織部門為界限的。在內容管理市場中,經常使用來自不同廠商的產品來提供這些解決方案。即使是同一個廠商的產品,相互之間的功能也是經常重疊,并且無法集成。
隨著信息化建設的深入,不同應用系統之間的功能界限已趨于模糊。同時企業資源計劃系統和協同商務系統,又需要商業智能的分析展現數據提供用戶操作依據。
在激烈競爭且多變的市場環境下,企業的管理模式很難固化,應用傳統的信息化軟件,當企業要做出一些改動時需要面對巨大的挑戰。
2000年WebService出現后,SOA被譽為下一代Web服務的基礎框架,已經成為計算機信息領域的一個新的發展方向。
SOA的出現給傳統的信息化產業帶來新的概念,不再是各自獨立的架構形式,能夠輕松的互相聯系組合共享信息。
可復用以往的信息化軟件。基于SOA的協同軟件提供了應用集成功能,能夠將ERP、CRM、HR等異構系統的數據集成。
松散耦合方式,只要充分了解業務的進程,就可以不用編寫一行代碼,通過流程圖實現一套我們自己的信息系統。就像已經給你準備好了磚瓦和水泥,只需要想好蓋什么樣的房子就可以輕松的蓋起。加快開發速度,并且減少了開發和維護的費用。軟件將所有的管理提煉成表單和流程,以記錄管理的內容,指定過程的流轉方向。
更簡便的信息和數據集成。信息集成功能可以將散落在廣域網和局域網上的文檔、目錄、網頁輕松集成,加強了信息的協同相關性。同時,復雜、成本高昂的數據集成,也變成了可以簡單且低成本實現的參數設定。創建了完全集成的信息化應用新領域。
在具體的功能實現上,SOA協同軟件所實現的功能包括了知識管理、流程管理、人事管理、客戶管理、項目管理、應用集成等,從部門角度看涉及了行政、后勤、營銷、物流、生產等。從應用思想上看,SOA協同軟件中的信息管理功能,全面兼顧了貫穿整個企業組織的信息化軟硬件投入。盡管各種IT技術可以用于不同的用途,但是信息管理并沒有任意地將信息分為結構化或者非結構化的部分,因此ERP等結構化管理系統并不是信息化建設的全部;同時,信息管理也沒有將信息化解決方案劃分為部門的視圖,因此僅僅以部分為界限去構建軟件應用功能的思想未必是不可撼動的。基于SOA的協同軟件與 ERP、CRM等傳統應用軟件相比,關鍵的不同在于它可以在合適的時間、合適的地點并且有正當理由向需要它提供服務的任何用戶提供服務。
利用SOA架構開發的優點:
第一、更易維護
業務服務提供者和業務服務使用者的松散耦合關系及對開放標準的采用確保了該特性的實現。建立在以 SOA基礎上的信息系統,當需求發生變化的時候,不需要修改提供業務服務的接口,只需要調整業務服務流程或者修改操作即可,整個應用系統也更容易被維護。
第二、更高的可用性
該特點是在于服務提供者和服務使用者的松散耦合關系上得以發揮與體現。使用者無須了解提供者的具休實現細節。
第三、更好的伸縮性
依靠業務服務設計、開發和部署等所采用的架構模型實現伸縮性。使得服務提供者可以互相彼此獨立地進行調整,以滿足新的服務需求。
下面詳細論述幾種主要的開發方法和工具:
一、Dubbo
DUBBO是淘寶公司的一個分布式服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。淘寶公司的許多應用就是采用dubbo,運行穩定成功。現在,不少企業采用dubbo開發應用系統。Dubbo是簡單有效的soa架構,值得采用。
相比于其他服務框架,DUBBO有如下優勢:
透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入;
軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點;
服務自動注冊與發現,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。
其核心部分包含:
遠程通訊:提供對多種基于長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
集群容錯:提供基于接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集群支持。
自動發現:基于注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
Dubbo有如下功能:
透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。
服務自動注冊與發現,不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。
Dubbo基本原理-分布式服務框架
快速啟動
Dubbo采用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基于Spring的Schema擴展進行加載。
服務提供者:定義服務接口
定義服務接口:(該接口需單獨打包,在服務提供方和消費方共享)
在服務提供方實現接口
在服務提供方實現接口:(對服務消費方隱藏實現)
用Spring配置聲明暴露服務
加載Spring配置
服務消費者:
加載Spring配置,并調用遠程服務:(也可以使用IoC注入)
Zookeeper注冊中心安裝
建議使用dubbo-2.3.3以上版本的zookeeper注冊中心客戶端。
Zookeeper是Apache Hadoop的子項目,強度相對較好,建議生產環境使用該注冊中心。
Dubbo未對Zookeeper服務器端做任何侵入修改,只需安裝原生的Zookeeper服務器即可,所有注冊中心邏輯適配都在調用Zookeeper客戶端時完成。
開源網址:
http://alibaba.github.io/dubbo-doc-static/Home-zh.htm
Zookeeper下載地址:
http://zookeeper.apache.org/releases.html
Zookeeper注冊中心安裝:
http://alibaba.github.io/dubbo-doc-static/Zookeeper+Registry+Installation-zh.htm
二、Mule
Mule是一個以Java為核心的輕量級的消息框架和整合平臺,基于EIP(Enterprise Integeration Patterns,由Hohpe和Woolf編寫的一本書)而實現的。Mule的核心組件是UMO(UniversalMessage Objects,從Mule2.0開始UMO這一概念已經被組件Componse所代替),UMO實現整合邏輯。UMO可以是POJO,JavaBean等等。它支持30多種傳輸協議(file,FTP,UDP,TCP,email,HTTP,SOAP,JMS等),并整合了許多流行的開源項目,比如Spring,ActiveMQ,CXF,Axis,Drools等。
Mule Studio是一個功能強大、用戶界面友好的基于Eclipse的開發工具。使用者不需要深入了解Mule的XML配置語法,就可以在幾分鐘內輕松的創建、編輯、測試Mule ESB流程。Mule Studio基于Eclipse技術,包含3個主要部件:項目結構樹、工具箱和畫布。項目結構樹包含整個項目的目錄結構。
Mule是一個企業服務總線(ESB)消息框架。它的主要特性包括:
1.基于J2EE1.4的企業消息總線(ESB)和消息代理(broker)。
2.可插入的連接性:比如Jms,jdbc,tcp,udp,multicast,http,servlet,smtp,pop3,file,xmpp等。
3.支持任何傳輸之上的異步,同步和請求響應事件處理機制。
4.支持Axis或者Glue的Web Service.
5.靈活的部署結構[Topologies]包括Client/Server,P2P, ESB 和Enterprise Service Network.
6.與Spring 框架集成:可用作ESB 容器,也可以很容易的嵌入到Spring應用中。
7.使用基于SEDA處理模型的高度可伸縮的企業服務器。
8.強大的基于EIP模式的事件路由機制等。
三、wso2
WSO2ESB是一種根據ApacheV2.0許可證發布的快速、輕量級和靈活的企業服務總線產品。使用ESB在HTTP、HTTPS、JMS、mail等協議基礎上通過業務系統過濾、轉換、路由和處理SOAP,二進制、純XML和文本消息。
WSO2ESB是一個為企業準備的完全成熟的ESB。WSO2ESB是建立在Apache Synapse項目基礎上的。Apache Synapse是使用Apache Axis2創建的。
應用程序發送消息到ESB,該消息由ESB Transport撿起。
Transport通過消息管道發送消息。像安全和可靠的消息傳遞的信息方面的質量受到這個pipe的照顧。在該pipe內部是axis2的流入和流出流。ESB可以有如下兩種操作:
消息中介:使用單管道
代理服務:使用獨立的管道運輸到不同的代理服務。
消息轉換和消息路由可以看做一個獨立的單元。如圖所示,消息轉換組件和路由組件之間沒有明顯的分離。WSO2ESB調用這個中介框架。一些轉換發生在路由決定之前,一些轉換發生在路由決定之后。這一部分由Synapse執行。
然后根據目的地將消息注入到獨立的管道。在這里再次確定消息服務方面的質量。
傳輸層負責通過ESB所需的傳輸協議的轉換。
該圖顯示了如何通過ESB的體系架構將請求傳到一個實際的endpoint。響應處理是這個操作的反向操作。
所有這些組件可以通過WSO2ESB管理控制臺管理和檢測。
ESB Components
Transports
WSO2ESB支持所有廣泛使用的傳輸協議包括HTTP/s、JMS、VFS和特定領域的傳輸如FIX。一個新的傳輸協議使用axis2傳輸框架輕松地被添加和插入到ESB中。不同的傳輸工具為ESB帶來各種消息內容/負載。
傳輸內容:
消息建設者:允許使用內容類型標識消息并使變成普通的XML消息集。因此每個內容類型都有相關聯的建設者。WSO2ESB包含基于文本的內容信息的建設者和二進制內容建設者。
消息格式:建設者的相反的搭檔。格式化程序通過指出傳輸協議處理前消息內容的類型將消息轉換回原始格式。類似transport的用戶可以使用axis2框架實現消息的建設和格式化。
參閱Transports
端點(Endpoints)
Endpoints作為具有傳輸協議的邏輯組件。兩套端點地址和WSDL。地址endpoint可以使用任何可用的transport調度消息。
參閱Endpoints
代理服務(ProxyServices)
在WSO2ESB中代理服務是實現使用消息接收器和開放接收消息的虛擬服務。一個代理服務可以使用類似于一個普通的web服務地址的url訪問。代理服務允許將WSDL發布到用于先前使用的程序組。可以使用任何可用的傳輸協議從代理服務接收和發送消息。
參閱Proxy Services Sample
主題(Topics)
Topics是另一個恢復消息處理事件的實施,包括subscription和events.
參閱eventing
中介(Mediators)
WSO2ESB的power仍然是為不同方面提供服務的全面調節庫。使用mediator庫實現廣泛使用MEPs和EIPs。由于WSO2ESB提供了一個健康的框架,使得開發者寫一個mediator非常容易。mediators可以使用包括Java,scripting和Spring的各種技術。
參閱mediator
序列(Sequences)
Sequence充當mediators的配置組件。Sequence允許阻止mediators實現管道和過濾模式。
參閱Sequences
任務和命令(Tasksand Commands)
Tasks提供在WSO2ESB中配置計劃工作的設施并且允許執行mediation的內部或外部命令。
參閱Tasks
QoS組件(QoSComponents)
Qos組件實現可靠的消息傳遞和代理服務自帶的Apache的Rempart和Sandesha兩個實現模塊的安全性。
配置、庫/注冊(Configuration,Repository/Registry)
Configuration是ESB架構的架構圖。WSO2ESB提供了一個內置的 Repository/Registry存儲配置和配置元數據,而且提供了使用遠程庫設施。
管理和配置界面(Managementand Configuration GUI)
有助于在生產環境中運行WSO2ESB組件可以在組件中找到。這些組件實現集群、高可用性和負載平衡功能。
GUI組件進行綜合管理、配置和檢測GUI。GUI通過分離前端和后端的關注實現了分層架構。這允許用戶使用一個GUI控制臺連接到多個后臺。
WSO2ESB基于組件的體系結構加強了使用OSGi的松耦合性質。所有組件都建為OSGi包。
四、cxf
ApacheCXF 是一個開源的Services框架,CXF幫助您利用Frontend 編程 API來構建和開發Services,像JAX-WS。這些Services可以支持多種協議,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多種傳輸協議上運行,比如:HTTP、JMS或者JBI,CXF大大簡化了Services的創建,同時它繼承了XFire傳統,一樣可以天然地和Spring進行無縫集成。
功能特性
CXF 包含了大量的功能特性,但是主要集中在以下幾個方面:
支持Web Services標準:CXF支持多種Web Services標準,包含SOAP、BasicProfile、WS-Addressing、WS-Policy、WS-ReliableMessaging和 WS-Security。Frontends:CXF支持多種“Frontend”編程模型,CXF實現了JAX-WS API(遵循JAX-WS 2.0 TCK版本),它也包含一個“simplefrontend”允許客戶端和 EndPoint 的創建,而不需要Annotation注解。CXF既支持 WSDL優先開發,也支持從Java的代碼優先開發模式。容易使用: CXF設計得更加直觀與容易使用。有大量簡單的 API用來快速地構建代碼優先的 Services,各種Maven的插件也使集成更加容易,支持 JAX-WS API,支持Spring 2.0更加簡化的XML配置方式,等等。支持二進制和遺留協議:CXF的設計是一種可插撥的架構,既可以支持 XML,也可以支持非XML的類型綁定,比如:JSON和CORBA。
項目目標
下面列出了來自Apache CXF官方網站的項目目標。
概要
高性能可擴展簡單且容易使用支持多種標準
支持 JAX-WS、JAX-RS、JSR-181和 SAAJ;支持SOAP 1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;支持WSDL 1.1、2.0;支持MTOM;
多種傳輸方式、Bindings、DataBindings和Format
Bindings:SOAP、REST/HTTP;DataBndings:目前支持JAXB 2.0、Aegis兩種,默認是JAXB 2.0。XMLBeans、Castor和JiBX數據綁定方式將在CXF 2.1版本中得到支持;格式(Format):XML、JSON;傳輸方式:HTTP、Servlet、JMS和Jabber;可擴展的API允許為CXF增加其它的Bindings,以能夠支持其它的消息格式,比如:CSV和固定記錄長度。
2Apache CXF特點
靈活部署
輕量級容器:可在Tomcat或基于Spring的容器中部署Services;集成JBI:可以在如ServiceMix,OpenESB or Petals 等等的JBI容器中將它部署為一個服務引擎;集成 SCA:可以部署在如Tuscany之類的SCA容器中;集成J2EE:可以在J2EE 應用服務器中部署 Services,比如:Geronimo、JOnAS、JBoss、WebSphereApplication Server 和WebLogic Application Server,以及Jetty和Tomcat;獨立的Java 客戶端/服務器。
支持多種編程語言
全面支持JAX-WS 2.0 客戶端/服務器編程模型;支持 JAX-WS 2.0 synchronous、asynchronous和one-way API‘s;支持JAX-WS 2.0 Dynamic Invocation Interface (DII) API;支持wrapped and non-wrapped風格;支持XML messaging API;支持JavaScript和ECMAScript 4 XML (E4X),客戶端與服務端均支持;通過Yoko支持CORBA;通過Tuscany支持SCA;通過ServiceMix支持JBI;
代碼生成
Java toWSDL;WSDLto Java;XSDto WSDL;WSDLto XML;WSDLto SOAP;WSDLto Service;
CXF 框架支撐環境
CXF 框架是一種基于 Servlet 技術的SOA應用開發框架,要正常運行基于 CXF應用框架開發的企業應用,除了 CXF框架本身之外,還需要JDK和Servlet容器的支持。
五、dubbox
當當網我們根據自身的需求,為Dubbo實現了一些新的功能,并將其命名為Dubbox(即DubboeXtensions)。
主要的新功能包括:
· 支持REST風格遠程調用(HTTP +JSON/XML):基于非常成熟的JBoss RestEasy框架,在dubbo中實現了REST風格(HTTP + JSON/XML)的遠程調用,以顯著簡化企業內部的跨語言交互,同時顯著簡化企業對外的Open API、無線API甚至AJAX服務端等等的開發。事實上,這個REST調用也使得Dubbo可以對當今特別流行的“微服務”架構提供基礎性支持。 另外,REST調用也達到了比較高的性能,在基準測試下,HTTP+ JSON與Dubbo 2.x默認的RPC協議(即TCP + Hessian2二進制序列化)之間只有1.5倍左右的差距,詳見下文的基準測試報告。
· 支持基于Kryo和FST的Java高效序列化實現:基于當今比較知名的Kryo和FST高性能序列化庫,為Dubbo 默認的RPC協議添加新的序列化實現,并優化調整了其序列化體系,比較顯著的提高了Dubbo RPC的性能,詳見下圖和文檔中的基準測試報告。
· 支持基于嵌入式Tomcat的HTTP remoting體系:基于嵌入式tomcat實現dubbo的HTTP remoting體系(即dubbo-remoting-http),用以逐步取代Dubbo中舊版本的嵌入式Jetty,可以顯著的提高REST等的遠程調用性能,并將Servlet API的支持從2.5升級到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等協議都基于這個HTTP remoting體系)。
· 升級Spring:將dubbo中Spring由2.x升級到目前最常用的3.x版本,減少項目中版本沖突帶來的麻煩。
· 升級ZooKeeper客戶端:將dubbo中的zookeeper客戶端升級到最新的版本,以修正老版本中包含的bug。
注:dubbox和dubbo 2.x是兼容的,沒有改變dubbo的任何已有的功能和配置方式(除了升級了Spring之類的版本)。另外,dubbox也嚴格遵循了Apache 2.0許可證的要求。
總之,soa架構具有松耦合、高復用、開發、維護靈活方便、支持多平臺多系統、對原系統良好支持、消除信息孤島等許多優點,以dubbo為代表的開發方法有一百多種,以上5種主要的方法值得借鑒采用,相信一定會帶來極好的價值!
-
SOA
+關注
關注
1文章
288瀏覽量
27480
發布評論請先 登錄
相關推薦
評論