消息隊(duì)列的選型_第1頁(yè)
消息隊(duì)列的選型_第2頁(yè)
消息隊(duì)列的選型_第3頁(yè)
消息隊(duì)列的選型_第4頁(yè)
消息隊(duì)列的選型_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

TOC\o"1-5"\h\z目錄1\o"CurrentDocument"1消息隊(duì)列的概述2\o"CurrentDocument"1.1消息的概念21.2消息的隊(duì)列的概念21.3消息隊(duì)列的概念3\o"CurrentDocument"2AMQP4AMQP4\o"CurrentDocument"AMQP歷史4AMQP的架構(gòu)5AMQP的概念5\o"CurrentDocument"3常用消息隊(duì)列選型7\o"CurrentDocument"RabbitMQ7\o"CurrentDocument"ZeroMQ8\o"CurrentDocument"Qpid8\o"CurrentDocument"MetaQ9\o"CurrentDocument"ActiveMQ9OpenMQ11MemcacheQ12\o"CurrentDocument"4隊(duì)列參數(shù)比較14消息隊(duì)列的概述1.1消息的概念消息的概念:消息是由通信雙方所需要傳遞的信息,它可以是各式各樣的媒體,如文本、聲音、圖像等消息,最終的理解方式為,消息傳遞的雙方事先商定這樣做的好處是:一是相當(dāng)于對(duì)數(shù)據(jù)進(jìn)行了簡(jiǎn)單的加密,二采用自己定義的格式可以節(jié)省通信的傳遞量。消息可以含有發(fā)送和接收者的標(biāo)識(shí),這樣只有指定的用戶才能看到只傳遞給他的信息和返回是否操作成功的回執(zhí)。消息也可以含有時(shí)間戳,以便接收方對(duì)某些與時(shí)間相關(guān)的應(yīng)用進(jìn)行處理消息,還可以含有到期時(shí)間,它表明如果在指定時(shí)間內(nèi)消息還未到達(dá)則此消息作廢,這主要用于與時(shí)間性關(guān)聯(lián)較為緊密的應(yīng)用。1.2消息的隊(duì)列的概念存儲(chǔ)的概念:消息隊(duì)列是發(fā)送和接收消息的公用存儲(chǔ)空間,它可以存在于內(nèi)存中或者是物理文件中。消息的發(fā)送方式:消息可以以兩種方式發(fā)送,即快遞方式和可恢復(fù)模式,它們的區(qū)別在于,快遞方式為了消息的快速傳遞把消息放置于內(nèi)存中,而不放于物理磁盤上,以獲取較高的處理能力;可恢復(fù)模式在傳送過(guò)程的每一步驟中,都把消息寫入物理磁盤中,以得到較好的故障恢復(fù)能力。消息隊(duì)列的存貯所在:可以放置在發(fā)送方、接收方所在的機(jī)器上,也可以單獨(dú)放置在另外一臺(tái)機(jī)器上。正是由于消息隊(duì)列在放置方式上的靈活性,形成了消息傳送機(jī)制的可靠性。當(dāng)保存消息隊(duì)列的機(jī)器發(fā)生故障而重新啟動(dòng)以后,以可恢復(fù)模式發(fā)送的消息,可以恢復(fù)到故障發(fā)生之前的狀態(tài),而以快遞方式發(fā)送的消息則丟失了。另一方面,采用消息傳遞機(jī)制,發(fā)送方不要再擔(dān)心接收方是否啟動(dòng)、是否發(fā)生故障等非必要因素,只要消息成功發(fā)送出去就可以認(rèn)為處理完成。而實(shí)際上對(duì)方可能甚至未曾開機(jī),或者實(shí)際完成時(shí)可能已經(jīng)是第二天了。采用消息隊(duì)列技術(shù)帶來(lái)的好處是:由于是異步通信,無(wú)論是發(fā)送方還是接收方都不用等待對(duì)方返回成功消息就可以執(zhí)行余下的代碼,因而大大提高了事物處理的能力;在信息傳送過(guò)程中,信息發(fā)送機(jī)制具有一定功能的故障恢復(fù)能力;消息傳遞機(jī)制使得消息通信的雙方具有不同的物理平臺(tái)成為可能。1.3消息隊(duì)列的概念消息隊(duì)列是在多個(gè)不同的應(yīng)用之間實(shí)現(xiàn)相互通信的一種異步傳輸模式,相互通信的應(yīng)用可以分布于同一臺(tái)機(jī)器上,也可以分布于相連的網(wǎng)絡(luò)空間中的任一位置。實(shí)現(xiàn)原理:是消息的發(fā)送者把自己想要發(fā)送的信息放入一個(gè)容器中(稱為Message),然后把它保存至一個(gè)系統(tǒng)公用空間的消息隊(duì)列中;本地或者是異地的消息接收程序再?gòu)脑撽?duì)列中取出發(fā)給它的消息進(jìn)行處理。AMQPAMQPAMQP是AdvancedMessageQueuingProtocol,即高級(jí)消息隊(duì)列協(xié)議。和前面羅列的技術(shù)不同,AMQP是一個(gè)標(biāo)準(zhǔn)化的消息中間件協(xié)議。她的理想是讓不同語(yǔ)言,不同系統(tǒng)的應(yīng)用互相通信,并提供一個(gè)簡(jiǎn)單統(tǒng)一的模型和編程接口。這樣,人們就可以采用各種語(yǔ)言和平臺(tái)來(lái)實(shí)現(xiàn)自己的應(yīng)用,當(dāng)需要和其他系統(tǒng)通信時(shí),只要承認(rèn)AMQP協(xié)議即可。2.2AMQP歷史AMQP來(lái)自JPMorgon,最初只是這個(gè)財(cái)大氣粗的投行內(nèi)部使用的消息中間件(注意:它變成了一個(gè)支持這個(gè)協(xié)議的標(biāo)準(zhǔn)實(shí)現(xiàn))。發(fā)起人JohnO,Hara很有氣魄,他說(shuō)“從1996年開始到2003我一直在等這樣一個(gè)標(biāo)準(zhǔn),但始終沒(méi)有等到,我已經(jīng)等不下去了”,并且“投行對(duì)這類標(biāo)準(zhǔn)的需求最迫切,而銀行又從來(lái)不缺乏技術(shù)專家”,所以他自己開發(fā)了一個(gè)。我想一個(gè)人如果想成就什么事,就需要這樣的英雄氣概吧。因?yàn)樗呐?,AMQP從金融界迅速推廣到整個(gè)計(jì)算機(jī)行業(yè),參與者包括了很多IT巨頭。雖然今天AMQP依舊是一個(gè)草案,但值得我們拭目以待,AMQP目前還是一個(gè)草案,最新版本是0.10圖2-1AMQP架構(gòu)2.4AMQP的概念表2-1AMQP概念表概念角色描述Producer消息生產(chǎn)者一個(gè)給exchange發(fā)送消息的程序,發(fā)送方式大致是:它首先創(chuàng)建一個(gè)空消息,然后填上內(nèi)容、路由KEY,最后發(fā)送給exchangeRoutingKey正向過(guò)濾key、消息特征一個(gè)字符串,exchange用之來(lái)決定應(yīng)該該消息投遞給哪個(gè)queue。(開始時(shí)queue已向exchange綁定它所關(guān)心消息的routingKey)Exchange交換器接收來(lái)自producers的消息,并根據(jù)該消息的routingKey和綁定的routingKey,將該消息投遞到正確的queuesBinding綁定操作前期將queue所想要的消息特征告訴exchangeoExchange以后收到消息,就按照這個(gè)規(guī)則來(lái)投遞。QueueMQClient在MQserver的直接面對(duì)在MQserver(實(shí)現(xiàn)為broker方式)里面的queue,持有MQclients想要的消息。

