空間站

          北極心空

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks

          比較IBM MQSeries和BEA WebLogic JMS Server(轉(zhuǎn)載)

          關(guān)鍵詞MQSeries ?? WebLogic ?? JMS ?? ??????????????????????????????????????

          比較IBM MQSeries和BEA WebLogic JMS Server

          原文:http://www.lrsolution.com/docs/MQvsWLJMS.html

          劉睿
          2005年7月

          在面向消息的中間件(MOM)這個領(lǐng)域,IBM MQSeries (又稱WebSphere MQ)一直是當仁不讓的超級大哥,其它還有一些小兄弟,比如SwiftMQ、SonicMQ之類。但近年來隨著J2EE中的JMS規(guī)范的建立,完備地支持JMS的服務(wù)器如雨后春筍般地出現(xiàn),比如BEA WebLogic Server的JMS Server就是其中一個佼佼者。

          僅僅就JMS規(guī)范來說,MQSeries與WebLogic JMS沒有什么不同之處。但JMS規(guī)范僅僅定義了消息服務(wù)器的一個開發(fā)接口,而且還忽略了許多細節(jié),所以不同之處就在JMS規(guī)范之外的這些內(nèi)容,很多也是非常重要的。總的來說,MQSeries的功能和性能方面明顯占優(yōu),而WebLogic JMS的某些JMS配置更加簡單易行。

          在本文中,我盡量試圖從客觀的角度分析兩種產(chǎn)品的差異,如有不妥之處,請讀者不吝賜教。

          1. 產(chǎn)品體系架構(gòu)不同造成的差異

          WebLogic JMS是一個純Java實現(xiàn)的支持C-S架構(gòu)的實現(xiàn)JMS規(guī)范的服務(wù)器產(chǎn)品;而MQSeries是使用本地語言(比如在UNIX和Windows上的C語言)編寫的既支持C-S架構(gòu),又支持對等訪問的實現(xiàn)完備MOM(包括JMS規(guī)范)的產(chǎn)品。于是就產(chǎn)生出以下的不同點:

          1.1 MQSeries支持真正的異步數(shù)據(jù)傳輸;而WebLogic JMS不支持。

          異步發(fā)送數(shù)據(jù)到遠端的消息服務(wù)器,是MQSeries等完備的MOM的特色。JMS規(guī)范規(guī)定了一個C-S架構(gòu),定義了JMS客戶機與JMS服務(wù)器的開發(fā)接口,并沒有定義JMS服務(wù)器與JMS服務(wù)器的規(guī)范,而客戶機方面沒有任何隊列,所以只能說是規(guī)范了消息的存取,而沒有規(guī)范消息數(shù)據(jù)的傳輸。因為JMS客戶機并不擁有存放數(shù)據(jù)的隊列,所以所有發(fā)送的操作都要由應(yīng)用程序來控制,JMS服務(wù)器本身并不代理傳輸,也不保證數(shù)據(jù)在遠程隊列間傳輸?shù)目煽啃?。WebLogic JMS就是這樣的體系。

          這種體系結(jié)構(gòu)有時候是不能直接滿足應(yīng)用的要求的。首先,為了充分利用資源和提高效率,許多應(yīng)用需要采用異步消息的機制。其次,許多需要快速返回的應(yīng)用也必須使用異步傳輸。比如電話自動語音應(yīng)答(IVR)的程序,某個操作需要把數(shù)據(jù)傳輸?shù)竭h程的服務(wù)器上,但是必須立即返回,接受客戶的下一個按鍵。

          MQSeries通過通道與傳輸隊列和遠程隊列來完成這一任務(wù)。能充分利用網(wǎng)絡(luò)的帶寬,甚至支持斷網(wǎng)續(xù)傳,保證數(shù)據(jù)傳輸?shù)目煽啃?。當然,雖然應(yīng)用程序不必作任何工作,但配置方面確實還要多學一些概念。

          1.2 MQSeries支持多種語言的開發(fā);而WebLogic JMS基本上只支持JAVA

          MQSeries支持的語言包括C, C++, COBOL, JAVA, PL/1, REXX, RPG, Visual Basic (使用COM/ActiveX)等。老板本的MQSeries支持JAVA是通過一個叫MA88的SupportPac來實現(xiàn),雖然經(jīng)過廣泛的使用和驗證,但給人的感覺是不太方便。好在從5.3版起(目前最新的是6.0版),JAVA支持已經(jīng)內(nèi)置在MQSeries中。

          WebLogic JMS一般只支持JAVA開發(fā)。但BEA也在dev2dev.bea.com網(wǎng)站上提供了一套免費的C的支持,稱作“JMS C API”。參見http://dev2dev.bea.com/utilitiestools/environment.html?highlight=utilitiestools。但這個工具與老的MA88也是不能相提并論的,因為BEA并不真正支持它,因此也基本沒有什么用戶。參見BEA網(wǎng)站上關(guān)于“JMS C API”的警告:

          This is *not* a supported product of BEA. However, if you have questions about this API you can post them to weblogic.developer.interest.jms.

          1.3 純JAVA實現(xiàn)的利與弊

          MQSeries是用本地語言實現(xiàn)的,因此帶來的好處是高性能和高并發(fā)的支持能力。MQSeries相對WebLogic JMS等產(chǎn)品的性能優(yōu)勢是非常明顯的,所以MQSeries非常適于企業(yè)級的大數(shù)據(jù)量和高并發(fā)的數(shù)據(jù)傳輸業(yè)務(wù)。誰也無法想象一個企業(yè)級的數(shù)據(jù)應(yīng)用會采用一個純Java實現(xiàn)的數(shù)據(jù)庫,因為其性能無法滿足要求,對較大的數(shù)據(jù)傳輸應(yīng)用也是一樣的,純Java實現(xiàn)的JMS服務(wù)器例如WebLogic JMS無法滿足其性能的要求。

          純JAVA實現(xiàn)的JMS服務(wù)器也有其好處,就是與其它的J2EE服務(wù)完美地集成在一起。所以WebLogic的JMS配置顯得更簡潔。WebSphere+MQSeries也配合得很好,但總是能感覺到是這兩個產(chǎn)品。WebLogic JMS的對象體系完全符合JMS的概念體系。而MQSeries要通過WebSphere Application Server或者一個叫JMSAdmin的工具,借助于目錄服務(wù)來完成MQSeries概念體系到JMS概念體系的映射。應(yīng)該是看到了這件事造成的麻煩,所以IBM在WebSphere v6也提供了一套純JAVA實現(xiàn)的、與MQSeries可以互操作的JMS服務(wù)器。另外一點是WebLogic不需要WebSphere以及MQSeries那樣的冗長的CLASSPATH等環(huán)境變量的設(shè)置,這點對開發(fā)人員有吸引力。

          1.4 MQSeries的通信功能更加強大,WebLogic JMS也有自己的一些特色

          JMS對通信功能的要求很少,所以對二者對通信支持能力還是有很大的差別的??偟膩碚f,歷史更悠久的MQSeries占優(yōu),但WebLogic JMS也有自己的特色。

          • MQSeries支持支持真正的遠程異步數(shù)據(jù)傳輸,甚至支持消息的路由,可以“多級跳”;WebLogic JMS不支持。
          • MQSeries支持消息的分組和分段傳輸,對于大消息傳輸和不穩(wěn)定的網(wǎng)絡(luò)非常有意義。WebLogic JMS沒有這方面的功能。
          • 二者都支持SSL、持久性、優(yōu)先級、超時等功能。除了完備的SSL實現(xiàn)之外,MQSeries的安全體系 遭到了一些批評,使用通道的安全出口程序顯得很麻煩,而使用用戶名稱但無須口令保護的遠程數(shù)據(jù)通信,如何能令人滿意?但在這一點上WebLogic JMS也很難說就好一些,因為WebLogic JMS僅僅支持C-S的操作,系統(tǒng)本身并不支持遠程的數(shù)據(jù)傳輸(需要應(yīng)用實現(xiàn))。
          • WebLogic JMS支持IP多播會話,能顯著地提高 局域網(wǎng)內(nèi)廣播通信的性能,但這種方式不保證數(shù)據(jù)接收的可靠性,只適于某些特定的應(yīng)用。MQSeries本身不提供此功能,但在Event Broker和Message Broker等MQSeries的升級產(chǎn)品中提供IP多播的支持。

          1.5 MQSeries的管理功能更加強大

          JMS對管理功能的要求很少,在這方面MQSeries也有比較明顯的優(yōu)勢。

          • JMS對事務(wù)處理的支持包括的對XASession和XAConnection實現(xiàn),這一點對MQSeries和WebLogic JMS是相同的。MQSeries本身還可以作為事務(wù)管理器,協(xié)調(diào)兩階段提交。
          • MQSeries和WebLogic JMS都支持Message Driven Bean作為觸發(fā)新的應(yīng)用的一種方式。WebLogic JMS還支持一種稱作Session Pool的類似的觸發(fā)機制。但這類觸發(fā)機制過于簡化,也就是每個消息都觸發(fā)一個新的線程的應(yīng)用。MQSeries的觸發(fā)機制更豐富,不但包括這種被稱作Every的方式,還包括First和Depth等方式。另外MQSeries還可以觸發(fā)各種執(zhí)行程序或者MQSeries的通道。
          • MQSeries擁有一套完備的日志系統(tǒng),可以進行獨立的系統(tǒng)備份和恢復,因此適于高規(guī)格的數(shù)據(jù)/消息傳輸?shù)膽?yīng)用。WebLogic JMS沒有這方面的支持。

           

          2. 產(chǎn)品歷史的不同造成的差異

          MQSeries是個歷史悠久的產(chǎn)品,而WebLogic JMS是個新兵,因此會有以下的差異:

          2.1 MQSeries支持更多的系統(tǒng)平臺

          支持30多種系統(tǒng)平臺。當然值得注意的是某些平臺的MQSeries是由合作伙伴實現(xiàn)的。

          WebLogic JMS是個新產(chǎn)品,支持的平臺數(shù)與WebLogic Server一樣,只有常用的幾個。有人說所有支持JDK的平臺都能跑WebLogic JMS的客戶機,這是不正確的說法。因為JMS是J2EE規(guī)范的一種,J2SE的SDK并不包括JMS的支持,更不要說支持WebLogic的J2EE了。

          2.2 MQSeries支持更多的通信協(xié)議

          MQSeries支持很多通信協(xié)議,但目前在實踐中常用的是TCP/IP協(xié)議和SNA協(xié)議。

          WebLogic JMS僅支持TCP/IP協(xié)議。

          有些人對MQSeries的單向通道的概念提出了異議,認為增加了配置的復雜性,僅僅是SNA協(xié)議的需要,而不是TCP/IP協(xié)議的需要。我個人認為這點也不無一些道理。但是在有防火墻的TCP/IP網(wǎng)絡(luò)上,不同的方向還是有差異的。

           

          3. 群集實現(xiàn)的差異

          MQSeries與WebLogic JMS在支持群集時,差異比較大,應(yīng)該說各有各的特點。

          • MQSeries的群集建立在配置庫和群集通道基礎(chǔ)之上,可以定義“共享隊列”;WebLogic JMS的群集建立在WebLogic群集基礎(chǔ)之上,可以定義“分布式隊列”。
          • MQSeries在寫共享隊列時,如果發(fā)現(xiàn)本地有,就只寫本地的隊列(這稱作本地優(yōu)先);如果本地沒有,就會輪流寫到所有定義了此共享隊列的隊列管理器。MQSeries在讀共享隊列時,只能從本地取。WebLogic JMS在讀寫分布式隊列時,不受本地影響,總是進行輪流或權(quán)重選擇。聽起來似乎WebLogic JMS的群集更靈活,其實也不盡然。當取得了JMS的對象QueueSender或QueueReceiver后,WebLogic實際上已經(jīng)綁定了一個JMS服務(wù)器的實例。如果每次寫或讀一個消息,都重新生成QueueSender或QueueReceiver,雖然比較好地支持了負載均衡,但勢必造成很大的性能損失。而MQSeries在輪流寫共享隊列時,沒有這方面的問題。
          • WebLogic JMS的分布式隊列有一個叫做Forward Delay的有意思的屬性,定義了一個時間的長度。系統(tǒng)一旦發(fā)現(xiàn)超過這個時間長度,還沒有人讀這個隊列,就把它的消息轉(zhuǎn)送給群集中有消費者的隊列。有了這個屬性,應(yīng)用程序就可以只從一個JMS服務(wù)器的實例讀消息了。

           



          Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=574051

          posted on 2006-12-15 20:34 蘆葦 閱讀(825) 評論(0)  編輯  收藏 所屬分類: JAVA其他
          主站蜘蛛池模板: 晋宁县| 石楼县| 郴州市| 永靖县| 济源市| 仙游县| 山阴县| 普宁市| 旬阳县| 溧水县| 上犹县| 江安县| 陇南市| 芮城县| 永修县| 高雄县| 嘉善县| 太原市| 都昌县| 建湖县| 桐城市| 刚察县| 彭山县| 江永县| 巢湖市| 库尔勒市| 阿克陶县| 林口县| 石嘴山市| 乌兰察布市| 石泉县| 建宁县| 湘西| 泰和县| 余庆县| 江城| 连州市| 高阳县| 江门市| 峨眉山市| 舒兰市|