Consumer消息接收者是MQclient,從MQserver得到想要的消息,它負(fù)責(zé)創(chuàng)建、主動(dòng)訂閱、共享、使用、破壞queue和bindingo表2-2AMQP的exchange類型表Exchange路由行為Fan-Out對(duì)所有的queue進(jìn)行廣播Direct按照消息中的routingKEY直接路由TopicQueue向exchange綁定的routingKey命名為bindingKey,它可以采用通配符,如果具體消息中的routingKey與bindingKey相匹配,則把該消息交付給這個(gè)queue常用消息隊(duì)列選型3.1RabbitMQ.出身:RabbitMQ是由LShift提供的一個(gè)AdvancedMessageQueuingProtocol(AMQP)的開源實(shí)現(xiàn),由以高性能、健壯以及可伸縮性出名的Erlang寫成,因此也是繼承了這些優(yōu)點(diǎn)。.架構(gòu):圖3-1RabbitMQ的架構(gòu).■'.IIIIV田說(shuō)明virtualhost:持有一組exchange、queue及bingding,可以做權(quán)限控制Queue:存放消息,由consumer建立,并綁定到ExchangeExchange:根據(jù)綁定的規(guī)則進(jìn)行消息轉(zhuǎn)發(fā)Binding:綁定規(guī)則.架構(gòu)模型:.■'.IIIIV田說(shuō)明—消息代理架構(gòu)Broker.特點(diǎn):—Erlang消息機(jī)制與AMQP極度吻合—高并發(fā)—時(shí)間檢驗(yàn)的高可靠—高性能-集群易擴(kuò)展-RabbitMQ雖然是天生的分布式消息隊(duì)列,但其本身并不支持負(fù)載均衡-強(qiáng)大的管理功能-支持持久化、崩潰恢復(fù)?!⒀訒r(shí)是10ms級(jí)別ZeroMQ出身:由imatix開發(fā),并可以提供支持與培訓(xùn)。imatix是AMQP協(xié)議最初的creator,并開發(fā)了開源的OpenAMQ,但是在2010年imatix宣布iMatixtodropOpenAMQsupportby2011,AMQPitnowbelievesitis“fundamentallyflawedandunfixable”.目前主要將精力集中到ZeroMQ。.架構(gòu):-無(wú).架構(gòu)模型:—C/S架構(gòu)。-只是一個(gè)網(wǎng)絡(luò)的library,用于編寫分布式系統(tǒng)的利器。-部署起來(lái)非常簡(jiǎn)單,不需要單獨(dú)的消息服務(wù)器來(lái)存儲(chǔ)轉(zhuǎn)發(fā)消息-重點(diǎn)放在消息的傳輸上,性能高于TCPof0q。-不支持持久化、崩潰恢復(fù),未來(lái)也不會(huì)支持,除非應(yīng)用自己來(lái)做。-僅支持異步【/。,為了提高性能通過(guò)新建的線程發(fā)送消息支持C,C++,Java,Python等20多種語(yǔ)言。-消息延時(shí)是微秒級(jí)別-集群要應(yīng)用自己實(shí)現(xiàn)。Qpid出身:是ApacheFoundation的一個(gè)開源項(xiàng)目,是一個(gè)AMQP實(shí)現(xiàn)。它提供了C++和Java兩個(gè)版本的broker,并支持多種語(yǔ)言的客戶端,它還包括一個(gè)配置工具集.架構(gòu):-無(wú).架構(gòu)模型:-消息代理架構(gòu)Broker特點(diǎn):-實(shí)現(xiàn)AMQP的基本功能。-容易集群支持消息持久化-提供了很多額外的HA特性,非常適于集群環(huán)境下的消息通信。MetaQ出身:淘寶通用產(chǎn)品消息中間件團(tuán)隊(duì)開發(fā),思路起源于LinkedIn的Kafka,但并不是Kafka的一個(gè)Copy,Meta相比于kafka的一個(gè)重要特性就是消息高可用方案的實(shí)現(xiàn),我們稱之為HA方案。.架構(gòu):-無(wú)特點(diǎn):-生產(chǎn)者、服務(wù)器和消費(fèi)者都可分布-消息存儲(chǔ)順序?qū)?性能極高,吞吐量大-支持消息順序—支持本地和XA事務(wù)-客戶端pul1,隨機(jī)讀,利用sendfile系統(tǒng)調(diào)用,zero-copy,批量拉數(shù)據(jù)-支持消費(fèi)端事務(wù)-支持消息廣播模式-支持異步發(fā)送消息-支持http協(xié)議-支持消息重試和recover-數(shù)據(jù)遷移、擴(kuò)容對(duì)用戶透明-消費(fèi)狀態(tài)保存在客戶端-支持同步和異步復(fù)制兩種HA-支持groupcommitActiveMQ出身:ActiveMQ是Apache出品,最流行的,能力強(qiáng)勁的開源消息總線。ActiveMQ是一個(gè)完全支持JMS1.1和J2EE1.4規(guī)范的JMSProvider實(shí)現(xiàn),盡管JMS規(guī)范出臺(tái)已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位架構(gòu):圖3-2ActiveMQ架構(gòu)WSNotifica.tiMessageStore田說(shuō)明QueueRegion就是P2PWSNotifica.tiMessageStore田說(shuō)明QueueRegion就是P2P消息模型,TopicRegion是Publish/Subscribe模型。Connectors負(fù)責(zé)消息通信,支持OpenWire,Stomp,REST,WSNotification,XMPP等協(xié)議。NetworkServices負(fù)責(zé)存儲(chǔ)轉(zhuǎn)發(fā),集群等服務(wù)。MessageStore負(fù)責(zé)消息的存儲(chǔ),支持內(nèi)存、文件、內(nèi)嵌數(shù)據(jù)庫(kù)和外部數(shù)據(jù)庫(kù)等四種消息持久化方式。特點(diǎn):-多種語(yǔ)言和協(xié)議編寫客戶端。語(yǔ)言:Java,C,C++,C#,Ruby,Perl,Python,PHP。應(yīng)用協(xié)議:OpenWire,StompREST,WSNotification,XMPP,AMQP—完全支持JMS1.1和J2EE1.4規(guī)范(持久化,XA消息,事務(wù))—對(duì)Spring的支持,ActiveMQ可以很容易內(nèi)嵌到使用Spring的系統(tǒng)里面去,而且也支持Spring2.0的特性—通過(guò)了常見J2EE服務(wù)器(如Geronimo,JBoss4,GlassFish,WebLogic)的測(cè)試,其中通過(guò)JCA1.5resourceadaptors的配置,可以讓ActiveMQ可以自動(dòng)的部署到任何兼容J2EE1.4商業(yè)服務(wù)器上―支持多種傳送協(xié)議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA—支持通過(guò)JDBC和journal提供高速的消息持久化—從設(shè)計(jì)上保證了高性能的集群,客戶端-服務(wù)器,點(diǎn)對(duì)點(diǎn)—支持Ajax—支持與Axis的整合—可以很容易得調(diào)用內(nèi)嵌JMSprovider,進(jìn)行測(cè)試參數(shù)比較3.6OpenMQ?出身:OpenMessageQueue是SunJavaSystemMessageQueue的一個(gè)開源版本。Openmessagequeue是一個(gè)企業(yè)級(jí),可升級(jí),非常成熟的消息服務(wù)器。它為面向消息的系統(tǒng)集成提供一套完整的JMS(JavaMessageService)實(shí)現(xiàn)。由于OpenMQ源自Sun的JavaMessageQueue,所以其具有JavaSystemMessageQueue擁有的所有特性,功能和性能。.工作流:我們先來(lái)看看在SunOpenMQ系統(tǒng)中一個(gè)持久、可靠的方式傳送消息的步驟是怎么樣的圖3-3SUNmicrosystemOpenMQ的流程圖?心依畦律泊鼻*控湖酒?CQ說(shuō)明有效負(fù)荷消息:由生成方發(fā)送給使用方的消息??刂葡ⅲ捍砼c客戶端運(yùn)行時(shí)環(huán)境之間傳送的私有消息,用于確保有效負(fù)荷消息成功傳送和控制跨連接的消息流。?客戶端運(yùn)行時(shí)環(huán)境通過(guò)連接將消息從消息生成方傳送到代理代理從連接中讀取消息并將此消息放入相應(yīng)的目的地中。?代理將(持久性)消息放入數(shù)據(jù)存儲(chǔ)庫(kù)中代理向消息生成方的客戶端運(yùn)行時(shí)環(huán)境確認(rèn)已收到消息?代理確定消息的路由?代理將消息從目的地寫入適當(dāng)?shù)倪B接,并使用使用方的唯一標(biāo)識(shí)符標(biāo)記該消息。?消息使用方的客戶端運(yùn)行時(shí)環(huán)境將消息從連接傳送到消息使用方。?消息使用方的客戶端運(yùn)行時(shí)環(huán)境向代理確認(rèn)消息已使用。代理處理客戶端確認(rèn),并在收到所有確認(rèn)后刪除(持久性)消息。代理向使用方的客戶端運(yùn)行時(shí)環(huán)境確認(rèn),告知客戶端確認(rèn)已得到處理。?特點(diǎn):—很好的實(shí)現(xiàn)了JMS規(guī)范,不支持AMQP-性能改進(jìn)-支持提供給發(fā)布者和貢獻(xiàn)者的多個(gè)終點(diǎn)-提供XML負(fù)載信息文檔信息驗(yàn)證-為分布式事務(wù)提供C-API支持-支持MySQL數(shù)據(jù)庫(kù)-支持Sun連接注冊(cè)安裝—支持HA/LB警告如果管理員刪除目的地中的消息,或者管理員刪除或重新定義長(zhǎng)期訂閱,導(dǎo)致主題目的地中的消息未被傳送即被刪除,則代理可以在消息被使用前將它丟棄。在其他情況下,您可能希望代理將消息存儲(chǔ)在稱為停用消息隊(duì)列的特殊目的地中,而不是將它們丟棄。在以下情況,消息會(huì)被放入停用消息隊(duì)列中:消息過(guò)期時(shí)、消息因內(nèi)存限制而被刪除時(shí),以及因客戶端引發(fā)異常而導(dǎo)致傳送失敗時(shí)。通過(guò)將消息存儲(chǔ)在停用消息隊(duì)列中,您可以解決系統(tǒng)問(wèn)題并在某些情況下恢復(fù)消息。MemcacheQ出身:是MemcacheDB的變種,特點(diǎn):-非常簡(jiǎn)單、非常易用、安裝非常簡(jiǎn)單、管理也非常簡(jiǎn)單-處理速度快-多條隊(duì)列-并發(fā)性能好-與memcache的協(xié)議兼容。這就意味著只要裝了memcache的extension就可以了,不需要額外的插件。在zendframework中使用也很方便。隊(duì)列參數(shù)比較CQ說(shuō)明參照第三章的調(diào)研的各種常見MQ,給出各個(gè)參數(shù)的比較表。表4-1各參數(shù)比較MemcacheQOpenMQQPIDActiveMQRabbitMQzeromqMetaQ持久化YESYESYESYESYES?(自己實(shí)現(xiàn))YES綜穩(wěn)定性、可靠在、性能YESYESNONOYES?(自己實(shí)現(xiàn))?,結(jié)4NOYESYESYESNO?(自己實(shí)現(xiàn))YES合我務(wù)們

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論